Openwrt clone and bulid
Openwrt是一個(gè)高度模塊化七咧、高度自動(dòng)化的嵌入式Linux系統(tǒng)吴超,擁有強(qiáng)大的網(wǎng)絡(luò)組件和擴(kuò)展性,常常被用于工控設(shè)備助被、電話、小型機(jī)器人切诀、智能家居揩环、路由器以及VOIP設(shè)備中。為了更加深入的了解Openwrt幅虑,我們從最直接的學(xué)習(xí)方式開始丰滑,clone源碼、編譯工程倒庵。
1.安裝linux上的更新組件
為了支持openwrt的安裝編譯褒墨,在linux操作系統(tǒng)上需要安裝以下的軟件
$ sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext
texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev git-core
gawk libz-dev asciidoc libtool libssl-dev libssl0.9.8 xz-utils -y
2.從官網(wǎng)clone openwrt
git clone git://git.openwrt.org/15.05/openwrt.git
這邊克隆哪個(gè)版本由自己決定,我這邊選擇15.05穩(wěn)定版擎宝。雖然trunk版本支持的硬件更多郁妈,但其不一定穩(wěn)定,而且會(huì)經(jīng)常更新绍申,對(duì)開發(fā)固定的硬件開說就沒必要了噩咪,需要時(shí)可以去尋找相應(yīng)的版本顾彰。
clone好的工程如下:
/openwrt-15.05/openwrt$ ls
BSDmakefile docs LICENSE README staging_dir toolchain
config feeds.conf.default Makefile rules.mk target tools
Config.in include package scripts tmp
3.升級(jí)所有擴(kuò)展軟件源列表
./scripts/feeds update -a
這一步的結(jié)果是:產(chǎn)生$(TOPDIR)/feeds目錄,存放的就是執(zhí)行feeds.conf.default文件后的結(jié)果
src-git packages https://github.com/openwrt/packages.git;for-15.05
src-git luci https://github.com/openwrt/luci.git;for-15.05
src-git routing https://github.com/openwrt-routing/packages.git;for-15.05
src-git telephony https://github.com/openwrt/telephony.git;for-15.05
src-git management https://github.com/openwrt-management/packages.git;for-15.05
feeds.conf.default里面的路徑可以自行修改胃碾,如https網(wǎng)址訪問不到涨享,則可改為git路徑等。
4.安裝所有擴(kuò)展軟件
./scripts/feeds install - a
這一步的結(jié)果是:在package目錄中多了一個(gè)feeds目錄书在,里面存放的子目錄是到$(TOPDIR)/feeds目錄的鏈接灰伟。注意:在Openwrt的TOPDIR/Makefile中拆又,有如下定義:
# update all feeds, re-create index files, install symlinks
package/symlinks:
$(SCRIPT_DIR)/feeds update -a
$(SCRIPT_DIR)/feeds install -a
那么儒旬,可以想見,上述兩個(gè)也可以合并為一步帖族,即make package/symlinks
5.使用默認(rèn)編譯環(huán)境栈源,檢查是否能進(jìn)行編譯
make defconfig
這一步就編譯環(huán)境的基礎(chǔ),如果這一步都沒執(zhí)行成功竖般,說明clone的工程有問題甚垦,需要重新clone。
6.配置自定義的鏡像配置
make menuconfig
對(duì)工程進(jìn)行配置涣雕,這邊就以小米的miwifi為基礎(chǔ)來進(jìn)行編譯艰亮。在選擇硬件平臺(tái)時(shí),我們需要知道該路由器的無線芯片挣郭,CPU芯片迄埃,然后選出對(duì)應(yīng)的平臺(tái)設(shè)備。
如下:
先選擇Target System ---> (Ralink RT288x/RT3xxx)
然后 Subtarget ---> (MT7620 based boards)
Target Profile ---> (Xiaomi MiWiFi Mini)
最后 Target Images ---> (jffs2兑障、squashfs)
這邊為平臺(tái)的首次搭建侄非,其他配置就先不要選擇,把上面四個(gè)選擇好后流译,就保存退出逞怨。
7.編譯鏡像
make V=99
第一次編譯可能需要花費(fèi)很長(zhǎng)的時(shí)間,根據(jù)你的網(wǎng)絡(luò)而定福澡,一般情況下大約是2~3個(gè)小時(shí)叠赦,最主要的是花費(fèi)在下載源碼的時(shí)間上,以后編譯一般在半個(gè)小時(shí)左右就能編譯好革砸。
對(duì)于第一次編譯源碼的下載除秀,我們可以在國(guó)內(nèi)的一些鏡像進(jìn)行手動(dòng)下載后,拷貝進(jìn)dl/目錄下业岁,這樣也可以加快一些編譯速度鳞仙,國(guó)內(nèi)進(jìn)行可以訪問http://dl.openwrtdl.com/
8.編譯完成之后,將會(huì)多出幾個(gè)目錄如下
編譯后增加的目錄包括:bin/笔时、build_dir/棍好、dl/、feeds/、staging_dir/借笙。
編譯好的工程如下:
/openwrt-15.05/openwrt$ ls
bin Config.in feeds.conf.default LICENSE rules.mk tmp
BSDmakefile dl include Makefile scripts toolchain
build_dir docs key-build package staging_dir tools
config feeds key-build.pub README target
對(duì)于Openwrt的目錄結(jié)構(gòu)將在另外一篇"Openwrt directory structure"進(jìn)行講解扒怖。
9.make步驟分析
簡(jiǎn)單來說,一旦OpenWrt buildroot已正確配置,如指定目標(biāo)平臺(tái)和體系結(jié)構(gòu),用戶空間包已經(jīng)選擇等, OpenWrt buildroot會(huì)通過以下步驟編譯鏡像:
- 下載交叉編譯工具,內(nèi)核頭文件等
- 建立staging_dir/目錄业稼,這個(gè)目錄是交叉編譯工具鏈將被安裝的地方盗痒,如果你想使用相同的交叉編譯工具鏈用作其他目的,比如編譯第三方應(yīng)用程序低散,你可以找到在這個(gè)目錄下找到交叉編譯工具俯邓,然后使用arch-linux-gcc 編譯你的應(yīng)用程序
- 創(chuàng)建下載目錄dl/,tar包將下載到這里
- 創(chuàng)建編譯目錄build_dir/熔号,用戶態(tài)的工具和影城包將被解壓或者復(fù)制到這里來進(jìn)行編譯稽鞭。
- 創(chuàng)建目標(biāo)目錄build_dir/target-<arch>*/root-<arch>和目標(biāo)文件系統(tǒng)架構(gòu),這本目錄包含最終的根文件系統(tǒng)。
- 安裝用戶態(tài)軟件包到根文件系統(tǒng)和以適當(dāng)?shù)母袷綁嚎s整個(gè)根文件系統(tǒng)引镊。最后根文件系統(tǒng)的固件鏡像在/bin/<arch>/下生成朦蕴。
Openwrt clone and bulid的分析就到這邊,有感悟時(shí)會(huì)持續(xù)會(huì)更新弟头。
注:以上內(nèi)容都是本人在學(xué)習(xí)過程積累的一些心得吩抓,難免會(huì)有參考到其他文章的一些知識(shí),如有侵權(quán)赴恨,請(qǐng)及時(shí)通知我疹娶,我將及時(shí)刪除或標(biāo)注內(nèi)容出處,如有錯(cuò)誤之處也請(qǐng)指出嘱支,進(jìn)行探討學(xué)習(xí)蚓胸。文章只是起一個(gè)引導(dǎo)作用,詳細(xì)的數(shù)據(jù)解析內(nèi)容還請(qǐng)查看Linux相關(guān)教程除师,感謝您的查閱沛膳。