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,1000@a就可以了。


原以为把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里,


未完待续。。。。。。


猜你喜欢

转载自blog.csdn.net/chongzi865458/article/details/50838658