如何在OpenWRT環(huán)境下做開發(fā)_第1頁
如何在OpenWRT環(huán)境下做開發(fā)_第2頁
如何在OpenWRT環(huán)境下做開發(fā)_第3頁
如何在OpenWRT環(huán)境下做開發(fā)_第4頁
如何在OpenWRT環(huán)境下做開發(fā)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、':<土虧二 丁= 冗_(dá) _ Id "the Opener- trased TcclchaittI工已巽 con: iguralien Package features Base sys-:ex /IPv6 >li'srsr i&s之前寫過一篇日志, 是關(guān)于如何搭建自己的 OpenWRT開發(fā)環(huán)境。經(jīng)過最近一段時(shí)間的開發(fā) 學(xué)習(xí)和實(shí)踐,對 OpenWRT環(huán)境的開發(fā)有了一定的了解。在這里將我的開發(fā)心得做個(gè)整理。1、搭建開發(fā)環(huán)境首先,我們需要一個(gè)為路由器定制的開發(fā)環(huán)境,具體可以參考我的另一篇日志:搭建自己的OpenWrt開發(fā)環(huán)境。這里只做一個(gè)簡單的補(bǔ)充,在

2、執(zhí)行 make menuconfig后,會(huì)出現(xiàn)下 圖:Target System (BroadeoiE BCM947zx/953zz)Tare* Pref i le |工訂iFi_ def sul tSIc'jeI suild inE5j-dv&nced confion op二£>311士Id :he Zpn'.i'r* Euil:r其中,圖中紅框部分是我定制路由器的系統(tǒng)版本,大家可以根據(jù)不同的路由器進(jìn)行不同的選擇;綠框部分表示我們需要編譯一個(gè)SDK開發(fā)環(huán)境(默認(rèn)情況下,此項(xiàng)未勾選) 。編譯過程中需要通過官網(wǎng)下載很多相關(guān)的軟件包,所以必須保證能夠

3、順利連上外網(wǎng)。由于下載速度的限制,編譯過程大概需要數(shù)小時(shí)。編譯結(jié)束后,所有的產(chǎn)品都會(huì)放在編譯根目錄下的bin/yourtarget/.例如:我所編譯的產(chǎn)物都放在./bin/brcm47xx/下,其中文件主要有幾類:(1) .bin/.trx文件:這些都是在我們所選的target-system的類別之下,針對不同路由器型號、版本編譯的路由器固件。這些不同路由器的型號和版本是openwrt預(yù)先設(shè)置好的,我們不需要更改。至于.bin和.trx的區(qū)別,一種說法是,第一次刷路由器的時(shí)候,需要用 .bin文件, 如果需要再升級,則不能再使用.bin文件,而需要用.trx文件。原因是,.bin是將路由器的相

4、關(guān)配置信息和.trx封裝在一起而生成的封包,也就是說是包含路由器版本信息的.trx。在第一次刷固件的時(shí)候,我們需要提供這樣的信息,而在后續(xù)升級時(shí),則不再需要,用.trx文件即可。(2) packages文件夾:里面包含了我們在配置文件里設(shè)定的所有編譯好的軟件包。默認(rèn)情 況下,會(huì)有默認(rèn)選擇的軟件包。(3) OpenWrt-SDK.*.tar.bz2:這個(gè)也就是我們定制編譯好的OpenWRT SDK環(huán)境。我們將用這個(gè)來進(jìn)行OpenWrt軟件包的開發(fā)。例如,我所編譯好的SDK環(huán)境包為: /bin/brcm47xx/OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4

5、.3.3+cs_uClibc-0.9.30.1.tar.bz2 可以從名稱上看出,target system是brcm47xx , host system是Linux-x86_64 ,使用的編譯工 具以及庫是 4.3.3+cs_uClibc-0.9.30.1 。(4) md5sums文件:這個(gè)文件記錄了所有我們編譯好的文件的MD5值,來保證文件的完整性。因?yàn)槲募牟煌暾?,很容易將路由器變成“磚頭”。需要主要的是,編譯完成后,一定要將編譯好的bin目錄進(jìn)行備份(如果里面東西對你很重要的話),因?yàn)樵谙麓尉幾g之前,執(zhí)行 make clean會(huì)將bin目錄下的所有文件給清除掉!2、 更改原有packa

6、ges在編譯根目錄下會(huì)有一個(gè)dl的目錄,這個(gè)目錄其實(shí)是"download”的簡寫,在編譯前期,需要從網(wǎng)絡(luò)下載的數(shù)據(jù)包都會(huì)放在這個(gè)目錄下,這些軟件包的一個(gè)特點(diǎn)就是,會(huì)自動(dòng)安裝在所編譯的固件中,也就是我們make menuconfig的時(shí)候,為固件配置的一些軟件包。如果我們需要更改這些源碼包,只需要將更改好的源碼包打包成相同的名字放在這個(gè)目錄下,然后開始編譯即可。編譯時(shí),會(huì)將軟件包解壓到build_dir目錄下。當(dāng)然,你也可以自己在 dl里面創(chuàng)建自己的軟件包,然后更改相關(guān)的配置文件,讓 openwrt 可以識別這個(gè)文件包。由于我的項(xiàng)目更改的內(nèi)容是底層的, 需要跟固件一起安裝。 所以,我使

7、用的方法就是直接更 改dl目錄下軟件包,然后重新進(jìn)行固件編譯。感覺類似于Linux的內(nèi)核編譯。反復(fù)編過十多次,沒有任何問題。3、 新建自己的 packages對于自己新建的 package,而這個(gè)package又不需要隨固件一起安裝,換句話說,就是可以 當(dāng)做一個(gè)可選軟件包的話。我們可以利用我們的SDK環(huán)境來單獨(dú)編譯,編譯后會(huì)生成一個(gè)ipk的文件包。然后利用opkg install xxx.ipk 來安裝這個(gè)軟件。下面具體說下,如何編譯一個(gè)helloword的軟件包。(1)首先,編寫 helloworld程序編寫 helloworld.c /* Helloworld.c* The most si

8、mplistic C program ever written.* An epileptic monkey on crack could write this code.*/#include <stdio.h>#include <unistd.h> int main(void)(printf("Hell! O' world, why won't my code compile?nn");return 0;編寫Makefile文件# build helloworld executable when user executes "

9、;make"helloworld: helloworld.o$(CC) $(LDFLAGS) helloworld.o -o helloworldhelloworld.o: helloworld.c$(CC) $(CFLAGS) -c helloworld.c# remove object files and executable when user executes "make clean" clean:rm *.o helloworld在這兩個(gè)文件的目錄下,執(zhí)行make應(yīng)該可以生成 helloworld的可執(zhí)行文件。執(zhí)行helloworld后,能夠打印出&qu

10、ot;Hell!。' world, why won't my code compile?"。這一步,主要保證我們的源 程序是可以正常編譯的。下面我們將其移植到OpenWRT上。(2) 將 OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2 解壓 tar 以vf OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2(3) 進(jìn)入SDKcd OpenWrt-SDK-brcm47xx-

11、for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1可以看到里面的目錄結(jié)構(gòu)跟我們之前source的目錄結(jié)構(gòu)基本相同,所需要編譯的軟件包,需要放置在package目錄下(4) 在 package目錄下創(chuàng)建 helloworld 目錄cd packagemkdir helloworldcd helloworld(5) 創(chuàng)建src目錄,拷貝 helloworld文件mkdir srccp /home/wrt/test/helloworld.c srccp /home/wrt/test/Makefile src(6)在helloworld目錄下創(chuàng)建 Makefil

12、e文件這個(gè)Makefile文件是給 OpenWRT讀的,而之前寫的那個(gè) Makefile文件是針對helloworld給編譯其讀的。兩個(gè) Makefile不在同一層目錄下。touch Makefilevim MakefileMakefile文件模板內(nèi)容如下:ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Il II II II II II II II II II II

13、II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II# OpenWrt Makefile for helloworld program# Most of the variables used here are defined in# the include directives below. We just need to# specify a basic description of the package,# where to buil

14、d our program, where to find# the source files, and where to install the# compiled program on the router.# Be very careful of spacing in this file.# Indents should be tabs, not spaces, and# there should be no trailing whitespace in# lines that are not commented.#ff ff ff ff ff ff ff ff ff ff ff ff f

15、f ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Il II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II IIinclude $(TOPDIR)/rules.mk# Name and release number of this pa

16、ckage PKG_NAME:=helloworldPKG_RELEASE:=1# This specifies the directory where we're going to build the program.# The root build directory, $(BUILD_DIR), is by default the build_mipsel# directory in your OpenWrt SDK directory PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.

17、mk# Specify package information for this program.# The variables defined here should be self explanatory.# If you are running Kamikaze, delete the DESCRIPTION# variable below and uncomment the Kamikaze define# directive for the description belowdefine Package/helloworldSECTION:=utilsCATEGORY:=Utilit

18、iesTITLE:=Helloworld - prints a snarky message endef# Uncomment portion below for Kamikaze and delete DESCRIPTION variable above define Package/helloworld/descriptionIf you can't figure out what this program does, you're probably brain-dead and need immediate medical attention.endef# Specify

19、 what needs to be done to prepare for building the package.# In our case, we need to copy the source files to the build directory.# This is NOT the default. The default uses the PKG_SOURCE_URL and the# PKG_SOURCE which is not defined here to download the source from the web.# In order to just build

20、a simple program that we have just written, it is# much easier to do it this way.define Build/Preparemkdir -p $(PKG_BUILD_DIR)$(CP) ./src/* $(PKG_BUILD_DIR)/endef# We do not need to define Build/Configure or Build/Compile directives# The defaults are appropriate for compiling a simple program such a

21、s this one# Specify where and how to install the program. Since we only have one file,# the helloworld executable, install it by copying it to the /bin directory on# the router. The $(1) variable represents the root directory on the router running# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the# command to copy the binary file from its current location (in our case the build# directory) to the install director

溫馨提示

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

評論

0/150

提交評論