第二十三期 基於hg255d的OpenWrt韌體編譯《路由器就是開發板》
https://blog.csdn.net/aggresss/article/details/52752554
這一期來進行OpenWrt的編譯,我們的最終目的是生成可以被U-Boot引導的OpenWrt韌體,整個編譯過程比較耗時,根據網路情況而定,我用了3個小時,編譯磁碟要預留10G的儲存空間。
編譯步驟如下:
git git://git.openwrt.org/15.05/openwrt.git
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
make menuconfig
主要是這幾項選擇正確:
Target System (Ralink RT288x/RT3xxx) --->
Subtarget (RT3x5x/RT5350 based boards) --->
Target Profile (HuaWei HG255D) --->
再把這三個選項選中,這個是在bin目錄下生成ImageBuilder,Toolchain和SDK工具包:
[*] Build the OpenWrt Image Builder
[*] Build the OpenWrt SDK
[*] Build the OpenWrt based Toolchain
進行編譯之前還要修改一個Makefile檔案
vim target/linux/ramips/image/Makefile
在檔案內搜尋"hg255d",我這裡是538行和733行,將這兩行的行首註釋"#"去掉,儲存退出,否則無法生成適用於hg255d的編譯檔案。之所以這樣估計是OpenWrt官方支援hg255d硬體後,發現了不穩定因素暫時遮蔽了hg255d韌體檔案的輸出。
然後執行:
make -j1 V=99
接下來就是漫長的等待,如果系統連結庫完整並且網路暢通,可能一次就能編譯成功,如果出現error而終止,就要多檢視錯誤資訊,判斷系統缺少什麼檔案,然後安裝,我這裡介紹一個診斷的方法,比如我在編譯時提示找不到evp.h檔案而終止編譯,對於Ubuntu系統可以使用apt-file工具,如果你沒有安裝就可以使用 sudo apt-get install apt-file 來安裝,安裝成功後使用apt-file update 來更新源資訊,上面步驟都成功後使用 apt-file search evp.h 輸出以下資訊:
gnu-efi: /usr/include/efi/efidevp.h
gsoap: /usr/share/gsoap/plugin/md5evp.h
gsoap: /usr/share/gsoap/plugin/mecevp.h
gsoap: /usr/share/gsoap/plugin/smdevp.h
gsoap-doc: /usr/share/doc/gsoap-doc/wsse/html/mecevp.html
gsoap-doc: /usr/share/doc/gsoap-doc/wsse/html/smdevp.html
heimdal-multidev: /usr/include/heimdal/hcrypto/evp.h
libssl-dev: /usr/include/openssl/evp.h
libwolfssl-dev: /usr/include/cyassl/openssl/evp.h
libwolfssl-dev: /usr/include/wolfssl/openssl/evp.h
libxmlsec1-dev: /usr/include/xmlsec1/xmlsec/openssl/evp.h
libxmlsec1-dev: /usr/share/doc/libxmlsec1-dev/html/api/xmlsec-openssl-evp.html
觀察後發現libssl中包含我們需要的檔案,這是問題就變得簡單了使用 sudo apt-get install libssl 安裝成功後重新編譯就能解決問題。
如果編譯成功,就會在bin\ramips目錄下出現 openwrt-ramips-rt305x-hg255d-squashfs-sysupgrade.bin 檔案。用這個檔案就可以啟動OpenWrt系統。
在bin\ramips目錄下還有這三個檔案,他們分別是ImagenBuilder,SDK和Toolchain的壓縮包,我們在以後的定製開發中會用到:
OpenWrt-ImageBuilder-ramips-rt305x.Linux-i686.tar.bz2
OpenWrt-SDK-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2
OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2
有三種方法編譯openwrt定製韌體。
1. 用ImageBuilder編譯,用於靈活選擇package。畢竟壓縮的只讀檔案系統squashfs比可寫的JFFS能省不少地方,可以用來把玩更多的package。
2. 用SDK編譯,用於編譯package倉庫中沒有的軟體包,另外其中有配套的核心原始碼及標頭檔案,編譯缺失的核心模組也很方便。
3. 從原始碼編譯,因為要重新編譯cross-compile toolchians,下載最核心和軟體包的原始碼編譯,導致這個過程比較耗時,用於上述兩種情況搞不定的情況。
----------------------------------
SDK下載地址: https://github.com/aggresss/RFDemo