【物联网】 AR9344开发环境的搭建和编译固件
一. 選擇Openwrt平臺的理由
傳統的路由器固件是由官方提供的。這些固件是不開源的,而且這些路由器的功能也比較單一,很難滿足日益變化的智能家居需求。因此,在構建物聯網核心時,需要考慮第三方固件平臺。
Openwrt、DD-Wrt以及Tomato是三個最為著名的第三方路由器固件平臺。當然還有其他一些更加小眾的版本,和很多從這三大固件衍生出來的修改版固件,在此我就不贅述了。
選擇Openwrt而不選擇DD-Wrt或者Tomato的理由如下:
1. DD-WRT:是三個固件平臺中第三方軟件支持最為豐富一個平臺。
對于新的路由器的支持也是非常迅速的。然而,正是由于各種豐富的軟件或工具的加入,導致DD-WRT的系統不穩定,經常會出現Bug,使得用戶體驗不友好。往往在一個版本中修改過的Bug,在下一次版本check的時候,又會出現,對于開發者來說比較頭疼。
此外,DD-WRT對于無線信號處理方面能力較弱,Qos功能更是被許多玩家吐槽。(由于智能家居需要多設備同時接入,并且不同設備之間會存在流量的沖突,因此Qos顯得比較重要,基于該原因)
2. Tomato:官方的Tomato固件是三個平臺中最為穩定的。
Tomato較為封閉,對于新的路由器支持力度不夠,特別是對于Atheros主控支持力度很小。于是, 我果斷放棄了Tomato。
3. Openwrt:三大固件中擴展性最好的。
對于版本的控制較為嚴謹,通常以往出現的bug在新的版本中極少出現,在穩定性上較之DD-WRT有了很大的提升。
Openwrt對于Qos的功能做了優化,其性能可以媲美Tomato。
Openwrt是基于Linux的,適合開發者進行二次開發。(此外,Openwrt的固件有許多功能是遠超過路由器本身的功能的,例如samba局域網文件共享,transmission脫機下載,ushare,uPnP等),這正是我想要的!!
當然,Openwrt本身的web,luci界面是比較丑的,系統設置也沒有DD-WRT方便,易用性不是很好。(這個問題嘛,可以通過第三方軟件進行改進,對于我來說就不是問題了)
?
二、Openwrt平臺搭建
1. 在平臺搭建之前,有幾點需要說明一下的:
所謂的平臺搭建,不僅包括固件的燒寫,還包括開發,編譯和調試的環境搭建。
Openwrt平臺是基于Linux的,其支持虛擬機安裝,對于手邊沒有設備的親們,可以通過安裝虛擬機感受一下(推薦用最新的穩定的ubuntu)。
2. Openwrt開發環境搭建流程(以Atheros 9344為例):
(1)操作系統: Ubuntu12.04 ?Server。(公司服務器)。
(2)在Ubuntu下搭建Openwrt開發環境:
安裝依賴庫:
apt-get install g++ apt-get install libncurses5-dev apt-get install zlib1g-dev apt-get install bison apt-get install flex apt-get install unzip apt-get install autoconf apt-get install gawk apt-get install make apt-get install gettext apt-get install gcc apt-get install binutils apt-get install patch apt-get install bzip2 apt-get install libz-dev apt-get install asciidoc apt-get install subversion下載官方源碼(以Atheros9344為例):
cd /home/XXX# XXX: user name mkdir attitude_adjustment svn co svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09上述命令,會將svn上的源碼check到本地attitude_adjustment目錄下.
我使用的是attitude_adjustment版本,這個版本較為穩定,且
進行源碼版本更新:??update all feeds, re-create index files, install symlinks
cd attitude_adjustment/ svn up ./scripts/feeds update -a ./scripts/feeds install -a到目前為止,Openwrt的開發環境已經搭好了.
(3)Openwrt系統的首次編譯(p.s. 在編譯過程中,程序會自動通過feed機制,在網上下載相應的依賴文件,這要求編譯者所在網絡環境良好!):
進行環境檢查,查看編譯所需依賴庫是否都安裝:
make defconfig若提示有某個依賴庫沒有安裝,請按照提示按照對應的依賴庫. 直到上述檢查無返回。
進行編譯配置:
make menuconfig對目標固件進行配置. 由于首次編譯時間會較長,因此我創建一個無外加軟件的固件:(下面三幅圖,分別對應于Target System,Subtarget和Target Profile)
?
最后保存設置:
之后就是漫長的編譯的時間了:
make #默認安裝,無提示 make V=99?#顯示編譯日志,并打印在shell中 ?make -j8 V=s 用8個線程編譯,并且顯示編譯過程等待漫長的時間之后,如果成功,可在編譯目錄下 bin/
可以看到多個.bin文件,這些.bin文件中
openwrt-ar71xx-generic-db120-kernel.bin:對應于只燒寫內核固件
openwrt-ar71xx-generic-db120-rootfs-squashfs.bin:對應于文件系統固件
openwrt-ar71xx-generic-db120-squashfs-sysupgrade.bin:對應于完整的固件
至此,一個可以燒寫的固件就編譯好了。當然,可以看出這個系統只能將路由器啟動,能夠正常加電運轉,但是其沒有任何功能。(在后面,我們需要對其添加各種軟件支持,甚至是通過編譯內核的方式添加軟件應用)
(4)? 固件燒寫
對于固件燒寫呢,有多種方式,我僅將我所使用過的方式列出來:
++Web在線固件升級,這個一般適用于原廠固件升級,或者Openwrt鏡像燒寫。此方法難度低,如果固件沒有問題并且少些過程中沒有斷電的話,都能成功燒寫。
++tftp方式升級,本人使用的Atheros9344路由,機身自帶有console口,可以通過網線直連的方式,直接通過PC進行燒寫。
????? 此過程難度較高,需要有一定的開發基礎。
此外,還有好多方法,在網上都能找到,由于暫時不需要,我就不一一列出了。
本人用tftp燒寫固件的:
方法如下:
$ tftp 0x80060000 openwrt-ar71xx-generic-ap135-kernel.bin
$ erase 0x9fe80000 +$filesize
$ cp.b $fileaddr 0x9fe80000 0x160000
$ tftp 0x80060000 openwrt-ar71xx-generic-ap135-rootfs-squashfs.bin
$ erase 0x9f050000 +$filesize
$ cp.b $fileaddr 0x9f050000 $filesize
$ setenv bootcmd 'bootm 0x9fe80000'
$ saveenv
(5) 路由重啟,測試
(6) 啟動后如下,測試
總結
以上是生活随笔為你收集整理的【物联网】 AR9344开发环境的搭建和编译固件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 崩坏3数海寻馔一期菜谱有哪些
- 下一篇: 【物联网】OpenWrt编译出现Unab