天天看點

OpenWRT開發之——目錄分析與make過程

openwrt 目錄下的 trunk 結構如下:

有幾個重要目錄:package, target, build_dir, staging_dir, bin, dl, ...

---include 目錄是存放 *.mk 檔案。這裡的檔案上是在makefile裡被include的

---build_dir/host 目錄是建立工具鍊時的臨時目錄

---build_dir/toolchain-<arch>* 對應硬體的工具鍊的目錄

---staging_dir/toolchain-<arch>*  是工具鍊的安裝位置

---target/linux/<platform> 目錄裡面是各個平台(arch)的相關代碼

---target/linux/<platform>/config-3.10 檔案就是配置檔案了

---dl 目錄是'download'的縮寫, 在 編譯前期,需要從網絡下載下傳的資料包都會放在這個目錄下,這些軟體包的一個特點就是,會自動安裝在所編譯的固件中,也就是我們make menuconfig的時候,為固件配置的一些軟體包。如果我們需要更改這些源碼包,隻需要将更改好的源碼包打包成相同的名字放在這個目錄下,然後開始編 譯即可。編譯時,會将軟體包解壓到build_dir目錄下。

---build_dir/ 目錄下進行解壓,編譯和打更新檔等。

---package/ 目錄裡面包含了我們在配置檔案裡設定的所有編譯好的軟體包。預設情況下,會有預設選擇的軟體包。

在openwrt中ipk就是一切, 我們可以使用:

---feeds/packages 為執行./scripts/feeds install 之後的package。

---bin 目錄下生成了很多bin檔案,根據不同的平台來區分。

---bin/<platform>/package 目錄裡面有很多ipk字尾的檔案,都是package目錄下的源碼在build_dir目錄下編譯後的生成的結果。

比如: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/ 。

繼續閱讀