最近因為要整理eCos的編譯系統,為了具體的項目做准備,稍微了解了ecos toolchain的特殊性。
在網絡上搜索了很多相關的內容,最後發現說的都不太准確,而且按照錯誤的方法編譯出來的編譯器可能本來就是不對的。
最要命的是,可能基本功能還可以用,但是如果用到C++工具就可能不行了。
好在eCos可以在編譯好default的配置以後執行
make tests
這樣以來,首先可以看看我們的編譯器是否完整,還可以通過qemu來驗證一下編譯出來的內容是否正確。
好了閒話短說步入正題
eCos操作系統除了OS本身,還有一部分就是libc。也就是說,eCos本身帶有libc,所以他不會用到gnu的newlib作為libc庫。
但是作為gnu的toochain,要包含有必要的頭文件來引用eCos內部的libc,因此在為eCos編譯toolchain的時候需要一些特別的注意。
編譯eCos操作系統及其應用程序需要一下幾個gnu組件
gnu源碼包
作用
eCos3.0采用的版本
binutils 二進制代碼工具 2.18.50.20080513 gcc-core gnu c 編譯器核心模塊 4.3.2 gcc-g++ gnu c++ 編譯器擴展模塊 4.3.2 gdb gnu 調試器 6.8.50.200807062. eCos提供的補丁:
ecoscentric-gnutools-20090121-sw-patches.tar.bz2
以上軟件包可以從 http://sourceware.mirrors.tds.net/pub/sourceware.org/ecos/gnutools/src/ 下載
3. 解決C++依賴頭文件補丁
emboslab-gnutools-20090121-sw-patches.tar.bz2
從emoslab下載補丁https://sourceforge.net/projects/emboslab/files/emboslab-gnutools-20090121-sw-patches.tar.bz2/download
4. 獲取必要的ecos頭文件
ecosconfig new mini2440
ecosconfig add fileio
make
重命名install/include 目錄為 sys-include目錄備用
這裡以emoslab的ecos為例,逐步說明如何在自己主機上編譯arm-eabi工具鏈
設置環境變量
export TARGET=arm-eabi
export PATH=$PATH:/opt/ecos/gnutools/arm-eabi/bin
解壓源代碼
tar -jxf binutils-2.18.50.20080513.tar.bz2
tar -jxf ecoscentric-gnutools-20090121-sw-patches.tar.bz2
tar -jxf emboslab-gnutools-20090121-sw-patches.tar.bz2
tar -jxf gcc-core-4.3.2.tar.bz2
tar -jxf gcc-g++-4.3.2.tar.bz2
tar -jxf gdb-6.8.50.20080706.tar.bz2
為gcc 4.3.3打補丁
cd gcc-4.3.2
patch -p1 < ../patches/gcc-4.3.2.patch
patch -p1 < ../patches/gcc-4.3.2-arm.patch
patch -p1 < ../gcc-4.3.2-arm-ricky.patch
cd ..
為gdb 6.8.50.20080706打補丁
cd gdb-6.8.50.20080706
patch -p1 < ../patches/gdb-6.8.50.20080706.patch
patch -p1 < ../patches/gdb-6.8.50.20080706-arm.patch
cd ..