OpenWrt增加軟體包

來源:互聯網
上載者:User

變數名含義

SECTION     //包的種類CATEGORY    //顯示在menuconfig的哪個目錄下SUBMENU     //menuconfig子目錄TITLE       //簡單的介紹DESCRIPTION //包的詳細介紹URL         //源碼所在的網路路徑MAINTAINER  //維護者DEPENDS     //依賴包
PKG_NAME        //軟體包名稱,將在menuconfig和ipkg可以看到PKG_VERSION     //軟體版本號碼PKG_RELEASE     //Makefile的版本號碼PKG_SOURCE      //原始碼的檔案名稱PKG_MD5SUM      //原始碼檔案的效驗碼。用於核對軟體包是否正確下載PKG_CAT         //原始碼檔案的解壓方法 (zcat, bzcat, unzip)PKG_BUILD_DIR   //軟體包編譯目錄。它的父目錄為$(BUILD_DIR)。如果不指定,預設為$(BUILD_DIR)/$( PKG_NAME)$( PKG_VERSION)

Package

define Package/$(PKG_NAME)    SECTION:=utils    CATEGORY:=Utilities    TITLE:=Helloworld -- prints a snarky messageendef

Build/Prepare
編譯準備方法。自己的程式全部放在src目錄下。一般的準備方法:

define Build/Prepare    mkdir -p $(PKG_BUILD_DIR)    $(CP) ./src/* $(PKG_BUILD_DIR)/endef

Build/Compile
編譯方法。如果不定義將使用預設的編譯方法Build/Compile/Default。一般的定義方法:

define Build/Compile    $(MAKE) -C $(PKG_BUILD_DIR) \        $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"Endef

Package/$(PKG_NAME)/install
安裝方法。舉例:

define Package/$(PKG_NAME)/install    $(INSTALL_DIR) $(1)/etc/init.d/    $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/etc/init.d/    $(INSTALL_DATA) $(PKG_BUILD_DIR)/configs/hello.config $(1)/etc/    $(INSTALL_CONF) $(PKG_BUILD_DIR)/configs/hello.config $(1)/etc/#   $(CP) $(PKG_BUILD_DIR)/tools/{xxx} $(1)/usr/sbin/ //預設許可權,而且只是簡單複製endef

INSTALL_xxx:安裝到PKG_BUILD_DIR和檔案系統目錄下
CP:只安裝到PKG_BUILD_DIR目錄下

INSTALL_xxx變數在$(TOPDIR)/rules.mk中定義

INSTALL_BIN:=install -m0755INSTALL_DIR:=install -d -m0755INSTALL_DATA:=install -m0644INSTALL_CONF:=install -m0600

eval

$(eval <text>)

將text作為Makefile檔案中的一部分

call

$(call BuildPackage,$(PKG_NAME))

引用BuildPackage變數中的內容,並將BuildPackage內部的$(1)替換為PKG_NAME

BuildPackage
BuildPackage變數在$(INCLUDE_DIR)/package.mk中定義

define BuildPackage  $(Build/IncludeOverlay)  $(eval $(Package/Default))  $(eval $(Package/$(1)))ifdef DESCRIPTION$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)endififndef Package/$(1)/descriptiondefine Package/$(1)/description    $(TITLE)endefendif  $(foreach FIELD, TITLE CATEGORY PRIORITY SECTION VERSION,    ifeq ($($(FIELD)),)      $$(error Package/$(1) is missing the $(FIELD) field)    endif  )  $(call shexport,Package/$(1)/description)  $(call shexport,Package/$(1)/config)  $(if $(DUMP), \    $(Dumpinfo/Package), \    $(foreach target, \      $(if $(Package/$(1)/targets),$(Package/$(1)/targets), \        $(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \      ), $(BuildTarget/$(target)) \    ) \  )  $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1)))endef

正確的編譯過程

# make menuconfig# make -j   //自動選擇cpu數量,一般編譯會出錯# make# make package/$(PKG_NAME)/install

必須先make成功,才能執行install,否則會提示依賴庫警告

注意
如果你增加的包需要交叉編譯的,記得在CMakeLists.txt設定交叉編譯器

SET(CMAKE_C_COMPILER "mipsel-openwrt-linux-uclibc-gcc")

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.