在Vortex86上编译:“非法指令”

时间:2013-06-22 16:42:56

标签: c++ gcc cpu-architecture openframeworks

我正在使用嵌入式PC,其中Vortex86-SG CPU, Ubuntu 10.04 w /内核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  

Strace最后一行:

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#  

有什么想法解决这个问题?

1 个答案:

答案 0 :(得分:3)

我知道我在这方面有点迟,但最近我有自己的问题试图为vortex86dx编译内核。我终于能够构建内核了。使用这些步骤需要您自担风险,因为我不是Linux专家,您可能需要根据自己的喜好/硬件进行一些设置:

  1. 下载并使用在您计划编译的类似内核版本上运行的Linux发行版。由于我将编译Linux 2.6.34.14,我在虚拟机上下载并安装了Debian 6,并提供足够的内存和处理器分配。您可以在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. 加载备用配置文件
  10. 启用通用x86支持
  11. 启用数学模拟
  12. 我禁用了通用IDE支持,因为我将使用传统模式(可在BIOS中选择)
  13. 在设备驱动程序下 - &gt;以太网(10或100Mbit) - &gt;确保选择RDC R6040快速以太网适配器支持
  14. USB支持 - &gt;选择支持主机端USB,EHCI HCD(USB 2.0)支持,OHCI HCD支持
  15. 安全配置为.config
  16. 检查串口:手动编辑.config确保CONFIG_SERIAL_8250_NR_UARTS = 4(如果还有其他的话,还是更多),CONFIG_SERIAL_8250_RUNTIME_UARTS = 4(如果你有额外的话,还是更多)。如果要使用更多4个串口,则使用config_serail_8250_MANY_PORTs设置。
  17. 编译内核头文件和来源:#make-kpkg --initrd kernel_image kernel_source kernel_headers modules_image