OpenWRT下載與編譯
一、概述
OpenWRT是一個高度模組化、自動化的嵌入式Linux系統,擁有強大的網路組建和擴充套件性,常常被用於工控裝置、電話、小型機器人、智慧家居、路由器以及VOIP裝置中,其中在智慧路由器上有廣泛使用。同時它還提供了100多個已編譯好的軟體,而且數量還在不斷增加。
OpenWRT支援各種處理器架構,無論是ARM、X86、PowerPC或者MIPS都有很好的支援。其多達3000多種軟體包,囊括從工具鏈(toolchain),到核心(Linux Kernel),到軟體包(packages),再到根檔案系統(rootfs)整個體系,是的開發者只需要簡單的一個make命令就可以方便快速的定製一個具有特定功能的嵌入式系統。
對於想學習嵌入式Linux開發的工程師來說,OpenWRT是非常適合的。一般的嵌入式Linux的開發過程,無論是ARM,PowerPC或MIPS的處理器,都必須要經過以下開發過程:
1) 建立Linux交叉編譯環境
2) 移植Bootloader
3) 移植Linux核心
4) 移植Rootfs(根檔案系統)
5) 編寫/移植驅動程式
6) 編寫應用軟體
這個過程不用說對於一個初學者來說是一個非常艱辛漫長的過程,對於一個經驗豐富的工程師來說也是非常耗費時間的。但是現在有了OpenWRT,它已經幫我們完成了步驟1-4,我們只需要專注步驟5-6的開發,就可以完成一個完成的嵌入式產品。
二、OpenWRT下載
要進行嵌入式Linux開發,首先要有一個安裝有Linux系統的宿主機,我們使用的開發環境是基於Ubuntu 16.04_64bit的。開發環境搭建可參考《》
先確認Ubuntu下已安裝git和subversion工具,俗人沒有,請使用如下命令安裝:
sudo apt-get install git subversion
我們使用的是git方式下載,但在編譯過程中OpenWRT要求有安裝subversion,所以我們先一併安裝上。
OpenWRT程式碼已全部開源在github上,各版本的下載地址可在
正式版輸入: git clone -b chaos_calmer https://github.com/openwrt/openwrt
開發版輸入: git clone https://github.com/openwrt/openwrt
由於OpenWRT原始碼包比較大,而且國內連線github速度較慢,須耐心等待git下載完成。
三、OpenWRT編譯
在編譯之前,我們需要先更新種子列表,輸入:./scripts/feeds update -a,然後更新種子在menuconfig中的顯示列表,輸入:./scripts/feeds install -a,只有install之後才能在make menuconfig裡面進行相關的配置。
更新完成後,我們輸入make menuconfig進入配置,這時OpenWRT自動檢測編譯環境是否存在所需的全部依賴元件,如我的Ubuntu提示如下:
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
Build dependency: Please install a static zlib. (Missing libz.a or zlib.h)
Build dependency: Please install the openssl library (with development headers)
Build dependency: Please install GNU 'awk'
Build dependency: Please install the Subversion client
當前編譯環境缺少依賴元件,OpenWRT自動停止進入make menuconfig,直至全部依賴元件安裝完成。可一次性全部安裝所需依賴元件,輸入:
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev zlib1g-dev libssl-dev
首次進入make menuconfig介面如下:
圖1:預設配置
我手上開發板配置情況如下:主晶片為RT5350/RAM:32M/Flash:8M。
故修改配置為:
Target System:Ralink RT288X/RT3XXX
Subtarget:RT3X5X/RT5350 based boards
Target Profile:HAME MPR-A2;該路由器型號與我們開發板RAM/Flash配置一致,路由器配置可在http://wiki.openwrt.org/toh/start查詢。
配置選項時,在對應選項上按“空格鍵”表示選中,會編譯進韌體;按“M”鍵表示只編譯但不編譯進韌體,以軟體包形式存在。
圖2:Target System選擇
圖3:Subtarget選擇
圖4:Target Profile選擇
圖5:設定完成介面
這樣就完成最基本配置。選擇<Save>儲存,檔名為預設.config
圖6:Save
選擇<Exit>或連按2次ESC鍵返回命令列,輸入make V=99即可開始編譯,V=99表示輸出編譯資訊。編譯過程需要聯網,OpenWRT需要線上下載很多檔案。
圖7:開始編譯
第一次編譯過程耗時較長,特別是線上下載檔案包,由於網路關係導致某些檔案包無法下載而中斷編譯過程。此時可查找出錯的包名,至ftp://ftp.gnu.org/gnu/手工下載對應檔案包,並複製至“dl”目錄後重新編譯,直至全部完成。
編譯完成後的韌體位於“bin”->“ramips”目錄下,其中“ramips”為目標晶片對應資料夾,選擇的晶片不同,資料夾名不同。
圖8:編譯完成韌體
其中openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin檔案就是我們用來升級開發板的韌體。
四、韌體更新
我們使用的是Windows+VMware搭建的開發環境,使用Windows下的TFTP軟體“Megatops TFTP Server”,啟動軟體後設置好OpenWRT韌體所在目錄,本人目錄為“C:\share”
圖9:TFTP Server
將開發板通過網線與PC連線至同一網路,並將串列埠與PC連線,設定串列埠終端波特率為57600,開發板上電啟動,串列埠終端將可以看到啟動日誌
圖10:啟動日誌
開發板在啟動後幾秒內可以選擇不同的操作方式,我們選擇2:通過TFTP寫韌體至FLASH,在下載韌體之前,需要確認是否擦除Flash上的Linux系統,我們選擇“Y”,進入下一步。
圖11:TFTP配置
依次輸入device IP(裝置IP)和server IP(PC-IP),device IP可任意輸入但必須與PC在同一網段;Linux Kernel檔名即為上面我們編譯出來的OpenWRT韌體名:openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin。確認無誤後,按回車鍵即可開始TFTP下載。
圖12:下載開始
串列埠輸出一連串“#”表示Uboot正在從TFTP伺服器下載韌體檔案至ram上,下載完成後Uboot將擦除FLASH並將韌體寫入。
圖13:韌體寫入Flash
寫入Flash後Uboot自動啟動核心,核心啟動完成後在shell輸入回車就可看到OpenWRT的Logo,韌體下載成功。
圖14:OpenWRT啟動Logo