在得到安霸的SDK后,可以編譯出boot,kernel以及文件系統(tǒng)。
該平臺(tái)使用Codesourcery編譯器,可以從Codesourcery網(wǎng)站下載:
解壓后,即可得到所需的編譯工具。
在bin目錄下,即所需要的編譯工具,包括gcc, ld等,當(dāng)然都加了前綴。
在arm-none-linux-gnueabi/libc下,即glibc的庫(kù)及相關(guān)文件。在編譯應(yīng)用程序時(shí),需要鏈接這些通用庫(kù)。
由于SDK將toolchain的目錄設(shè)為一個(gè)固定目錄。所以需要將這些目錄鏈接到解壓后的編譯工具上。
具體做法:
ln –s 編譯器目錄 /usr/local/CodeSourcery/Sourcery_G++_Lite
ln –s編譯器目錄 /opt/codesourcery
使用buildroot編譯SDK編譯時(shí)所需要的外部常用工具以及庫(kù)文件等。
比如busybox工具,makedevs工具以及XMLRPC的庫(kù)等。
這里可以從buildroot.uclibc.org上,下載最新的buildroot。
配置文件使用SDK提供的默認(rèn)配置:
將tools\ToolChain\buildroot\local\CodeSourcery目錄下的CodeSourcery.config文件覆蓋buildroot目錄下的.config文件。
然后make。
編譯完成后,將buildroot目錄鏈接到/usr/local目錄下:
ln –s buildroot目錄 /usr/local/buildroot
編譯buildroot容易出現(xiàn)問題。
本人遇到的問題,主要如下:
出現(xiàn)錯(cuò)誤:error: C compiler cannot create executables
主要是在編譯軟件包時(shí),編譯器在搜索glibc庫(kù)時(shí),錯(cuò)誤地定位到本機(jī)的庫(kù)上,導(dǎo)致庫(kù)文件不兼容。
解決辦法:
在package目錄下的Makefile.in文件中設(shè)置TARGET_LDFLAGS變量,對(duì)glibc庫(kù)進(jìn)行定位。注意不能使用-L選項(xiàng)去設(shè)置,而要用-wl,-rpath去設(shè)置。
編譯器安裝后,即可進(jìn)行SDK的編譯。
進(jìn)入SDK目錄下的ambarella目錄。
首先配置環(huán)境變量:
source ./env/CodeSourcery.env
然后配置SDK選項(xiàng),這里使用默認(rèn)的一個(gè)IPCAMERA的配置:
make ipcam_config
然后即可進(jìn)行編譯;
make
在編譯完成后,本人出現(xiàn)下載到目標(biāo)板上,系統(tǒng)無法啟動(dòng)。后然發(fā)現(xiàn)buildroot生成的makedevs工具路徑與SDK設(shè)置的不一致,導(dǎo)致文件系統(tǒng)中的/dev目錄下沒有任何文件。
解決辦法:
將buildroot目錄下的build_arm_CodeSourcery/makedevs-host文件夾內(nèi)的makedevs工具拷貝到build_arm_CodeSourcery/staging_dir/bin下。
以前做達(dá)芬奇的DM3X系列項(xiàng)目時(shí),boot,kernel,文件系統(tǒng)都是分開生成,然后各自燒入flash中。安霸的將這些統(tǒng)一在SDK中編譯后,打包生成一個(gè)bin文件。然后可以使用DirectUSB,直接下載的目標(biāo)板上。這大大方便了開發(fā)人員。
生成的bin文件在:ambarella/amboot/build/memfwprog下。
根據(jù)自己想要升級(jí)的部分,選擇對(duì)應(yīng)的bin文件。