OpenWrt增加軟件包方法.doc_第1頁
OpenWrt增加軟件包方法.doc_第2頁
OpenWrt增加軟件包方法.doc_第3頁
OpenWrt增加軟件包方法.doc_第4頁
OpenWrt增加軟件包方法.doc_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

OpenWrt增加軟件包方法OpenWrt是一個比較完善的嵌入式Linux開發(fā)平臺,在無線路由器應(yīng)用上已有100多個軟件包。人們可以在其基礎(chǔ)上增加軟件包,以擴大其應(yīng)用范圍。OpenWrt在增加軟件方面使用極其方便,按照OpenWrt的約定就可以很簡單完成。 加入的軟件包可以是網(wǎng)上可下載的開源軟件或自行開發(fā)的軟件。為加入軟件包需要在package目錄下創(chuàng)建一個目錄,以包含軟件包的各種信息和與OpenWrt建立聯(lián)系的文件。然后創(chuàng)建一個Makefile與OpenWrt建立聯(lián)系,Makefile需要遵循OpenWrt的約定。另外可以創(chuàng)建一個patchs目錄保存patch文件,對下載的源代碼進行適量修改。下面主要介紹Makefile的基本約定。1、引入文件OpenWrt使用三個makefile的子文件,分別為:include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mkinclude $(INCLUDE_DIR)/package.mk 由這些makefile子文件確立軟件包加入OpenWrt的方式和方法。$(TOPDIR)/rules.mk一般在Makefile的開頭,$(INCLUDE_DIR)/kernel.mk文件對於軟件包為內(nèi)核時不可缺少,$(INCLUDE_DIR)/package.mk一般在軟件包的基本信息完成後再引入。2、編寫軟件包的基本信息,這些軟件包的信息均以PKG_開頭,其意思和作用如下:PKG_NAME表示軟件包名稱,將在menuconfig和ipkg可以看到。PKG_VERSION表示軟件版本號。PKG_RELEASE表示Makefile的版本號PKG_SOURCE表示源代碼的文件名。PKG_SOURCE_URL表示源代碼的下載網(wǎng)站位置。SF表示在sourceforge網(wǎng)站,GNU表示在GNU網(wǎng)站,還有GNOME、KERNEL。獲取方式可以為:git、svn、cvs、hg、bzr等。有關(guān)下載方法可參考$(INCLUDE_DIR)/download.mk和$(SCRIPT_DIR)/download.pl。PKG_MD5SUM表示源代碼文件的效驗碼。用于核對軟件包是否正確下載。PKG_CAT表示源代碼文件的解壓方法。包括zcat, bzcat, unzip等。PKG_BUILD_DIR表示軟件包編譯目錄。它的父目錄為$(BUILD_DIR)。如果不指定,默認為$(BUILD_DIR)/$( PKG_NAME)$( PKG_VERSION)。還有一些有關(guān)源代碼的定義。PKG_SOURCE_SUBDIRPKG_SOURCE_PROTOPKG_SOURCE_MIRRORPKG_MIRROR_MD5SUMPKG_SOURCE_VERSION3、編譯包定義用戶程序和內(nèi)核模塊的定義不一樣。用戶態(tài)軟件包使用Package,內(nèi)核模塊使用KernelPackage。3.1用戶程序編譯包定義用戶程序的編譯包以Package/開頭,然后接著軟件名,在Package定義中的軟件名可以與軟件包名不一樣,而且可以多個定義。下面使用$(PKG_NAME)只是做一個標示,并非真正使用$(PKG_NAME)。Package/$(PKG_NAME)SECTION表示包的類型,預(yù)留。CATEGORY表示分類,在menuconfig的菜單下將可以找到。TITLE用于軟件包的簡短描述DESCRIPTION用于軟件包的詳細描述,已放棄使用。如果使用DESCRIPTION將會提示“error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description”。URL表示軟件包的下載位置。MAINTAINER表示維護者,選項。DEPENDS表示與其他軟件的依賴。即如編譯或安裝需要其他軟件時需要說明。如果存在多個依賴,則每個依賴需用空格分開。依賴前使用+號表示默認顯示,即對象沒有選中時也會顯示,使用則默認為不顯示,即當依賴對象選中後才顯示。在用戶態(tài)的軟件包中沒有內(nèi)核模塊的AUTOLOAD參數(shù)。如果軟件需要在boot時自動運行,則需要在/etc/init.d增加相應(yīng)的腳本文件。腳本文件需要START參數(shù),說明在boot時的優(yōu)先級,如果在boot過程啟動後在關(guān)閉,則需要進一步設(shè)置STOP參數(shù)。如果STOP參數(shù)存在,其值必須大於START。腳本文件需要start()和stop()兩個函數(shù),start()是執(zhí)行程序,stop()是關(guān)閉程序。關(guān)閉程序一般需要執(zhí)行killall命令。由/etc/rc.d/S10boot知道,裝載內(nèi)核模塊的優(yōu)先級為10,需要使用自己設(shè)計的內(nèi)核模塊的程序其START的值必須大於10. 同樣由/etc/rc.d/S40network知道,使用網(wǎng)絡(luò)通信的程序其START的值必須大於40。Package/$(PKG_NAME)/conffiles本包安裝的配置文件,一行一個。如果文件結(jié)尾使用/,則表示為目錄。用於備份配置文件說明,在sysupgrade命令執(zhí)行時將會用到。Package/$(PKG_NAME)/description軟件包的詳細描述,取代前面提到的DESCRIPTION詳細描述。Build/Prepare編譯準備方法,對于網(wǎng)上下載的軟件包不需要再描述。對于非網(wǎng)上下載或自行開發(fā)的軟件包必須說明編譯準備方法。一般的準備方法為:define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/endef按OpenWrt的習(xí)慣,一般把自己設(shè)計的程序全部放在src目錄下。Build/Configure在Automake中需要進行./configure,所以本配置方法主要針對需要配置的軟件包而設(shè)計,一般自行開發(fā)的軟件包可以不在這里說明。需要使用本定義的情況,可參考dropbear。Build/Compile編譯方法,沒有特別說明的可以不予以定義。如果不定義將使用默認的編譯方法Build/Compile/Default自行開發(fā)的軟件包可以考慮使用下面的定義。define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS) CFLAGS=$(TARGET_CFLAGS) -I$(LINUX_DIR)/includeEndefPackage/$(PKG_NAME)/install軟件包的安裝方法,包括一系列拷貝編譯好的文件到指定位置。調(diào)用時會帶一個參數(shù),就是嵌入系統(tǒng)的鏡像文件系統(tǒng)目錄,因此$(1)表示嵌入系統(tǒng)的鏡像目錄。一般可以采用下面的方法:define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/ $(PKG_NAME) $(1)/usr/bin/endefINSTALL_DIR、INSTALL_BIN在$(TOPDIR)/rules.mk文件定義,所以本Makefile必須引入$(TOPDIR)/rules.mk文件。INSTALL_DIR :=install -d -m0755 意思創(chuàng)建所屬用戶可讀寫即執(zhí)行,其他用戶可讀可執(zhí)行的目錄。INSTALL_BIN:=install -m0755意思編譯好的文件到鏡像文件目錄。如果用戶態(tài)軟件在boot時要自動運行,則需要在安裝方法說明中增加自動運行的腳本文件安裝和配置文件安裝方法。例如:define Package/mountd/install $(INSTALL_DIR) $(1)/sbin/ $(1)/etc/config/ $(1)/etc/init.d/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mountd $(1)/sbin/ $(INSTALL_DATA) ./files/mountd.config $(1)/etc/config/mountd $(INSTALL_BIN) ./files/mountd.init $(1)/etc/init.d/mountdendef安裝文件放在files子目錄下,不要與源代碼文件目錄src混在一起,以提高可讀性。使用清晰的文件擴展名,更方便安裝識別文件。Package/$(PKG_NAME)/preinst軟件包安裝前處理方法,使用腳本語言,因此定義的第一行需要下面的格式#!/bin/sh調(diào)用時帶入的參數(shù)為嵌入式系統(tǒng)的鏡像目錄。Package/$(PKG_NAME)/postinst軟件包安裝后處理方法,使用腳本語言。Package/$(PKG_NAME)/prerm軟件包刪除前處理方法,使用腳本語言Package/$(PKG_NAME)/postrm軟件包刪除后處理方法,使用腳本語言3.2內(nèi)核模塊包定義Linux分為內(nèi)核態(tài)和用戶態(tài)。開發(fā)者開發(fā)的內(nèi)核部分可以直接加入Linux的Kernel程序,也可以生成內(nèi)核模塊以便需要時裝入內(nèi)核。OpenWrt一般希望開發(fā)者生成內(nèi)核模塊,在Linux啟動后自動裝載或手工使用insmod命令裝載。內(nèi)核模塊使用KernelPackage開頭,其他與一般軟件包基本相同。在內(nèi)核模塊定義中增加SUBMENU表示子菜單位置,在$(INCLUDE)/kernel.mk對內(nèi)核模塊定義了CATEGORY為kernel modules,所以內(nèi)核模塊在menuconfig中的主菜單為kernel modules,然后有下一級子菜單$(SUBMENU)。在子菜單下可以看到以kmod-$( PKG_NAME)項目。DEFAULT表示直接編入內(nèi)核或產(chǎn)生內(nèi)核模塊,y表示直接編入內(nèi)核,m表示產(chǎn)生內(nèi)核模塊。AUTOLOAD表示自動裝入內(nèi)核,一般表示方法為:AUTOLOAD:=$(call AutoLoad, $(PRIORITY),$(AUTOLOAD_MODS)AutoLoad的第一個參數(shù)$(PRIORITY)為優(yōu)先級,01為最優(yōu)先,99為最后裝載。有關(guān)自動裝載可以在/etc/modules.d目錄下看到,第二個參數(shù)$(AUTOLOAD_MODS)模塊名,每個模塊名以空格符分隔。即可同時裝載多個內(nèi)核模塊。在開發(fā)過程最好不要使用自

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論