在以前的公司用OpenWRT搭建了一套智能語(yǔ)音的操作系統(tǒng),底層是Linux,適配的芯片平臺(tái)有瑞芯微和國(guó)芯。引入了Android 里L(fēng)inux內(nèi)核以及Android平臺(tái)的一些功能性組件。應(yīng)用層采用采用的是JavaScript語(yǔ)言,JavaScript運(yùn)行在nodejs虛擬即之上,各個(gè)業(yè)務(wù)組件有C++組件也有JS的組件,各個(gè)業(yè)務(wù)模塊以獨(dú)立的服務(wù)進(jìn)程運(yùn)行。各個(gè)業(yè)務(wù)模塊比較好的實(shí)現(xiàn)了接偶合,應(yīng)用層采用JavaScript語(yǔ)言實(shí)現(xiàn),開發(fā)者眾多。系統(tǒng)配置管理以及文件系統(tǒng)的制作采用的是openwrt管理的。我現(xiàn)在從事的是安放行業(yè),安放行業(yè)的嵌入式系統(tǒng)是一個(gè)高度定制的系統(tǒng),目前沒有一個(gè)一個(gè)針對(duì)安放行業(yè)的操作系統(tǒng),缺乏一個(gè)軟件包統(tǒng)一管理以及框架層,讓安放行業(yè)視頻物聯(lián)網(wǎng)行業(yè)應(yīng)用開發(fā)的重復(fù)的工作都非常大。我想基于openwrt的基礎(chǔ)上推出一個(gè)安放行業(yè)或者視頻物聯(lián)網(wǎng)行業(yè)的操作系統(tǒng),包括適配各種安放廠商的芯片以及支持安防行業(yè)的行業(yè)的協(xié)議、支持視覺智能算法,提供框架層,降低視頻物聯(lián)網(wǎng)行業(yè)的應(yīng)用開發(fā)的難度,讓這個(gè)行業(yè)更加開放。
雖然以前玩過openwrt,但是對(duì)于openwrt還不精通。 我第一個(gè)階段的目標(biāo)就是把openwrt支持Hisi系列的芯片。正式這種考慮,開始詳細(xì)學(xué)習(xí)OpenWRT的編譯系統(tǒng)。這個(gè)系列的文章主要是自己系統(tǒng)學(xué)習(xí)一遍openwrt,也是為了公司內(nèi)部分享做準(zhǔn)備。
1、OpenWRT編譯--從源碼到固件
op的編譯過程的wiki:OpenWRT編譯過程
以下步驟的操作環(huán)境為64位的Ubuntu16.04 LTS,路由器型號(hào)位ZBT-WA05,OP版本為CC。
注意事項(xiàng):
- 請(qǐng)使用一個(gè)非root用戶來完成這些工作!
- 這里的所有命令都在OpenWrt編譯系統(tǒng)的根目錄下運(yùn)行(例如~/openwrt/trunk/)
- 編譯系統(tǒng)的絕對(duì)路徑中不能含有空格!
- 如果你使用root用戶下載了源碼,請(qǐng)把你下載來的源碼的所有者更改為一個(gè)非root用戶。
sudo chown -R user:user /openwrt/
1、準(zhǔn)備工作
安裝編譯所需的工具,在Ubuntu下輸入一下命名:
sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip
sudo apt-get install subversion mercurial
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
2、下載源碼
需準(zhǔn)備12GB左右的空間,源碼體積百兆左右,但是編譯過程中會(huì)產(chǎn)生大量文件,會(huì)使文件夾體積非常大。大部分SVN都是失效的,所以一些老的教程就不能參考了,這點(diǎn)要注意。要使用git來下載源碼。要下載哪個(gè)版本可以參考wiki(上面的鏈接)以CC版本為例,在主文件夾下執(zhí)行:
git clone https://github.com/openwrt/openwrt.git
3、下載可用的feeds
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
等待下載完成
4、編譯配置選項(xiàng)
make menuconfig
用方向鍵、空格(選擇,出現(xiàn)M代表編譯但不編譯到固件,*號(hào)表示編譯進(jìn)固件)、按兩下esc返回等操作來配置選項(xiàng),選擇硬件平臺(tái)、CPU型號(hào)等選項(xiàng).
選擇Package the OpenWrt-base Toolchain是為了有搭建交叉編譯環(huán)境方便,不是必選的。
此外,勾選LuCI(網(wǎng)頁(yè)形式的控制臺(tái))還是非常必要的。要勾選(前面出現(xiàn)*號(hào)):
LuCI-->1.Collections-->luci
別忘記勾選中文:
LuCI-->2.Modules-->Translations-->Chinese(zh-cn)
最后Save,退出。
以上是基本的固件編譯,如果需要其他功能,要再勾選或添加。
5、編譯執(zhí)行命令
make V=s -j9
V=s 代表顯示編譯信息,一定要勾選,否則出錯(cuò)的話無法看到錯(cuò)誤信息。
-j8代表使用的CPU線程數(shù)量,4C8T的CPU可是使用8個(gè)線程提高速度,使用時(shí)有時(shí)會(huì)出錯(cuò),可以改成-j1或者不加這個(gè)參數(shù)。
6、得到固件
顯示如下信息,并且終端上沒有error信息時(shí),表示編譯成功。
Signing package index...
make[2]: Leaving directory '/home/goldmoon/openwrt'
make[1]: Leaving directory '/home/goldmoon/openwrt'
/home/goldmoon/openwrt/bin/ramips/openwrt-ramips-mt7620-zbt-wa05-squashfs-sysupgrade.bin
這個(gè)文件就是我們想要的固件。
關(guān)于在ubuntu下編譯openwrt更詳細(xì)的教程可以參考:OpenWRT編譯燒寫