




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、之前寫過一篇日志,是關(guān)于如何搭建自己的OpenWRT開發(fā)環(huán)境。經(jīng)過最近一段時(shí)間的開發(fā)學(xué)習(xí)和實(shí)踐,對(duì)OpenWRT環(huán)境的開發(fā)有了一定的了解。在這里將我的開發(fā)心得做個(gè)整理。1、搭建開發(fā)環(huán)境搭建自己首先,我們需要一個(gè)為路由器定制的開發(fā)環(huán)境,具體可以參考我的另一篇日志:的OpenWrt開發(fā)環(huán)境。這里只做一個(gè)簡(jiǎn)單的補(bǔ)充,在執(zhí)行makemenuconfig后,會(huì)出現(xiàn)下圖:其中,圖中紅框部分是我定制路由器的系統(tǒng)版本,大家可以根據(jù)不同的路由器進(jìn)行不同的選擇;綠框部分表示我們需要編譯一個(gè)SDK開發(fā)環(huán)境(默認(rèn)情況下,此項(xiàng)未勾選)編譯過程中需要通過官網(wǎng)下載很多相關(guān)的軟件包,所以必須保證能夠順利連上外網(wǎng)。由于下載速度
2、的限制,編譯過程大概需要數(shù)小時(shí)。編譯結(jié)束后,所有的產(chǎn)品都會(huì)放在編譯根目錄下的bin/yourtarget/.例如:我所編譯的產(chǎn)物都放在./bin/brcm47xx/下,其中文件主要有幾類:(1) .bin/.trx文件:這些都是在我們所選的target-system的類別之下,針對(duì)不同路由器型號(hào)、版本編譯的路由器固件。這些不同路由器的型號(hào)和版本是openwrt預(yù)先設(shè)置好的,我們不需要更改。至于.bin和.trx的區(qū)別,一種說法是,第一次刷路由器的時(shí)候,需要用.bin文件,如果需要再升級(jí),則不能再使用.bin文件,而需要用.trx文件。原因是,.bin是將路由器的相關(guān)配置信息和.trx封裝在一起
3、而生成的封包,也就是說是包含路由器版本信息的.trx。在第一次刷固件的時(shí)候,我們需要提供這樣的信息,而在后續(xù)升級(jí)時(shí),則不再需要,用.trx文件即可。(2) packages文件夾:里面包含了我們?cè)谂渲梦募镌O(shè)定的所有編譯好的軟件包。默認(rèn)情況下,會(huì)有默認(rèn)選擇的軟件包。(3) OpenWrt-SDK.*.tar.bz2:這個(gè)也就是我們定制編譯好的OpenWRTSDK環(huán)境。我們將用這個(gè)來進(jìn)行OpenWrt軟件包的開發(fā)。例如,我所編譯好的SDK環(huán)境包為:/bin/brcm47xx/OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9
4、.30.1.tar.bz2可以從名稱上看出,targetsystem是brcm47xx,hostsystem是Linux-x86_64,使用的編譯工具以及庫(kù)是4.3.3+cs_uClibc-0.9.30.1。(4) md5sums文件:這個(gè)文件記錄了所有我們編譯好的文件的MD5值,來保證文件的完整性。因?yàn)槲募牟煌暾?,很容易將路由器變成“磚頭”。需要主要的是,編譯完成后,一定要將編譯好的bin目錄進(jìn)行備份(如果里面東西對(duì)你很重要的話),因?yàn)樵谙麓尉幾g之前,執(zhí)行makeclean會(huì)將bin目錄下的所有文件給清除掉!!2、 更改原有packages在編譯根目錄下會(huì)有一個(gè)dl的目錄,這個(gè)目錄其實(shí)是“
5、download”的簡(jiǎn)寫,在編譯前期,需要從網(wǎng)絡(luò)下載的數(shù)據(jù)包都會(huì)放在這個(gè)目錄下,這些軟件包的一個(gè)特點(diǎn)就是,會(huì)自動(dòng)安裝在所編譯的固件中,也就是我們makemenuconfig的時(shí)候,為固件配置的一些軟件包。如果我們需要更改這些源碼包,只需要將更改好的源碼包打包成相同的名字放在這個(gè)目錄下,然后開始編譯即可。編譯時(shí),會(huì)將軟件包解壓到build_dir目錄下。當(dāng)然,你也可以自己在dl里面創(chuàng)建自己的軟件包,然后更改相關(guān)的配置文件,讓openwrt可以識(shí)別這個(gè)文件包。由于我的項(xiàng)目更改的內(nèi)容是底層的,需要跟固件一起安裝。所以,我使用的方法就是直接更改dl目錄下軟件包,然后重新進(jìn)行固件編譯。感覺類似于Linu
6、x的內(nèi)核編譯。反復(fù)編過十多次,沒有任何問題。3、 新建自己的packages對(duì)于自己新建的package,而這個(gè)package又不需要隨固件一起安裝,換句話說,就是可以當(dāng)做一個(gè)可選軟件包的話。我們可以利用我們的SDK環(huán)境來單獨(dú)編譯,編譯后會(huì)生成一個(gè)ipk的文件包。然后利用opkginstallxxx.ipk來安裝這個(gè)軟件。下面具體說下,如何編譯一個(gè)helloword的軟件包。(1)首先,編寫helloworld程序編寫helloworld.c/*Helloworld.c*ThemostsimplisticCprogrameverwritten.*Anepilepticmonkeyoncrack
7、couldwritethiscode.*/#include#includeintmain(void)(printf(Hell!Oworld,whywontmycodecompile?nn);return0;編寫Make巾le文件#buildhelloworldexecutablewhenuserexecutesmakehelloworld:helloworld.o$(CC)$(LDFLAGS)helloworld.o-ohelloworldhelloworld.o:helloworld.c$(CC)$(CFLAGS)-chelloworld.c#removeobjectfilesandexec
8、utablewhenuserexecutesmakecleanclean:rm*.ohelloworld在這兩個(gè)文件的目錄下,執(zhí)行make應(yīng)該可以生成helloworld的可執(zhí)行文件。執(zhí)行helloworld后,能夠打印出Hell!Oworld,whywontmycodecompile?。這一步,主要保證我們的源程序是可以正常編譯的。下面我們將其移植到OpenWRT上。(2)將OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-433+cs_uClibc-0.9.30.1.tar.bz2解壓tarvfOpenWrt-SDK-brcm47xx-for-Linux-
9、x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2(3)進(jìn)入SDKcdOpenWrt-SDK-brcm47xx-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目錄cdpackagemkdirhelloworldcdhelloworld(5)創(chuàng)建src目錄,拷貝helloworld文件mkdirsrccp/home/wrt/test/helloworl
10、d.csrccp/home/wrt/test/Makefilesrc(6)在helloworld目錄下創(chuàng)建Make巾le文件這個(gè)Make巾le文件是給OpenWRT讀的,而之前寫的那個(gè)Makefile文件是針對(duì)helloworld給編譯其讀的。兩個(gè)Makefile不在同一層目錄下。touchMakefilevimMakefileMakefile文件模板內(nèi)容如下:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffk“kF“kk”“kkkIlIIIIIIIIIIII
11、IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII#OpenWrtMakefileforhelloworldprogram# Mostofthevariablesusedherearedefinedin# theincludedirectivesbelow.Wejustneedto# specifyabasicdescriptionofthepackage,# wheretobuildourprogram,wheretofind# thesourcefiles,andwheretoinst
12、allthe# compiledprogramontherouter.# Beverycarefulofspacinginthisfile.# Indentsshouldbetabs,notspaces,and# thereshouldbenotrailingwhitespacein# linesthatarenotcommented.#ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffk“kF“kk”“kkkIlIIIIIIIIIIIIIIIIIIIIIIII
13、IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIinclude$(TOPDIR)/rules.mk# NameandreleasenumberofthispackagePKG_NAME:=helloworldPKG_RELEASE:=1# Thisspecifiesthedirectorywhereweregoingtobuildtheprogram.# Therootbuilddirectory,$(BUILD_DIR),isbydefaultthebuild_mipsel# directoryinyourO
14、penWrtSDKdirectoryPKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)include$(INCLUDE_DIR)/package.mk# Specifypackageinformationforthisprogram.# Thevariablesdefinedhereshouldbeselfexplanatory.# IfyouarerunningKamikaze,deletetheDESCRIPTION# variablebelowanduncommenttheKamikazedefine# directiveforthedescriptionbe
15、lowdefinePackage/helloworldSECTION:=utilsCATEGORY:=UtilitiesTITLE:=Helloworld-printsasnarkymessageendef# UncommentportionbelowforKamikazeanddeleteDESCRIPTIONvariableabovedefinePackage/helloworld/descriptionIfyoucantfigureoutwhatthisprogramdoes,youreprobablybrain-deadandneedimmediatemedicalattention.
16、endef# Specifywhatneedstobedonetoprepareforbuildingthepackage.# Inourcase,weneedtocopythesourcefilestothebuilddirectory.# ThisisNOTthedefault.ThedefaultusesthePKG_SOURCE_URLandthe# PKG_SOURCEwhichisnotdefinedheretodownloadthesourcefromtheweb.# Inordertojustbuildasimpleprogramthatwehavejustwritten,it
17、is# mucheasiertodoitthisway.defineBuild/Preparemkdir-p$(PKG_BUILD_DIR)$(CP)./src/*$(PKG_BUILD_DIR)/endef# WedonotneedtodefineBuild/ConfigureorBuild/Compiledirectives# Thedefaultsareappropriateforcompilingasimpleprogramsuchasthisone# Specifywhereandhowtoinstalltheprogram.Sinceweonlyhaveonefile,# theh
18、elloworldexecutable,installitbycopyingittothe/bindirectoryon# therouter.The$(1)variablerepresentstherootdirectoryontherouterrunning# OpenWrt.The$(INSTALL_DIR)variablecontainsacommandtopreparetheinstall# directoryifitdoesnotalreadyexist.Likewise$(INSTALL_BIN)containsthe# commandtocopythebinaryfilefromitscurrentlocation(inourcasethebuild# directory)totheinstalldirectory.definePackage/helloworld/install$(INSTALL_DIR)$
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村建私房合同范本
- Module1Unit 2 I feel nervous when I speak Chinese.教學(xué)設(shè)計(jì)- 2024-2025學(xué)年外研版英語八年級(jí)下冊(cè)
- 專家工作合同范本模板
- 公寓購(gòu)房合同范本
- 保潔人員勞務(wù)合同范本
- 刺繡行業(yè)雇工合同范本
- 分公司設(shè)立合同范本
- 農(nóng)戶銷售果樹合同范本
- 農(nóng)用農(nóng)機(jī)出售合同范本
- 保險(xiǎn)條款合同范本
- 造船廠有限空間作業(yè)安全措施方案
- 人教版三年級(jí)下冊(cè)數(shù)學(xué)第一單元 位置與方向(一)(單元練習(xí))
- 2024年廣告部業(yè)務(wù)年度工作計(jì)劃樣本(3篇)
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)實(shí)務(wù)》課件-2.1創(chuàng)新思維訓(xùn)練 訓(xùn)練創(chuàng)新思維
- 能源管理軟件招標(biāo)模板高效節(jié)能
- 城鄉(xiāng)環(huán)衛(wèi)保潔投標(biāo)方案
- 大數(shù)據(jù)安全與隱私保護(hù)考核試卷
- 有效喝酒免責(zé)協(xié)議書(2篇)
- 《高血脂相關(guān)知識(shí)》課件
- DB31-T 255-2020 集中式空調(diào)(中央空調(diào))系統(tǒng)節(jié)能運(yùn)行和管理技術(shù)要求
- 統(tǒng)編版語文六年級(jí)下冊(cè)3《古詩(shī)三首》課件
評(píng)論
0/150
提交評(píng)論