| 01. |
在 OpenWRT 的 package/system 建立目錄, 結構為 :
主目錄.
mint-cm 放置原始碼的目錄. mint-cm/src 放置其他檔案的目錄. mint-cm/files |
| 02. | 將 mint_cm 裡面的檔案複製到 mint-cm/src 目錄內. |
| 03. | 參考 #03-04#, 修改 CGI 端用來顯示錯誤訊息或除錯訊息的 console 設備為 /dev/console. |
| 04. | 參考 #12-01#01 和 #12-01#02, 把 mint-cm/src 目錄內用到 mcm_lulib_api 和 maam_lulib_api 的部分改為使用動態鏈結. |
| 05. |
在 mint-cm 目錄建立給 OpenWRT 編譯使用的
Makefile, 內容 :include $(TOPDIR)/rules.mk PKG_NAME:=mint-cm PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/kernel.mk define Package/$(PKG_NAME) SECTION:=base CATEGORY:=Base system TITLE:=Mint Configuration Management DEPENDS:=+libpthread endef define Build/Prepare # 複製程式碼到 build_dir 目錄. mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Configure # 在 PC 上編譯和執行 mcm_build, 分析 mcm_data_profile.xml 產生相關的檔案. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_profile endef define Build/Compile # 編譯 mcm_lulib_api. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_lulib \ CROSS="$(TARGET_CROSS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" # 編譯 mcm_lklib_api. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_lklib \ ARCH="$(LINUX_KARCH)" \ CROSS="$(TARGET_CROSS)" \ KERNEL_PATH="$(LINUX_DIR)" \ EXTRA_CFLAGS="$(EXTRA_CFLAGS)" # 編譯 mcm_cgi. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_cgi \ CROSS="$(TARGET_CROSS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" # 編譯 mini_httpd. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_httpd \ CROSS="$(TARGET_CROSS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" # 編譯 mcm_daemon. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_daemon \ CROSS="$(TARGET_CROSS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" # 編譯 mcm_command. cd $(PKG_BUILD_DIR); \ $(MAKE) binary_command \ CROSS="$(TARGET_CROSS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" endef MCM_LIB_PATH:=$(PKG_BUILD_DIR)/mcm_lib MCM_LHEADER_PATH:=$(MCM_LIB_PATH)/mcm_lheader MCM_LULIB_PATH:=$(MCM_LIB_PATH)/mcm_lulib MCM_LKLIB_PATH:=$(MCM_LIB_PATH)/mcm_lklib MCM_JSLIB_PATH:=$(MCM_LIB_PATH)/mcm_jslib MCM_BUILD_PATH:=$(PKG_BUILD_DIR)/mcm_build MCM_DAEMON_PATH:=$(PKG_BUILD_DIR)/mcm_daemon MCM_MODULE_PATH:=$(MCM_DAEMON_PATH)/mcm_module MCM_COMMAND_PATH:=$(PKG_BUILD_DIR)/mcm_command MCM_CGI_PATH:=$(PKG_BUILD_DIR)/mcm_cgi MCM_CGI_CONFIG_MODULE_PATH:=$(MCM_CGI_PATH)/mcm_cgi_config_module MCM_CGI_UPLOAD_MODULE_PATH:=$(MCM_CGI_PATH)/mcm_cgi_upload_module MINIHTTPD_PATH:=$(PKG_BUILD_DIR)/http_server/mini_httpd/last MAAM_PATH:=$(MINIHTTPD_PATH)/mint_aam MAAM_LIB_PATH:=$(MAAM_PATH)/maam_lib MAAM_LULIB_PATH:=$(MAAM_LIB_PATH)/maam_lulib MAAM_JSLIB_PATH:=$(MAAM_LIB_PATH)/maam_jslib # 假設目標平台存放網頁的路徑為 /web, # 注意則 mini_httpd.conf 內的 [dir=...] 要改為 [dir=/]. TARGET_WEB_PATH:=web define Package/$(PKG_NAME)/install ## 安裝 mcm_lulib_api 部分 ## # 安裝給其他程式使用的標頭檔. rm -rf $(STAGING_DIR)/usr/include/mcm_lib $(INSTALL_DIR) $(STAGING_DIR)/usr/include/mcm_lib/mcm_lheader $(CP) $(MCM_LHEADER_PATH)/*.h $(STAGING_DIR)/usr/include/mcm_lib/mcm_lheader $(INSTALL_DIR) $(STAGING_DIR)/usr/include/mcm_lib/mcm_lulib $(CP) $(MCM_LULIB_PATH)/*.h $(STAGING_DIR)/usr/include/mcm_lib/mcm_lulib # 安裝 mcm_lulib_api 函式庫. $(INSTALL_DIR) $(1)/usr/lib $(CP) $(MCM_LULIB_PATH)/*.so $(1)/usr/lib ## 安裝 mcm_lklib_api 部分 ## # 安裝給其他程式使用的標頭檔. rm -rf $(LINUX_DIR)/include/mcm_lib $(INSTALL_DIR) $(LINUX_DIR)/include/mcm_lib/mcm_lheader $(CP) $(MCM_LHEADER_PATH)/*.h $(LINUX_DIR)/include/mcm_lib/mcm_lheader $(INSTALL_DIR) $(LINUX_DIR)/include/mcm_lib/mcm_lklib $(CP) $(MCM_LKLIB_PATH)/*.h $(LINUX_DIR)/include/mcm_lib/mcm_lklib # 安裝 mcm_lklib_api 函式庫. $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION) $(CP) $(MCM_LKLIB_PATH)/*.ko $(1)/lib/modules/$(LINUX_VERSION) # 設定開機自動載入 mcm_lklib_api. $(INSTALL_DIR) $(1)/etc/modules.d echo "mcm_lklib_api" > $(1)/etc/modules.d/01-mcm_lklib_api chmod 775 $(1)/etc/modules.d/01-mcm_lklib_api # 安裝 mcm_daemon, 模組函式, 資料模組, 資料預設值. $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(MCM_DAEMON_PATH)/mcm_daemon $(1)/sbin $(INSTALL_DIR) $(1)/etc $(CP) $(MCM_MODULE_PATH)/mcm_module.lib $(1)/etc $(CP) $(MCM_BUILD_PATH)/mcm_model_profile.txt $(1)/etc $(INSTALL_DIR) $(1)/etc/config $(CP) $(MCM_BUILD_PATH)/mcm_store_profile_default.txt $(1)/etc/config # 安裝 mcm command. $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(MCM_COMMAND_PATH)/mcm $(1)/sbin # 安裝 mini_httpd 和設定檔. $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(MINIHTTPD_PATH)/mini_httpd $(1)/sbin $(INSTALL_DIR) $(1)/etc $(CP) $(MINIHTTPD_PATH)/mini_httpd.conf $(1)/etc # 安裝網頁端存取使用的函式. $(INSTALL_DIR) $(1)/$(TARGET_WEB_PATH) $(CP) $(MCM_JSLIB_PATH)/*.js $(1)/$(TARGET_WEB_PATH) # 安裝 mcm_cgi. $(INSTALL_DIR) $(1)/$(TARGET_WEB_PATH)/cgi $(INSTALL_BIN) $(MCM_CGI_PATH)/mcm_cgi_config.cgi $(1)/$(TARGET_WEB_PATH)/cgi $(CP) $(MCM_CGI_CONFIG_MODULE_PATH)/mcm_cgi_config_module.lib $(1)/$(TARGET_WEB_PATH)/cgi $(INSTALL_BIN) $(MCM_CGI_PATH)/mcm_cgi_upload.cgi $(1)/$(TARGET_WEB_PATH)/cgi $(CP) $(MCM_CGI_UPLOAD_MODULE_PATH)/mcm_cgi_upload_module.lib $(1)/$(TARGET_WEB_PATH)/cgi ## 安裝 maam_lulib_api 部分 (標頭檔, 函式庫, 網頁函式) ## if [ -d "$(MAAM_PATH)" ]; then \ rm -rf $(STAGING_DIR)/usr/include/maam_lib; \ $(INSTALL_DIR) $(STAGING_DIR)/usr/include/maam_lib/maam_lulib; \ $(CP) $(MAAM_LULIB_PATH)/*.h $(STAGING_DIR)/usr/include/maam_lib/maam_lulib; \ $(INSTALL_DIR) $(1)/usr/lib; \ $(CP) $(MAAM_LULIB_PATH)/*.so $(1)/usr/lib; \ $(INSTALL_DIR) $(1)/$(TARGET_WEB_PATH); \ $(CP) $(MAAM_JSLIB_PATH)/*.js $(1)/$(TARGET_WEB_PATH); \ fi # 安裝開機自動執行 mcm_daemon 和 mini_httpd 的設定檔. $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/mint-cm.init $(1)/etc/init.d/mint-cm endef $(eval $(call BuildPackage,$(PKG_NAME))) |
| 06. |
在 mint-cm/files
目錄內加入開機自動執行 mcm_daemon 和 mini_httpd 的設定檔,
檔名為 mint-cm.init, 內容 :
#!/bin/sh /etc/rc.common
START=1
start() {
mcm_daemon \
-l /etc/mcm_module.lib \
-m /etc/mcm_model_profile.txt \
-d /etc/config/mcm_store_profile_default.txt \
-c /etc/config/mcm_store_profile_current.txt &
mini_httpd \
-D -C /etc/mini_httpd.conf &
}
|
| 07. |
在 OpenWRT 根目錄使用 make menuconfig,
啟用 mint-cm 並儲存 :Base system ---> <*> mint-cm |
| 08. | 在 OpenWRT 根目錄使用 make V=s 開始編譯. |
| 01. |
給 OpenWRT 使用的 Makefile 需要加上依賴 mint-cm :
DEPENDS:=+mint-cm
|
| 02. | 編譯程式的 Makefile 部分參考 #03-02#, 不過因為 mcm_lulib_api 相關的標頭檔和函式庫在編譯 mint-cm 時會複製到 OpenWRT 指定的開發目錄, OpenWRT 編譯其他程式會參考指定的開發目錄, 所以 標頭檔路徑設定 (-I$(MCM_PATH)), 函式庫路徑設定 (-L$(MCM_LULIB_PATH)) 不需要, 只需要加上 設定鏈結 mcm_lulib_api 函式 (-lmcm_lulib_api). |
| 03. |
程式需要使用的標頭檔原本是在 #03-02#,
因為 OpenWRT 編譯其他程式會參考指定的開發目錄, 所以要改為 :
#include <mcm_lib/mcm_lheader/mcm_type.h>
#include <mcm_lib/mcm_lheader/mcm_size.h> #include <mcm_lib/mcm_lheader/mcm_connect.h> #include <mcm_lib/mcm_lheader/mcm_return.h> #include <mcm_lib/mcm_lheader/mcm_data_exinfo_auto.h> #include <mcm_lib/mcm_lulib/mcm_lulib_api.h> |
| 01. |
給 OpenWRT 使用的 Makefile 需要加上依賴 mint-cm :
DEPENDS:=+mint-cm
|
| 02. | 編譯程式的 Makefile 部分參考 #03-03#, 不過因為 mcm_lklib_api 相關的標頭檔和函式庫在編譯 mint-cm 時會複製到 OpenWRT 指定的開發目錄, OpenWRT 編譯其他程式會參考指定的開發目錄, 所以 標頭檔路徑設定 (-I$(MCM_PATH)) 不需要. |
| 03. |
程式需要使用的標頭檔原本是在 #03-03#,
因為 OpenWRT 編譯其他程式會參考指定的開發目錄, 所以要改為 :
#include <mcm_lib/mcm_lheader/mcm_type.h>
#include <mcm_lib/mcm_lheader/mcm_size.h> #include <mcm_lib/mcm_lheader/mcm_connect.h> #include <mcm_lib/mcm_lheader/mcm_return.h> #include <mcm_lib/mcm_lheader/mcm_data_exinfo_auto.h> #include <mcm_lib/mcm_lklib/mcm_lklib_api.h> |
| 01. |
給 OpenWRT 使用的 Makefile 需要加上依賴 mint-cm :
DEPENDS:=+mint-cm
|
| 02. | 編譯程式的 Makefile 部分參考 #10-04#, 不過因為 maam_lulib_api 相關的標頭檔和函式庫在編譯 mint-cm 時會複製到 OpenWRT 指定的開發目錄, OpenWRT 編譯其他程式會參考指定的開發目錄, 所以 標頭檔路徑設定 (-I$(MAAM_PATH)), 函式庫路徑設定 (-L$(MAAM_LULIB_PATH)) 不需要, 只需要加上 設定鏈結 mcm_lulib_api 函式 (-lmcm_lulib_api). |
| 03. |
程式需要使用的標頭檔原本是在 #10-04#,
因為 OpenWRT 編譯其他程式會參考指定的開發目錄, 所以要改為 :
#include <maam_lib/maam_lulib/maam_lulib_api.h>
|