我移植x264到开发板上,arm linux系统。移植好后将库都拷贝到nfs文件系统上,可是执行后出现illegal instruction的错误。

可能是x264配置问题,我的x264开始的编译配置是

./configure  --host=arm-none-linux-gnueabi  --cross-prefix=arm-linux-  --prefix=/opt/x264-arm  --enable-shared  --enable-static



这是配置之后的属性,注意一点asm为yes,这是为特定平台的汇编优化,看看编译后的效果。



这个-mcpu=cortex-a8 -mfpu=neon



程序的平台属性,VFP_arch: VFPv3 Advanced_SIMD_arch: NEONv1

正确的平台属性是



所以把配置改为



Using -mfloat-abi=hard with VFP coprocessors is not supported. Use -mfloat-abi=softfp with the appropriate -mfpu option to allow the compiler to generate code that makes use of the hardware floating-point capabilities for these CPUs.

可是这样编译完之后还是提示非法指令,这是因为什么呢?怎么调试呢?

首先内核编译时应该开启user_debug功能,然后在内核启动项里添加user_debug=1,然后会增加出错信息

会增加pc=00009f78, code: 001980dc 000014ac 00000160 e92d4ff0 (ed2d8b04)

反汇编看看到底是哪里出错的,arm-linux-objdump -D -S x264 > log,然后查看log,相关内容是



错误出在指令vpush {d8-d9}上,google一下vpush指令,在arm information center里的描述



这个指令是NEON架构和VFP共享的指令,是都支持的,那为什么出错呢?



s3c6410支持vfp指令,是在协处理器里支持的,然后又看到



这句话不就是说之所以出错,被识别为非法指令是因为我没有配置协处理器支持vfp指令吗?那肯定就是在内核里配置了,




这是linux内核的浮点仿真器,需要在里面选择vfp,这样内核才会支持vfp指令。

也就是说要执行vfp指令需要内核和交叉编译器都配置支持vfp指令。这样重新编译后就可以执行程序了



只是我发现编码还是好慢,还得用硬件编码器才行。这个问题算是增加我的调试错误经验了。


转自:http://blog.csdn.net/chyxwzn/article/details/8879750?utm_source=tuicool

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐