![如何在OpenWRT環(huán)境下做開發(fā)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/f2301cd9-530f-4a33-a170-0fbb5f343776/f2301cd9-530f-4a33-a170-0fbb5f3437761.gif)
![如何在OpenWRT環(huán)境下做開發(fā)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/f2301cd9-530f-4a33-a170-0fbb5f343776/f2301cd9-530f-4a33-a170-0fbb5f3437762.gif)
![如何在OpenWRT環(huán)境下做開發(fā)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/f2301cd9-530f-4a33-a170-0fbb5f343776/f2301cd9-530f-4a33-a170-0fbb5f3437763.gif)
![如何在OpenWRT環(huán)境下做開發(fā)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/f2301cd9-530f-4a33-a170-0fbb5f343776/f2301cd9-530f-4a33-a170-0fbb5f3437764.gif)
![如何在OpenWRT環(huán)境下做開發(fā)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/f2301cd9-530f-4a33-a170-0fbb5f343776/f2301cd9-530f-4a33-a170-0fbb5f3437765.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、之前寫過一篇日志,是關(guān)于如何搭建自己的OpenWRT開發(fā)環(huán)境。經(jīng)過最近一段時間的開發(fā)學(xué)習(xí)和實踐,對OpenWRT環(huán)境的開發(fā)有了一定的了解。在這里將我的開發(fā)心得做個整理。1、搭建開發(fā)環(huán)境搭建自己首先,我們需要一個為路由器定制的開發(fā)環(huán)境,具體可以參考我的另一篇日志:的OpenWrt開發(fā)環(huán)境。這里只做一個簡單的補充,在執(zhí)行makemenuconfig后,會出現(xiàn)下圖:其中,圖中紅框部分是我定制路由器的系統(tǒng)版本,大家可以根據(jù)不同的路由器進行不同的選擇;綠框部分表示我們需要編譯一個SDK開發(fā)環(huán)境(默認情況下,此項未勾選)編譯過程中需要通過官網(wǎng)下載很多相關(guān)的軟件包,所以必須保證能夠順利連上外網(wǎng)。由于下載速度
2、的限制,編譯過程大概需要數(shù)小時。編譯結(jié)束后,所有的產(chǎn)品都會放在編譯根目錄下的bin/yourtarget/.例如:我所編譯的產(chǎn)物都放在./bin/brcm47xx/下,其中文件主要有幾類:(1) .bin/.trx文件:這些都是在我們所選的target-system的類別之下,針對不同路由器型號、版本編譯的路由器固件。這些不同路由器的型號和版本是openwrt預(yù)先設(shè)置好的,我們不需要更改。至于.bin和.trx的區(qū)別,一種說法是,第一次刷路由器的時候,需要用.bin文件,如果需要再升級,則不能再使用.bin文件,而需要用.trx文件。原因是,.bin是將路由器的相關(guān)配置信息和.trx封裝在一起
3、而生成的封包,也就是說是包含路由器版本信息的.trx。在第一次刷固件的時候,我們需要提供這樣的信息,而在后續(xù)升級時,則不再需要,用.trx文件即可。(2) packages文件夾:里面包含了我們在配置文件里設(shè)定的所有編譯好的軟件包。默認情況下,會有默認選擇的軟件包。(3) OpenWrt-SDK.*.tar.bz2:這個也就是我們定制編譯好的OpenWRTSDK環(huá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,使用的編譯工具以及庫是4.3.3+cs_uClibc-0.9.30.1。(4) md5sums文件:這個文件記錄了所有我們編譯好的文件的MD5值,來保證文件的完整性。因為文件的不完整,很容易將路由器變成“磚頭”。需要主要的是,編譯完成后,一定要將編譯好的bin目錄進行備份(如果里面東西對你很重要的話),因為在下次編譯之前,執(zhí)行makeclean會將bin目錄下的所有文件給清除掉!!2、 更改原有packages在編譯根目錄下會有一個dl的目錄,這個目錄其實是“
5、download”的簡寫,在編譯前期,需要從網(wǎng)絡(luò)下載的數(shù)據(jù)包都會放在這個目錄下,這些軟件包的一個特點就是,會自動安裝在所編譯的固件中,也就是我們makemenuconfig的時候,為固件配置的一些軟件包。如果我們需要更改這些源碼包,只需要將更改好的源碼包打包成相同的名字放在這個目錄下,然后開始編譯即可。編譯時,會將軟件包解壓到build_dir目錄下。當(dāng)然,你也可以自己在dl里面創(chuàng)建自己的軟件包,然后更改相關(guān)的配置文件,讓openwrt可以識別這個文件包。由于我的項目更改的內(nèi)容是底層的,需要跟固件一起安裝。所以,我使用的方法就是直接更改dl目錄下軟件包,然后重新進行固件編譯。感覺類似于Linu
6、x的內(nèi)核編譯。反復(fù)編過十多次,沒有任何問題。3、 新建自己的packages對于自己新建的package,而這個package又不需要隨固件一起安裝,換句話說,就是可以當(dāng)做一個可選軟件包的話。我們可以利用我們的SDK環(huán)境來單獨編譯,編譯后會生成一個ipk的文件包。然后利用opkginstallxxx.ipk來安裝這個軟件。下面具體說下,如何編譯一個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在這兩個文件的目錄下,執(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)進入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文件這個Make巾le文件是給OpenWRT讀的,而之前寫的那個Makefile文件是針對helloworld給編譯其讀的。兩個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等.壓縮文件請下載最新的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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年交通運輸費用策劃與執(zhí)行協(xié)議
- 2025年農(nóng)村租憑協(xié)議標準文本
- 2025年個體網(wǎng)店策劃經(jīng)營權(quán)轉(zhuǎn)讓合同書
- 2025年產(chǎn)品保障與服務(wù)質(zhì)量協(xié)議
- 2025年人才租賃標準協(xié)議范本
- 2025年農(nóng)家樂裝飾工程合同樣本
- 2025年二手房交易合同策劃保管協(xié)議范本
- 2025年工作合同標準格式
- 2025年官方商業(yè)門店租賃合同模板
- 2025年住宅抵押貸款合同標準化文本
- 罕見病診治與病例管理制度
- 幼兒園開學(xué)前教職工安全培訓(xùn)
- 口腔接診流程
- 東風(fēng)汽車網(wǎng)上測評答案
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》真題及答案解析
- 拘留所教育課件02
- 石家莊鐵道大學(xué)四方學(xué)院畢業(yè)設(shè)計46
- 智能化系統(tǒng)培訓(xùn)
- 部編版五年級語文下冊第四單元課時作業(yè)本有答案
- 機器視覺論文英文
- 出國高中成績證明模板
評論
0/150
提交評論