1. 程式人生 > >openWRT Ubuntu環境搭建及交叉編譯工具製作與使用

openWRT Ubuntu環境搭建及交叉編譯工具製作與使用

Openwrt本身不支援直接編譯C語言的,不支援GCC,因此,我們在Ubuntu下寫好的程式碼,通過gcc編譯後的可執行檔案是不能直接在openWRT上執行的。 因此,我們需要製作基於openWRT的交叉編譯工具 toolchain。
1 搭建開發環境 1.1 openWRT下載 下載Chaos Calmer (15.05)正式發行版 git clone -b chaos_calmer https://github.com/openwrt/openwrt 1.2 openWRT依賴安裝 在編譯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 openssl
分步安裝如下: 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 sudo apt-get install openssl (新加的依賴庫)
安裝完成後需要重啟終端
Feeds是OpenWRT環境所需要的軟體包套件.比較重要的feeds有:
pacakges’:一些額外的基礎路由器特性軟體 ‘LuCI’:OpenWRT預設的GUI ‘Xwrt’:另一種可選的GUI介面
./scripts/feeds update -a ./scripts/feeds install -a
1.3 openWRT toolchain編譯 1.3.1 配置 menuconfig cd openwrt make menuconfig 進入下圖所示的menuconfig配置介面,進行如下配置:
1、Target System 我手上的路由器CPU晶片是MT7620A,所以配置為 RT288x 2、Subtarget 配置為MT7620 3、Target Profile 配置為MT7620a EVB 4、Package the OpenWrt-based Toolchain 因為我們要製作toolchain交叉編譯工具,所以這裡通過click 空格鍵來切換到 “*”為選中狀態
1.3.2 編譯 Toolchain 配置完成後,儲存並退出,然後輸入命令編譯: [注意]本次編譯過程中需要從國外站點下載所需的依賴檔案,因此,編譯之前必須掛載VPN來允許訪問境外網站,且保證網路穩定,整個編譯過程大概為2-4個小時。 make V=s
一切無錯的情況下,會在 openwrt原始碼目錄/bin/ramips/ 目錄下找到編譯好的toolchain
  • OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2

編譯交叉編譯工具鏈,有X86和X64之分,根據系統有關係,因此使用現有的toolchain的時候,注意區分系統。
編譯成功後如下圖所示:

1.3.3 安裝 Toolchain openWRT的交叉編譯工具鏈需要安裝到當前系統中,我使用的是Ubuntu 64,然後配置環境變數,才能使用。步驟如下: 1、解壓toolchain 將交叉編譯工具鏈解壓到Ubuntu的“、opt”目錄下,載openWRT的更目錄下執行: sudo tar jxvf ./bin/ramips/OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2 -C /opt/ 2、設定環境變數 執行 sudo gedit /etc/bash.bashrc開啟檔案,在檔案最後新增如下配置: export PATH=/opt/OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin:$PATH
export STAGING_DIR=/~/workspace/openwrt/staging_dir 其中, export STAGING_DIR配置的是STAGING路徑,取決於你openWRT原始碼的路徑。 儲存後,執行如下命令: source /etc/bash.bashrc 3、檢查是否安裝成功 執行命令:mipsel-openwrt-linux-gcc -v 安裝toolchain,如下圖所示:
上圖中,Error:ld不用管。
1.3.4 Toolchain測試 1、編寫hello.c 測試程式:hello.c 原始碼: #include <stdio.h> int main(void) { unsigned char i = 0; while(1) { printf("\n hello openWRT! %d\n", i); sleep(1); } return 0; }
2、交叉編譯 mipsel-openwrt-linux-gcc hello.c -o hello 生成可執行檔案 hello 該可執行檔案是試用openWRT的toolchain編譯所得,是無法在Ubuntu上直接執行的,需要拷貝到openWRT裡執行。
3、通過winSCP放到openWRT 使用者名稱:root 密碼:root

4、通過SSH遠端登陸後執行



新增X可執行許可權: chmod 777 hello 執行./hello