1. 程式人生 > >OpenWRT下載與編譯

OpenWRT下載與編譯

一、概述

OpenWRT是一個高度模組化、自動化的嵌入式Linux系統,擁有強大的網路組建和擴充套件性,常常被用於工控裝置、電話、小型機器人、智慧家居、路由器以及VOIP裝置中,其中在智慧路由器上有廣泛使用。同時它還提供了100多個已編譯好的軟體,而且數量還在不斷增加。

OpenWRT支援各種處理器架構,無論是ARMX86PowerPC或者MIPS都有很好的支援。其多達3000多種軟體包,囊括從工具鏈(toolchain),到核心(Linux Kernel),到軟體包(packages),再到根檔案系統(rootfs)整個體系,是的開發者只需要簡單的一個make命令就可以方便快速的定製一個具有特定功能的嵌入式系統。

對於想學習嵌入式Linux開發的工程師來說,OpenWRT是非常適合的。一般的嵌入式Linux的開發過程,無論是ARMPowerPCMIPS的處理器,都必須要經過以下開發過程:

1) 建立Linux交叉編譯環境

2) 移植Bootloader

3) 移植Linux核心

4) 移植Rootfs(根檔案系統)

5) 編寫/移植驅動程式

6) 編寫應用軟體

這個過程不用說對於一個初學者來說是一個非常艱辛漫長的過程,對於一個經驗豐富的工程師來說也是非常耗費時間的。但是現在有了OpenWRT,它已經幫我們完成了步驟1-4,我們只需要專注步驟5-6的開發,就可以完成一個完成的嵌入式產品。

二、OpenWRT下載

要進行嵌入式Linux開發,首先要有一個安裝有Linux系統的宿主機,我們使用的開發環境是基於Ubuntu 16.04_64bit的。開發環境搭建可參考《》

先確認Ubuntu下已安裝gitsubversion工具,俗人沒有,請使用如下命令安裝:

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/RAM32M/Flash8M

故修改配置為:

Target SystemRalink RT288X/RT3XXX

SubtargetRT3X5X/RT5350 based boards

Target ProfileHAME MPR-A2;該路由器型號與我們開發板RAM/Flash配置一致,路由器配置可在http://wiki.openwrt.org/toh/start查詢。

配置選項時,在對應選項上按“空格鍵”表示選中,會編譯進韌體;按“M”鍵表示只編譯但不編譯進韌體,以軟體包形式存在。

  

2Target System選擇


3Subtarget選擇


4Target Profile選擇 


5:設定完成介面

這樣就完成最基本配置。選擇<Save>儲存,檔名為預設.config

 

6Save

選擇<Exit>或連按2ESC鍵返回命令列,輸入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

 

9TFTP Server

將開發板通過網線與PC連線至同一網路,並將串列埠與PC連線,設定串列埠終端波特率為57600,開發板上電啟動,串列埠終端將可以看到啟動日誌

 

10:啟動日誌

開發板在啟動後幾秒內可以選擇不同的操作方式,我們選擇2:通過TFTP寫韌體至FLASH,在下載韌體之前,需要確認是否擦除Flash上的Linux系統,我們選擇“Y”,進入下一步。

 

11TFTP配置

依次輸入device IP(裝置IP)和server IPPC-IP),device IP可任意輸入但必須與PC在同一網段;Linux Kernel檔名即為上面我們編譯出來的OpenWRT韌體名:openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin。確認無誤後,按回車鍵即可開始TFTP下載。

 

12:下載開始

串列埠輸出一連串#”表示Uboot正在從TFTP伺服器下載韌體檔案至ram上,下載完成後Uboot將擦除FLASH並將韌體寫入。

 

13:韌體寫入Flash

寫入FlashUboot自動啟動核心,核心啟動完成後在shell輸入回車就可看到OpenWRTLogo,韌體下載成功。

 

14OpenWRT啟動Logo