OpenWRT添加模塊 Makefile和Config.in

添加模塊編譯

在網上找了一下,不少關於編譯Openwrt系統的資料,不過這些事情芯片廠商提供的開發包都已經辦得妥妥了,可是沒有找到系統介紹的資料,添加一個包的介紹有很少,其中有兩個頗有參考價值:html

http://blog.csdn.net/lj627889343/article/details/7997463linux

http://kamikaze.openwrt.org/docs/openwrt.html#x1-460002.1.2shell

詳細步驟以下:網絡

在package目錄下建立模塊目錄my_module,內含:app

Makefile           用於創建於OpenWRT的聯繫,成爲OpenWRT的一個包ide

src                    包含本身的代碼ui

src/hello.c       源代碼.net

src/Makefile    源代碼的Makefilehtm

後續將主要講解一下目前的系統Makefile的理解:blog

include $(TOPDIR)/rules.mk                                必須包含
#include $(INCLUDE_DIR)/kernel.mk               內核模塊包含,目前不須要

PKG_NAME:=my_module                                     包名稱,在menuconfig顯示
PKG_VERSION:=0.0.1                                           包版本號
PKG_BASE_NAME:=my_module                         包名稱,在build_dir下面建立PKG_BASE_NAME-PKG_VERSION目錄,用於存放源代碼
#PKG_SOURCE:=$(PKG_BASE_NAME)-$(PKG_VERSION).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_BASE_NAME)-$(PKG_VERSION)              指定代碼存放路徑
#PKG_RELEASE:=1
#PKG_SOURCE_URL:=http://localhost
PKG_BUILD_DEPENDS:=
PKG_BIN_DIR=                                                        上面註釋了三項,是爲了避免讓OpenWRT去下載代碼(而從本地拷貝代碼,見後面說明)

include $(INCLUDE_DIR)/package-version-override.mk             不知道幹嗎用,應該是必定要的
include $(INCLUDE_DIR)/package.mk                                            不知道幹嗎用,應該是必定要的

ifeq ($(DUMP),)                                                                                      不知道幹嗎用
 STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell $(SH_FUNC) grep '^CONFIG_GPON_' $(TOPDIR)/.config | md5s)
endif

define Package/$(PKG_NAME)                                                           用於設置menuconfig的選項
  SECTION:=application                                                                        不知道幹嗎用,相似的選項有net/sys/driver...應該是linux系統的分類
  CATEGORY:=teddy                                                                              menuconfig頂級目錄
  TITLE:=the first module by teddy                                                      本包的目錄項說明(目錄項名稱即包名稱)
  URL:=http://www.teddy.com/                                                              不知道幹嗎用,估計用處不大
  MAINTAINER:=teddy                                                                            不知道幹嗎用,估計用處不大
  DEPENDS:=                                                                                          依賴的包,還不會用
  MENU:=1                                                                                                目錄項使能,若是若是基礎模塊能夠設爲0
endef

define Package/$(PKG_NAME)/description                                      不知道幹嗎用,估計用處不大
   Teddy's First Package On OpenWRT.
endef

define Package/$(PKG_NAME)/config                                                結合config/Config.in設置比較複雜的目錄項,能夠不用
 menu "detail configurations"                                                               第一個選項,由開發人員自行設置
 depends on PACKAGE_$(PKG_NAME)
  source "$(SOURCE)/config/Config.in"
 endmenu
   $(call Package/$(PKG_NAME)/override_version)                          第二個選項,由系統提供,應該是另外指定版本號
   $(call Package/$(PKG_NAME)/override_source_path)                第三個選項,有系統提供,應該是另外指定代碼存放路徑的
endef

CONFIGURE_ARGS +=

ifeq ($(CONFIG_mips),y)                                                                        不知道幹嗎用
CONFIGURE_ARGS += --enable-add_drv_cflags="-fno-pic -mno-abicalls -mlong-calls -G 0"
endif

define Build/Prepare                                                                                這個很關鍵,在上面取消了從網絡下載,由這裏的語句將src的代碼拷到指定位置
 mkdir -p $(PKG_BUILD_DIR)
 $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Clean                                                                                     清除語句,沒用過
 @- rm -Rf $(PKG_BUILD_DIR)/ipkg*
 @- [ -e $(PKG_BUILD_DIR)/Makefile ] && $(MAKE) -C $(PKG_BUILD_DIR) clean
 $(call Build/Clean/Default)
endef


define Package/$(PKG_NAME)/install                                                   忘記幹嗎用的了,好像是用來建立目錄的,沒有這句會致使編譯不過
 $(INSTALL_DIR) $(1)/$(PKG_BIN_DIR)
endef

$(eval $(call BuildPackage,$(PKG_NAME)))                                        必須

另外還能夠建立

config/Config.in

用於細節定義,如

menu "macros"    config FIRST_MACRO                                                                            這裏的config值能夠被Makefile使用,可是尚未發現源代碼能夠用        bool "first macro defined in my module"        default y    config SECOND_MACRO        bool "second macro defined in my module"        default yendmenu

相關文章
相關標籤/搜索