天天看點

OpenWrt固件編譯刷機完全總結

OpenWrt固件編譯刷機完全總結

一.SOM9331闆子資訊

OpenWrt固件編譯刷機完全總結

用普通安卓手機USB線連接配接闆子與電腦,通過secureCRT序列槽登入,設定如下:

OpenWrt固件編譯刷機完全總結

二.登入openwrt系統

Uboot資訊:

uboot> version

U-Boot 1.1.4  (Jan  3 2014)

*********************************************

*        U-Boot 1.1.4  (Jan  3 2014)        *

 (AR9331) U-Boot for SOM9331

DRAM:   64 MB DDR2 16-bit

FLASH:  Winbond W25Q64 (8 MB)

CLOCKS: 400/400/200/33 MHz (CPU/RAM/AHB/SPI)

LED on during eth initialization...

Hit any key to stop autobooting:  0 

Booting image at: 0x9F020000

   Image name:   OpenWrt r36088

   Image type:   MIPS Linux Kernel Image (lzma compressed)

   Data size:    957100 Bytes = 934.7 kB

   Load address: 0x80060000

   Entry point:  0x80060000

Uncompressing kernel image... OK!

Starting kernel...

回車後:

BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) built-in shell (ash)

Enter 'help' for a list of built-in commands.

  _______                     ________        __

 |       |.-----.-----.-----.|  |  |  |.----.|  |_

 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|

 |_______||   __|_____|__|__||________||__|  |____|

          |__| W I R E L E S S   F R E E D O M

 -----------------------------------------------------

 ATTITUDE ADJUSTMENT (12.09, r36088)

  * 1/4 oz Vodka      Pour all ingredients into mixing

  * 1/4 oz Gin        tin with ice, strain into glass.

  * 1/4 oz Amaretto

  * 1/4 oz Triple sec

  * 1/4 oz Peach schnapps

  * 1/4 oz Sour mix

  * 1 splash Cranberry juice

root@OpenWrt:/# 

Linux核心版本資訊:

root@OpenWrt:/# ls

bin      etc      mnt      proc     root     sys      usr      www

dev      lib      overlay  rom      sbin     tmp      var

root@OpenWrt:/etc# cat /proc/version 

Linux version 3.3.8 (blogic@Debian-60-squeeze-64-minimal) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Sat Mar 23 16:49:30 UTC 2013

三.openwrt固件編譯準備工作

Virtual box虛拟機使用Ubuntu 10.04.4 LTS系統,并與windows共享檔案夾,友善後期兩個平台傳輸資源。

編譯所需安裝工具:

1安裝SVN工具,下載下傳Openwrt源碼,因為源碼是在不斷更新的,SVN管理很友善

apt-get install subversion

2.安裝git工具,如果你知道github的話……

apt-get install git-core

3.安裝一下必要的依賴庫

sudo apt-get install g++

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install unzip

sudo apt-get install autoconf

sudo apt-get install gawk

sudo apt-get install make

sudo apt-get install gettext

sudo apt-get install gcc

sudo apt-get install binutils

sudo apt-get install patch

sudo apt-get install bzip2

sudo apt-get install libz-dev

sudo apt-get install asciidoc

sudo apt-get install subversion

sudo apt-get install sphinxsearch

sudo apt-get install libtool

sudo apt-get install sphinx-common

以上在非root使用者下下載下傳時需要在前面加上sudo指令:

然後在目前目錄下建立openwrt目錄,下載下傳的源碼包就放在該目錄下:

mkdir openwrt

cd openwrt/

svn co svn://svn.openwrt.org/openwrt/trunk  這裡我們下載下傳的是trunk版本,也可以下載下傳DREAMBOX或者backfire版本的

因為要連接配接國外的伺服器下載下傳源碼,是以一般會很慢,建議可以下載下傳DREAMBOX的,國内維護的,可能會快一點吧

svn co svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox

cd openwrt-dreambox

./scripts/feeds update -a 

./scripts/feeds install -a

下載下傳結束後,會出現svn版本号表示下載下傳成功了

下載下傳完openwrt的源碼後,為了使openwrt支援更多的軟體,需要更新和安裝其他源上面的軟體:

cd ./trunk

./scripts/feeds update -a

PS:關于SVN

如果不是剛下載下傳的源碼,為保持代碼為最新狀态,可以運作svn update指令更新源碼。

svn up或者 svn update

SVN更新的時候:

U:表示從伺服器收到檔案更新了

G:表示本地檔案以及伺服器檔案都已更新,而且成功的合并了

A:表示有檔案或者目錄添加到工作目錄

R:表示檔案或者目錄被替換了.

C:表示檔案的本地修改和伺服器修改發生沖突

SVN 檢視曆史資訊 通過svn指令可以根據時間或修訂号去除過去的版本,或者某一版本所做的具體的修改。以下四個指令可以用來檢視svn 的曆史:

svn log 用來展示svn 的版本作者、日期、路徑等等

svn diff 用來顯示特定修改的行級詳細資訊

svn cat 取得在特定版本的某檔案顯示在目前螢幕

svn list 顯示一個目錄或某一版本存在的檔案

四.配置openwrt編譯源碼

測試編譯環境:(先生成一個預設配置檔案)

make defconfig

到這裡就可以開始編譯自己的固件了。進入定制界面:(如果需要前面加上sudo指令)

make menuconfig

稍後自動進入一個圖形化配置界面,根據實際晶片進行配置

(我們用到的是Atheros的AR9331),是以配置如下:

OpenWrt固件編譯刷機完全總結

選擇好晶片和模型配置好後,還要配置Luci(openwrt路由的web登入設定頁面),将luci選項打上*,注意不是M(M隻是将其當作子產品來編譯,而*可以将其編譯進核心):

OpenWrt固件編譯刷機完全總結

最後儲存為配置檔案SOM9331.config:

OpenWrt固件編譯刷機完全總結

執行make V=99開始編譯工作,make V=99  (注意V為大寫,而且編譯過程中為避免權限問題,最好前面加上sudo),這裡有人喜歡在make後加上”-j”選項參數,意思是讓cpu全速編譯,但這裡不推薦,容易出現不可預料的錯誤或者卡頓。

五、編譯過程中可能出現的問題及解決方法

既然編譯了難免會出現一些錯誤而無法進行下去,這裡總結幾個自己遇到的問題及解決方法:

1.*** error: 'OpenWrtunknown' is too long, max firware version length is 13

[edimax_fw_header] *** error: 'OpenWrtunknown' is too long, max firware version length is 13

dd: failed to open'build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/tmp/f9k1115v2-rootfs': No such file or directory三

dd: failed to open 'build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/tmp/f9k1115v2-uImage': No such file or directory

解決方法:一開始我是用sudo建立了那兩個路徑,結果還是有錯,google了一下找到了方法:

OpenWrt固件編譯刷機完全總結

即将trunk/scripts/getver.sh腳本第33行替換成那條語句,重新編譯就OK了。

2.還有個是連結上了無法下載下傳,需要手動下載下傳到指定目錄下,但是重新make時候編譯器又将手動下載下傳的檔案remov了,這是到後來才發現的,于是果斷編譯開始後再将下載下傳好的檔案放到指定目錄下就好了,編譯通過!

3.Openwrt源碼一般不支援root使用者進行編譯,是以一般每條指令都要利用sudo字首,修改一下檔案可以使得利用root編譯。如果你是root使用者名需要在配置上面做點修改。需要修改include/prereq-build.mk,把第十六行的注釋掉。對于Ubuntu系統,貌似并不需要修改。

4.網友提到在執行make defconfig時,出現 checking ‘libssl’… failed,,然後安裝缺少的這個元件libssl-dev,請執行sudo apt-get install libssl-dev

請大家在操作過程中關注每一個遇到的錯誤,他都可能是編譯成功的絆腳石~~~

5.對于連接配接國外源碼伺服器下載下傳速度太慢的問題,可以換成國内的伺服器進行下載下傳

svn://svn.openwrt.org.cn/openwrt/branches/backfire

svn://svn.openwrt.org.cn/openwrt/trunk

svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox

六.燒寫openwrt系統固件到SOM9331開發闆

最後編譯好了,cd到/openwrt/trunk/bin/ar71xx目錄下,會有很多編譯好的bin檔案,

OpenWrt固件編譯刷機完全總結

但适合SOM9331開發闆的是openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin,

(注意:openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin是原廠固件,不帶Luci界面,wifi預設不打開,而openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin是基于openwrt的更新,可以通過make menuconfig設定帶Luci界面,當然也可以登入系統設定打開wifi)

這裡采用tftp傳輸方式燒寫固件,需要準備好網線連接配接電腦網孔和SOM9331開發闆的WAN網口(本固件靠近USB的J1為WAN口,另兩個J2,J3為LAN口),

OpenWrt固件編譯刷機完全總結

另外軟體方面需要tftpd32來傳輸,結合SecureCRT序列槽顯示openwrt系統uboot菜單指令來燒寫:

1、先把本機的IP位址設定為192.168.1.2,隻要設定的IP位址和SOM9331開發闆的IP在一個段域内即可。

OpenWrt固件編譯刷機完全總結

2、給開發闆供電,打開SecureCRT軟體,按下開發闆上的複位按鈕,根據提示在電腦上按下空格鍵,進入Uboot界面,設定目前環境變量(即設定伺服器IP和開發闆本地用戶端IP):

setenv serverip 192.168.1.2

setenv ipaddr 192.168.1.1(若與自己路由器ip沖突可以另外設定)

OpenWrt固件編譯刷機完全總結

3、打開tftpd32.exe軟體,設定下燒寫的bin檔案所在目錄,以及目前伺服器IP位址(即PC的本地IP):

OpenWrt固件編譯刷機完全總結

4、回到uboot界面,開始輸入tftp指令傳輸bin檔案到給定位址:

tftp 0x80000000 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

OpenWrt固件編譯刷機完全總結

5、擦出原有的Flash區域:erase 0x9f020000 +0x7c0000,然後将剛燒寫到記憶體的bin檔案再寫到剛才擦除的區域:cp.b 0x80000000 0x9f020000 0x7c0000

OpenWrt固件編譯刷機完全總結

然後輸入reset或者按下複位鍵重新開機,或者輸入bootm 0x9f020000重新開機:

OpenWrt固件編譯刷機完全總結

此時刷openwrt固件成功!

七、開啟wifi和Luci界面

指令行檢視網絡,輸入ifconfig

OpenWrt固件編譯刷機完全總結

發現沒有wlan0,因為預設wifi沒打開,需要手動設定,打開無線開關(配置wireless檔案)鍵入 vi /etc/config/wireless 回車 光标移動到 option disabled 1 這一行,在這一行前面加上#注釋掉,儲存設定并退出,鍵入 /etc/init.d/network restart 回車 重新開機網絡,這時電腦即可搜到“OpenWrt”熱點并連接配接上,後續配置可在網頁上(192.168.1.1)進行。

OpenWrt固件編譯刷機完全總結

浏覽器輸入192.168.1.1後出現登入界面需要設定密碼:

OpenWrt固件編譯刷機完全總結

進入SecureCRT設定passwd:

OpenWrt固件編譯刷機完全總結

輸入設定好的密碼即可成功登入!

OpenWrt固件編譯刷機完全總結

      本文轉自灬落魄灬  51CTO部落格,原文連結:http://blog.51cto.com/smoke520/1830772,如需轉載請自行聯系原作者

繼續閱讀