在 Vortex86 上编译:"Illegal instruction"

Compiling on Vortex86: "Illegal instruction"

本文关键字:Illegal instruction 编译 Vortex86      更新时间:2023-10-16

我使用的是一台嵌入式PC,它有一个Vortex86-SG CPU,Ubuntu 1004w/kernel 2.6.34.10-vortex86-sg。不幸的是,我们无法编译一个新的内核,因为我们没有任何源代码,甚至没有驱动程序或补丁。

我必须用OpenFrameworks运行一个用C++编写的小项目。该框架正确编译of_v0071_linux_release/scripts/linux/ubuntu/install_*.sh中的每个脚本。

我注意到,为了针对Vortex86/Ubuntu 10.04进行编译,必须在每个config.make文件中添加以下选项:

USER_CFLAGS = -march=i486  
USER_LDFLAGS = -lGLEW  

实际上,它编译时没有错误,但生成的二进制文件根本不会启动:

root@jb:~/openframeworks/of_v0071_linux_release/apps/myApps/emptyExample/bin# ./emptyExample  
Illegal instruction  
root@jb:~/openframeworks/of_v0071_linux_release/apps/myApps/emptyExample/bin# echo $?  
132  

最后一行:

munmap(0xb77c3000, 4096)                = 0  
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 8) = 0  
--- SIGILL (Illegal instruction) @ 0 (0) ---  
+++ killed by SIGILL +++  
Illegal instruction  
root@jb:~/openframeworks/of_v0071_linux_release/apps/myApps/emptyExample/bin#  

有解决这个问题的办法吗?

我知道我在这方面有点晚了,但我最近在为vortex86dx编译内核时遇到了自己的问题。我终于能够构建内核了。使用这些步骤的风险由您自己承担,因为我不是Linux大师,您可能需要根据自己的偏好/硬件更改一些设置:

  1. 下载并使用在您计划编译的类似内核版本上运行的Linux发行版。由于我将编译Linux 2.6.34.14,所以我在虚拟机上下载并安装了Debian6,并分配了足够的内存和处理器。您可能会在Vortex86DX本身上进行编译,但这可能需要很长时间
  2. 确保我有体面:#apt-get install ncurses-dev kernel-package
  3. 从kernel.org下载内核(我获取了Linux-2.6.34.14.tar.xz)。从包中提取文件
  4. 从dmp ftp站点获取配置文件:ftp://vxmx:gc301@ftp.dmp.com.tw/Linux/Source/config-2.6.34-vortex86-sg-r1.zip。请注意vxmx用户名。将配置文件复制到新提取的Linux源文件夹中
  5. 抓取补丁和ftp://vxdx:gc301@ftp.dmp.com.tw/Driver/Linux/config%26patch/patch-2.6.34-hda.zip。请注意vxdx用户名复制到内核源文件夹
  6. 补丁内核:#patch -p1 < patchfilename
  7. 使用#make menuconfig配置内核
  8. 加载备用配置文件
  9. 启用通用x86支持
  10. 启用数学仿真
  11. 我禁用了通用IDE支持,因为我将使用传统模式(在bios中可选)
  12. 在设备驱动程序->以太网(10或100Mbit)->确保已选择RDC R6040快速以太网适配器支持
  13. USB支持->选择支持主机端USB、EHCI HCD(USB 2.0)支持、OHCI HCD支持
  14. 安全配置为.config
  15. 检查串行端口:手动编辑.config,确保config_serial_8250_NR_ARTS=4(如果您有其他端口,则为4以上),config_serial_8250_RUNTIME_UARTS=3(如果您还有其他端口,请为4以上。)。如果要使用4个以上的串行端口,请使用已设置的config_serail_8250_MANY_ports
  16. 编译内核头和源:#make-kpkg --initrd kernel_image kernel_source kernel_headers modules_image