1. 程式人生 > >armadeus 編譯記錄

armadeus 編譯記錄


一開始編譯armadeus6.1的時候,只是按照官方的文件去做,但是在移植的過程中發現很多的錯誤,經過周的努力,終於可以在開發板上運行了。
下面記錄下遇到的問題,由於沒有及時記錄每一個問題,所以只是在執行移植完成之後才想起要整理一下,把能想起來了問題總結一下。
1.configure: error: C++ preprocessor "/lib/cpp" fails sanity

check
See `config.log' for more details.
解決方法:
apt-get install build-ensential
sudo apt-get install gcc
sudo apt-get install cpp
sudo apt-get install g++

 

2.make[2]: makeinfo: Command not found
(makeinfo有關資訊:http://www.linux-

ren.org/modules/wiki/index.php/Makeinfo)
解決方法:
sudo apt-get install texinfo

dtb not compiled because no im6q-apf6dev.dtb

multiple (or no) load addresses:
This is incompatible with uImages
Specify LOADADDR on the commandline to build an uImage

關於上面的這樣的問題,都是沒有仔細看文件,在ubuntu上進行開發首先要把dependency安裝好,不然會遇到不必要的問題。

編譯過程中還會遇到一些問題,有一些是因為天朝不讓訪問googlecode導致或者其它不讓訪問的,可以通過其它的途徑下載下來,然後放到downloads資料夾中。還有一些實在找不到,那麼看一下這個庫是做什麼的,如果沒有其它的依賴問題,那麼就通過配置把它去掉。在公用電腦上經過兩三天的編譯過程,終於編譯完成了。


busybox在編譯的時候出錯了,看了下是makefile打patch的時候錯了,第一行少一個#註釋。

還有一些就是*.sh的指令碼不能執行的問題,是因為指令碼沒有可執行許可權和dos格式的問題,加是執行許可權和vi *.sh然後set ff=unix,對於ubuntu14.04這個命令不好使, 沒辦法,用gedit開啟,然後重新儲存一下就OK了,實在不行的話,就vi開啟record一個巨集a刪除行最後的^M,[email protected]就可以了。


原以為把apt6的所以檔案系統以及uboot,核心編譯完成之後直接把核心通過tftp載入到核心,然後再掛載網路檔案系統就可以了,但是核心載入到im6的開發板中,並不能引導。
所以那就想使用開發板自帶的核心好像是3.0.35的,啟動之後直接顯示一個FATAL:kernel is too old.以為是核心版本太老的原因,然後就想再把apf6的核心執行起來,看了一下apf6的核心的引導地址不對,於是改成了0x10008000,然後再編譯,還是不能執行。後來還是在以前同事的csdn上看到了解釋,因為交差編譯的libc庫是對核心版本有要求的,使用的arm-none-linux-gnueabihf-gcc4.9.2的版本,它要求的最小核心版本為3.1,那麼開發板上的3.0.35當然不能運行了,所以下面也就想換一個低版本的交叉編譯器再試一下。
         還有就是關於交差編譯器的softfp和hard模式,因為armadeus中cotex-a9的處理器使用eabihf的編譯器。一開始認為把python和beremiz複製到原來的檔案系統中就能執行,但是執行總是顯示cmd not found,直接寫一個helloworld都不能執行,後來才明白,原來是eabihf編譯的和eabi編譯的是不相容的,需要把所有的庫都重新編譯。為了能夠和以前的檔案系統相容,
使用一個eabi的編譯器,後來去這個網站(http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/)下載一個201405(4.8.3版本)的編譯器,然後配置buildroot為指定編譯器,重新編譯,在膝上型電腦上編譯差不多1個多小時就編譯完了,速度差距啊。編譯完成之後把python庫得到到usr/lib下,pyro也放到usr/bin下,執行python,竟然可以運行了。

然後就在電腦上的beremiz連線,顯示python的pyro的版本對不上,一開始以為是我編譯的和windows上的對不上,所以就想通過buildroot把beremiz的framework編譯一下,但是在編譯
matiec的時候,下面的問題出現。
(cd /home/shen/armadeusDownloads/code/buildroot/output/build/host-matiec-62b55ca5b879; autoreconf)
configure.ac:22: error: required file 'config/compile' not found
configure.ac:22:   'automake --add-missing' can install 'compile'
autoreconf: automake failed with exit status: 1
make[1]: *** [/home/shen/armadeusDownloads/code/buildroot/output/build/host-matiec-62b55ca5b879/.stamp_configured] Error 1
make[1]: Leaving directory `/home/shen/armadeusDownloads/code/buildroot'
make: *** [all] Error 2

這個問題好解決,上面寫著呢到相應的目錄下執行一下automake --add-missing,然後再回來編譯就可以了。
但是後面的問題是缺少iec_bison.h檔案,就不知道怎麼解決了,因為用了flex和bison,這兩個東西我也不瞭解,不過大體是通過這兩個工具把那個.yy的檔案轉成.h和.c,不過不想去研究,應該挺麻煩的,所以看了一下matiec的版本,然後自己想下載一個最新的matiec編譯試一下,於是下載一個最新版本,改一下buildroot/package/matiec下的config.in的版本號,然後把檔案放入到downloads檔案中,就編譯過去了,最後說缺少wxpython numpy,通過apt-get install python-wxtools python-numpy就可以了。
然後就可以執行ubuntu下的beremiz了,連線都連線不上,記不得什麼錯了,大概是一個函式或者巨集定義的引數應該是四個,但是引用的時候只有三個,這個問題應該也是host-matiec的版本對不上導致的,所以這條路暫時也先放棄了。
    那麼windows上的pyro對不上的話,因為python的解釋型的可以把板子上的pyro的檔案複製到beremiz的pyro的路徑中,然後重新啟動beremiz,
    配置PYRO://172.16.0.14:3000,然後連線,連線成功。設定編譯器
    編譯器 C:\arm-2013.05\bin\arm-none-linux-gnueabi-gcc
    CFLAGS :空
    連結器:C:\arm-2013.05\bin\arm-none-linux-gnueabi-gcc
    LDFLAGS:-lpthread
    編譯通過了,但是下載下去就會把一個錯
    newer kernel is required to run this binary。(__kernel_cmpxchg64 helper)
    這個錯和前面的差不多,所以想到把windows上的交叉編譯器用一個201105的版本試試,還是一樣的問題,只不過這次列印的訊息為
    xxxx.so undefined symbol:__sync_val_compare_and_swap_8
    去網上查相關的資料,沒有什麼可參考的,像這樣的問題一般都會在google上容易得到幫助,對於有豐富生活經驗的“度娘”也可能“呵呵”了。
    不過在其中找到一個06年的國外的提問,他遇到的問題是編譯的時候說沒有__sync_val_compare_and_swap_4這個定義,然後後面的分析也就是說加上沒有引用libgcc_s.so,也就是說在編譯選項中加入-lgcc_s引數。檢視原始碼,裡面有一個這個引用,但是就是沒有標頭檔案,也沒有宣告,看那個回覆中有一些連結說明,由於自己的電腦上不了網,所以只能去公用電腦上上網,看了下,這個函式三個引數,一個ptr,oldVal,newVal,這是一個原子操作,如果ptr中的值等於oldVal,那麼就將newVal賦值給ptr所指向的值,如果不等於,不記得了怎麼處理了,不過網上可以查到。
    後來不知道從哪裡看到的了一個關於-march的說明,他說對於2.6.32,如果armv5+不行的話,可以換成armv6,應該可以,一想到自己沒有加相關的引數,所以回到自己電腦前加上
    CFLAGS -march=armv7-a -mfpu=vfpv3 -mfloat-abi=softfp -mcpu=cortex-a9
    然後編譯下載執行,竟然可以運行了,但是裡面的具體原因還是不清楚。
   對於需要wxpython的應用需要新增以下的配置
    新增wx支援 需要gtk2,
    Target packages->
        Graphic libraries and applications->
            [*] X.org X window System--->
    然後
    Target packages->
        Libraries->
            Graphics->
                [*] libgtk2
    然後
    Target packages->
        Graphic libraries and applications->
            [*] wxPython--->

選中這些選項之後會下載一些關於圖形庫的檔案,有兩個地址不對,直接從網上搜的,然後放到downloads裡,


未完待續。。。。。。