文章出處:http://blog.csdn.com/keensword007
作者連絡方式:琴劍 <keensword007 at sina dot com>
最近因工作需要移植Helix player到Moto的linux手機上,拿到的開發機是Moto E6.
E6是一個2.4核心的arm體系的Linux。首先是上各大論壇惡補了一下基礎知識, E6新手快速入門教程這篇文檔總結得非常全面,推薦初次玩Moto手機的看看。
要開發程式,首先是需要交叉編譯工具鏈。上網找了一些資料,的確有人整理了一些這樣的toolchain,非常著名的是A1200/E6之交叉編譯貼子所引用的Release_yan0.rar,可惜下載連結都已經失效了,google了一把,也沒有找到下載的地方,只能放棄。我最後選擇了ezx-crosstool-0.6(寫本文時的最新版本,可以在這裡下載),因為這個比較簡單容易理解。解壓之後運行build.sh,它會去下載所需的組件並自動編譯。編譯出來的交叉編譯工具鏈是非常老的版本,對應版本為:binutils 2.15
gcc 3.3.6
glibc 2.3.2
glibc-linuxthreads 2.3.2
linux 2.4.26
注意在運行build之前,安裝flex, bison這兩個包。
在Ubuntu下
sudo apt-get install flex bison
就可以了。裝完之後編譯仍然出錯,這次的錯誤資訊為:
In file included from /usr/include/fcntl.h:217, from /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/system.h:208, from /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/collect2.c:30:In function ‘open’, inlined from ‘collect_execute’ at /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/collect2.c:1575:/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 argumentsmake[1]: *** [collect2.o] Error 1make[1]: Leaving directory `/home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/build-gcc-core/gcc'make: *** [all-gcc] Error 2
因為ubuntu9.10內建的是gcc-4.3.2,這個版本的編譯器對編譯問題檢查比較嚴格,所以必須安裝gcc-4.1,但是不必卸載4.3.2。方法是用新立得軟體包管理器安裝gcc-4.1,之後
sudo rm /usr/bin/gcc (刪除GCC,它只是個到gcc-4.3.2的軟串連檔案)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的軟串連)
此外如果你運行
ls -la /bin/sh
命令,會看到/bin/sh其實是一個指向dash的軟連結,請運行以下命令,將/bin/sh連結到bash。
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
再次運行build.sh,這時,你應該得到了一份可以用於交叉編譯的編譯環境。如果你沒有修改過build.sh裡的RESULT_TOP變數的話,它應該在ezx-crosstool-0.6/gcc-arm-iwmmxt目錄下。有了這一份交叉編譯環境,理論上來說我們就可以來編譯手機上的程式了。先做個測試吧。
寫一個經典程式test.c:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello world, MOTO E6!/n";
}
然後編譯:
首先設定路徑:
PATH=$PATH:~/mkezx/arm/gcc/gcc-3.3.6-glibc-2.3.2/arm-linux/bin
然後執行編譯命令:
arm-linux-gcc -o test test.c
然後將產生的test複製到手機上,用eKonsole執行一下./test,果然輸出了Hello world, MOTO E6!