[OpenWRT-backfire] toolchain / cross-compiler 的建立
在開發許多 IoT 裝置或是 WiFi AP 時,
由於這些裝置缺乏完整的程式開發的環境,
我們會需要 toolchain /cross-compiler 來輔助我們進行程式的開發,
考慮到所有程式都會編譯成執行檔,
而此執行檔的建立, 又和所使用的系統平台相關,
因此, toolchain 的主要功能即在於提供一套編譯環境,
可以讓你編譯不同平台上可以執行的程式,
以 Raspberry Pi 為例, 可以參考這一篇文章:
https://www.raspberrypi.com.tw/tag/toolchain/
當然, toolchain 中有許多細節, 在此不詳細敘述,
只放上來這一次針對 OpenWRT backfire 製作 toolchain 的步驟,
由於backfire版本過舊, 也列出所需要的修改.
由於這些裝置缺乏完整的程式開發的環境,
我們會需要 toolchain /cross-compiler 來輔助我們進行程式的開發,
考慮到所有程式都會編譯成執行檔,
而此執行檔的建立, 又和所使用的系統平台相關,
因此, toolchain 的主要功能即在於提供一套編譯環境,
可以讓你編譯不同平台上可以執行的程式,
以 Raspberry Pi 為例, 可以參考這一篇文章:
https://www.raspberrypi.com.tw/tag/toolchain/
當然, toolchain 中有許多細節, 在此不詳細敘述,
只放上來這一次針對 OpenWRT backfire 製作 toolchain 的步驟,
由於backfire版本過舊, 也列出所需要的修改.
- 建立一台ubuntu 12.04的虛擬機, 硬碟容量20G
- 關閉SED: $ unset SED
- 安裝OpenWrt所需套件, 指令如下:
$ sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip - 建立並進入ofwrt資料夾, $ mkdir ofwrt; $ cd ofwrt
- 下載 openWRT backfire 版本所需要的檔案, 由於svn已停止支援, 改用git
$ git clone https://git.openwrt.org/10.03/openwrt.git backfire - 進入backfire資料夾: $ cd backfire
- 更改更新packages的位址 (文件為feeds.conf.default)
加入一行: src-git packages https://git.openwrt.org/10.03/packages.git
並把原本的 src-svn packages 註解掉 - 更新packages: $ ./scripts/feeds update -a
- 安裝packages: $ ./scripts/feeds install -a
- 設定make: $ make defconfig; $ make prereq
- 針對目標平台硬體設定make: $ make menuconfig (如下圖)
- 輸入make, 開始製作環境: $ make
按照正常流程, 到此就算完成了 cross-compiler 的程序,
剩下來就是等 make 抓相關的環境資訊, 完成環境的編譯而已,
不過, 由於 backfire 版本過於老舊, 所以會出現檔案來源消失的老問題,
反映在此流程執行上, 就會出現 make error,
此時, 再次執行$ make V=99, 就可以看到詳細的錯誤訊息, 並校正,
對於此 backfire 版本, 一共碰到兩次檔案消失問題, 分別列出解法如下:
binutils => 更改 script 檔
PKG_NAME:=binutils
PKG_VERSION:=$(call qstrip,$(CONFIG_BINUTILS_VERSION))
BIN_VERSION:=$(PKG_VERSION)
PKG_SOURCE_URL:=https://www.mirrorservice.org/sites/sourceware.org/pub/binutils/releases/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
kernel-headers => 更改 script 檔
PKG_NAME:=linux
PKG_VERSION:=$(LINUX_VERSION)
PKG_SOURCE:=$(LINUX_SOURCE)
PKG_SOURCE_URL:=http://ftp.ntu.edu.tw/linux/kernel/v2.6/
HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
script 檔的位置都在:~/ofwrt/backfire/toolchain相對應的資料夾下,
這些資料夾會隨著 make 進程而建立,
更改後就可以走完 make 流程, 完成 cross-compiler,
對於一個透過cross-compiler建立的執行檔,
我們可以看到資訊如下:
~/code$ file helloworld
helloworld: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped
留言
張貼留言