我移植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=hardwith VFP coprocessors is not supported. Use-mfloat-abi=softfpwith the appropriate-mfpuoption 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指令。这样重新编译后就可以执行程序了

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

PS:如果是在海思开发板上运行出现illegal instruction,请检查一下编译时候,有没有添加对应选项,

如:-march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16

linux运行非法指令,illegal instruction非法指令的解决思路相关推荐

  1. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)

    Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题) 参考文章: (1)Ubuntu 16.04下用Wine运行的软件出现方块的解决思路( ...

  2. 非法指令(Illegal Instruction)问题定位

    关键词:Illegal Instruction.SIGILL等. 进程在运行过程中会收到SIGILL信号,此类错误是由操作系统发送给进程的. SIGILL是某个进程中的某一句不能被CPU识别指令,这些 ...

  3. Python运行 import cv2 等报错 Illegal instruction (core dumped) 解决办法

    import cv2 报错 Illegal instruction (core dumped) nanopc-T4 开发板上安装好 opencv 后,import cv2 时 会报错 Illegal ...

  4. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)...

    说明: 1.我使用的是深度的deepin-wine,版本为1.9.0,参考:http://www.cnblogs.com/EasonJim/p/8016674.html 2.这种问题没有一定的解决的方 ...

  5. linux 磁盘满了 预警,Linux磁盘空间满了的排查与解决思路

    block正常满 (磁盘实际不足) inode 满 大量的小文件 block 满 文件没有被彻底删除(硬链接数0 进程调用数不为0) 解放方法: 1 查看df -h 磁盘使用量根据占用量大小逐步逐步排 ...

  6. linux运行程序 -sh: ./xxxxx: not found 解决办法

    拷贝别的板子的可执行程序到直接的板子中,但是当我运行的时候有提示: -sh: ./xxxxx: not found 此时,我看了下权限什么的也没问题. 后来查看问题出现在动态链接库上. 此时使用ldd ...

  7. Linux load average负载量分析与解决思路

    一.load average top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载.系统平均负载表示 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或 ...

  8. [ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法

    前言,ARM编译器选项除了优化系统代码性能外,往往还具备其他一些设定,例如警告级别,和指令集的扩展 本文论述工作中遇到的一个编译开源浏览器chromine遇到的问题,由编译选项引发的可执行文件的Ill ...

  9. 程序报错误Illegal instruction的解决办法

    问题: 目标板是rt5350,使用mipsel-linux-gcc 3.4.2编译器,源程序由C++转换到C语言. 程序中有3个线程:主线程.接受消息队列的线程和上传采集数据的线程: 当把上传采集数据 ...

最新文章

  1. define的多行定义
  2. jquery选择器的一些处理
  3. 计算机控制系统的理论,计算机控制系统理论基础.pptx
  4. 一种缘于积木游戏的思维
  5. WPF中的动画——(五)路径动画
  6. 【计算机网络(微课版)】第5章 传输层 课后习题及答案
  7. Excel添加读音(中英均可)
  8. VTK:PolyData之ExtractSelectionCells
  9. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
  10. centos7 卸载 gitlab
  11. 3个阶段 项目征名_项目管理的3个关键动作:启动、推进、复盘
  12. php 对mvc的认识,【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!...
  13. 哈佛研发出蛇形柔性机器人,复杂地面无脚行走关键在“人工皮肤”
  14. Linux基础-固化命令的方式grep
  15. 关于分布函数连续性的运用
  16. oracle查询是否包含英文字符串,oracle字符串载取及判断是否包含指定字符串
  17. 流量充值解决方案(附代码)
  18. 【转】美剧字幕长讲述她如何练听力的
  19. 题目;我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推现在,给定两个整数n和m,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素
  20. U盘盘符显示不出来了,纠结(已解决)

热门文章

  1. 解决Python查询Mysql中文乱码问题
  2. hibernate之6.one2many单向
  3. 002-一般处理程序(HttpHandler)
  4. 希尔排序和归并排序(java实现)
  5. unrecognized selector sent to class 0x235e7ec
  6. 转:LoadRunner检查点使用小结
  7. 防SQL注入(转载)
  8. 三分钟免费搞定网站在线客服,利用PowerTalkBox控件制作而成,为大家提供比较好的示例...
  9. [转载] python中list的方法有哪些_Python 列表(list)中的方法
  10. [转载] python字符串方法有哪些_27种Python字符串操作方法大全