openWRT Ubuntu環境搭建及交叉編譯工具製作與使用
阿新 • • 發佈:2018-12-02
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
編譯交叉編譯工具鏈,有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
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
安裝完成後需要重啟終端
Feeds是OpenWRT環境所需要的軟體包套件.比較重要的feeds有:
./scripts/feeds update -a ./scripts/feeds install -a
1.3 openWRT toolchain編譯 1.3.1 配置 menuconfig cd openwrt make menuconfig 進入下圖所示的menuconfig配置介面,進行如下配置:
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