illegal instruction非法指令的解决思路

我移植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指令。这样重新编译后就可以执行程序了


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


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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "illegal instruction (core dump)" 意思是程序在运行时遇到了非法指令,导致程序崩溃,并生成了一个 "core dump" 文件。这通常是由于程序代码中存在错误或者程序使用了不兼容的硬件或操作系统功能导致的。 ### 回答2: illegal instruction (core dump)是指某个程序在执行时出现了非法指令,并因此导致崩溃,并生成核心转储文件(core dump)。这个错误需要通过分析崩溃现象来确定原因。 首先,我们需要查阅相关的错误日志,以及检查程序运行的相关环境,包括操作系统版本、CPU架构、程序编译器版本等。这有助于我们快速锁定原因。 一般情况下,illegal instruction (core dump)是由于程序在执行时执行了不支持的指令,或是执行了内存损坏的代码造成的。这些情况通常是由程序员在编写代码时没有考虑到特定环境下的限制,或是代码中出现了缺陷导致的。 针对这个错误,我们可以通过以下几个方式进行修复: 1.升级程序编译器或运行环境,并重新编译程序。这能够保证在新的环境下程序能够正确执行。 2.检查代码,确认代码中没有出现不支持的指令或内存损坏等问题。 3.通过使用调试工具,如GDB等,来跟踪程序的执行过程,定位到具体的错误代码,并修改代码以避免出现这些问题。 总之,illegal instruction (core dump)是一个常见的程序错误,需要通过仔细的分析和调试才能够解决。在编写程序时,我们需要考虑到不同运行环境的限制,并尽可能避免出现缺陷,以提高程序的稳定性和可靠性。 ### 回答3: Illegal instruction (core dump)是一种计算机错误。简而言之,计算机执行了无法理解的指令,并且因为这个错误导致程序的终止。这种错误通常会生成一个core dump文件,这个文件包含了程序崩溃时的内存状态,可以用于调试程序。 Illegal instruction错误通常是由于以下几种原因引起的: 1.硬件损坏:如果CPU或者内存损坏或者出现故障,计算机就可能执行不正常的指令,导致Illegal instruction错误。 2.软件更新:如果操作系统或者应用程序发生更新,但是旧程序与新程序不兼容,就可能导致Illegal instruction错误。 计算机会尝试执行无法识别或无法理解的操作码。 3.编译错误:编译器将代码转换成机器指令,如果编译器生成了错误的指令,就可能导致Illegal instruction错误。 如何解决Illegal instruction错误?这需要根据具体情况来定。可能需要检查计算机硬件是否正常,重新安装相关软件,或者对程序进行调试。确保代码正确,任何未定义的行为都被考虑到。 同时保持软件和硬件更新到最新版本可以预防这种错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值