小米路由器 交叉編譯(Cross complie) 環境建置

小米路由器(R1D) 是基於 OpenWrt 深度定製的一款智能路由器
因為屬於深度定製的架構,加上沒有 open source 並且使用非常舊的版本和 kernel
又鸚鵡對 openwrt 的系統架構完全不熟悉,只有基礎的 linux 底子
所以早前在 cross complie (交叉編譯) 時其實遇到很多問題
雖然最後成功編譯出 privoxy,但也早就忘了環境建置的過程和步驟

這次因為企圖嘗試編譯出 核心模組(kernel module)
所以不單單只是 toolchain 搞定就好,還需要 kernel 的 source
對於沒有自己從 source code 編譯過 kernel 的我來說,其實也只能慢慢爬文
所以就順道寫成文章,省去日後重新建置的時間

小米路由器系統資訊

OpenWrt 官方版本:Attitude Adjustment 12.09
稍微了解 OpenWrt 的開發環境後,下載官方提供的 ImageBuilder
但其中使用的 kernel 是 3.3.8,與小米官方使用的 2.6.36 不同

所以決定自行下載小米的 toolchain 和 kernel 2.6.36 的 source code
kernel 2.6.36 在  The Linux Kernel Archives 可以下載
小米路由器 toolchain 載點:32位元 (131MB) / 64位元 (78MB)
其他 library 載點參考: 小米路由器插件开发文档

因為鸚鵡原本已經有使用 Oracle VM VirtualBox 弄一個 CentOS 7 x64 來當測試平台
所以直接把 64位元 的包解壓縮後卻發現根本是 32位元 的…
解決方式是安裝了 glibc.i686

 

因為 64位元 與 32位元 的包檔案大小差異不小
所以乾脆直接使用 32位元 的包,使用 unzip 來解壓縮卻發生錯誤,結果原來是 tar 格式

用 tar 解開(tar xvf r1d_x86_xiaomi_toolchain.zip)即可

路徑說明:
toolchain 路徑:/miwifi/toolchain
toolchain 下載至:/miwifi/toolchain/download (檔名 r1d_x86_xiaomi_toolchain.zip)

嘗試編譯時 顯示錯誤,找不到 libz.so.1,安裝 libz.i686 後可正常編譯
編譯了一個 hello.c 放到 路由器上 可正常執行

 

下一步:開始使用 cross complier 編譯 核心模組