Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

解決 ARM 開發板運行程序提示 Illegal Instruction 錯誤

編輯:Linux 教學

現象描述

在宿主機(x86)上使用交叉編譯器編譯的可執行文件,複製到 ARM 開發板運行時提示 Illegal instruction,程序無法啟動。

根因分析

核心原因是 交叉編譯器架構版本與目標 CPU 不匹配:

  • 開發板 CPU:ARM926EJ-S(ARMv5 架構,ARM9 系列)
  • 誤用編譯器:arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz(面向 ARMv6/ARM11,帶 VFP 浮點)

ARMv6 指令集包含 ARMv5 不支持的指令(如媒體指令、Thumb-2 等),導致 ARM9 核心解碼失敗,拋出非法指令異常。

解決方案

  1. 徹底刪除錯誤版本交叉編譯器:
    rm -rf /opt/arm-linux-gcc-4.5.1-v6-vfp*(根據實際安裝路徑調整)
  2. 安裝匹配 ARMv5 的交叉編譯器,推薦經典穩定版:
    arm-linux-gcc-3.4.3.tar.gz 或 arm-linux-gnueabi-gcc-4.3.2(支持 ARMv5TE)
  3. 重新編譯項目並部署到開發板驗證

關鍵經驗總結

⚠ 鐵律:ARM9 與 ARM11 交叉編譯器絕不通用!
  • ARM9(ARMv5) → 需 ARMv5 兼容工具鏈
  • ARM11/Cortex-A(ARMv6/v7) → 需對應版本工具鏈
  • 編譯器命名通常包含架構標識:v5、v6、v7、vfp、neon 等

驗證方法

編譯後可用 readelf -A executable 查看 Tag_CPU_arch,確認標註為 v5 或 v5te;或在開發板執行 cat /proc/cpuinfo 對照 CPU 架構。

Copyright © Windows教程網 All Rights Reserved