OpenWrt 目錄下的 trunk 結構以下:linux
[trunk]$ ls bin/ Config.in feeds.conf.default rules.mk tmp/ BSDmakefile dl/ include/ scripts/ toolchain/ build_dir/ docs/ LICENSE package/ staging_dir/ tools/ config/ feeds/ Makefile README target/
有幾個重要目錄:package, target, build_dir, staging_dir, bin, dl, ...git
---include 目錄是存放 *.mk 文件。這裏的文件上是在Makefile裏被include的
shell
---build_dir/host 目錄是創建工具鏈時的臨時目錄網絡
---build_dir/toolchain-<arch>* 對應硬件的工具鏈的目錄架構
---staging_dir/toolchain-<arch>* 是工具鏈的安裝位置框架
---target/linux/<platform> 目錄裏面是各個平臺(arch)的相關代碼svn
---target/linux/<platform>/config-3.10 文件就是配置文件了工具
---dl 目錄是'download'的縮寫, 在 編譯前期,須要從網絡下載的數據包都會放在這個目錄下,這些軟件包的一個特色就是,會自動安裝在所編譯的固件中,也就是咱們make menuconfig的時候,爲固件配置的一些軟件包。若是咱們須要更改這些源碼包,只須要將更改好的源碼包打包成相同的名字放在這個目錄下,而後開始編 譯便可。編譯時,會將軟件包解壓到build_dir目錄下。ui
---build_dir/ 目錄下進行解壓,編譯和打補丁等。lua
---package/ 目錄裏面包含了咱們在配置文件裏設定的全部編譯好的軟件包。默認狀況下,會有默認選擇的軟件包。
在openwrt中ipk就是一切, 咱們能夠使用:
$ ./scripts/feeds update #來對軟件包進行更新.
$ ./scripts/feeds search nmap #查找軟件包'nmap' Search results in feed ’packages’: nmap Network exploration and/or security auditing utility
$ ./scripts/feeds install nmap #安裝'nmap'這個軟件
---feeds/packages 爲執行./scripts/feeds install 以後的package。
---bin 目錄下生成了不少bin文件,根據不一樣的平臺來區分。
---bin/<platform>/package 目錄裏面有不少ipk後綴的文件,都是package目錄下的源碼在build_dir目錄下編譯後的生成的結果。
注:以上摘自:[openwrt框架分析]
好比:lua包,mips架構。
make步驟:
在 make 時,make 讀取到 package/utils/lua/Makefile 文件內容。
若是git或svn源,那麼就會在 tmp/dl/ 目錄下將源代碼 clone 下來。而後,將 clone 下來的源碼刪除 .git 或 .svn 目錄刪除,而後壓縮成 lua-1.5.1.tar.gz 文件,並複製到 dl/ 目錄下。
在編譯前段,將 dl/ 目錄下的 lua-1.5.1.tar.gz 文件解壓到 build_dir/target-mips_<board>/ 目錄下。
進入 build_dir/target-mips_<board>/lua-1.5.1/
./configure,make,make install。
make install 會將生成的二進制文件安裝到 build_dir/target-mips_<board>/lua-1.5.1/ipkg-ar71xx/ 目錄下。
最後將 build_dir/target-mips_<board>/lua-1.5.1/ipkg-ar71xx/ 打成包成lua-5.1.5-1_ar71xx.ipk,並複製到 bin/ar71xx/packages/base/ 。