在 Vortex86 上编译:"Illegal instruction"
Compiling on Vortex86: "Illegal instruction"
我使用的是一台嵌入式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大师,您可能需要根据自己的偏好/硬件更改一些设置:
- 下载并使用在您计划编译的类似内核版本上运行的Linux发行版。由于我将编译Linux 2.6.34.14,所以我在虚拟机上下载并安装了Debian6,并分配了足够的内存和处理器。您可能会在Vortex86DX本身上进行编译,但这可能需要很长时间
- 确保我有体面:
#apt-get install ncurses-dev kernel-package
- 从kernel.org下载内核(我获取了Linux-2.6.34.14.tar.xz)。从包中提取文件
- 从dmp ftp站点获取配置文件:ftp://vxmx:gc301@ftp.dmp.com.tw/Linux/Source/config-2.6.34-vortex86-sg-r1.zip。请注意vxmx用户名。将配置文件复制到新提取的Linux源文件夹中
- 抓取补丁和ftp://vxdx:gc301@ftp.dmp.com.tw/Driver/Linux/config%26patch/patch-2.6.34-hda.zip。请注意vxdx用户名复制到内核源文件夹
- 补丁内核:
#patch -p1 < patchfilename
- 使用
#make menuconfig
配置内核 - 加载备用配置文件
- 启用通用x86支持
- 启用数学仿真
- 我禁用了通用IDE支持,因为我将使用传统模式(在bios中可选)
- 在设备驱动程序->以太网(10或100Mbit)->确保已选择RDC R6040快速以太网适配器支持
- USB支持->选择支持主机端USB、EHCI HCD(USB 2.0)支持、OHCI HCD支持
- 安全配置为.config
- 检查串行端口:手动编辑.config,确保config_serial_8250_NR_ARTS=4(如果您有其他端口,则为4以上),config_serial_8250_RUNTIME_UARTS=3(如果您还有其他端口,请为4以上。)。如果要使用4个以上的串行端口,请使用已设置的config_serail_8250_MANY_ports
- 编译内核头和源:
#make-kpkg --initrd kernel_image kernel_source kernel_headers modules_image
相关文章:
- 如何解决g++问题"internal compiler error: Illegal instruction min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MI
- (C++)在按位 OR 操作时获取错误"Illegal instruction (core dumped)"
- 32 bit PPC rlwinm instruction
- C++ Illegal else
- 使用指针时遇到错误"The NTVDM CPU has encountered an illegal instruction"
- 库达库兰德"An illegal memory access was encountered"
- 在 Mac 10.9 上从 Android 源代码构建 aapt 小牛队在 10.8 山狮上出现段错误或给出"Illegal Instruction 4"
- Qt:带有Qt OSX Yosemite的CUDA "sed: illegal option -- r"错误
- 取消对句柄的指针引用会给我"illegal, right operand.."?
- 推力变换引发错误:"bulk_kernel_by_value: an illegal memory access was encountered"
- TLS 变量上的"illegal thread-local reference to regular symbol"错误
- "Illegal Break"时'Outputting Multiples of a Number, Input 0 or Non # to exit'
- "Illegal block entry" YAML -cpp 中的 YAML 怪物示例
- 简单的 CUDA 测试总是失败并出现错误"an illegal memory access was encountered"
- 在 Vortex86 上编译:"Illegal instruction"
- "error: C2275: 'QMouseEvent' : illegal use of this type as an expression"
- 未命名的命名空间和 iostream 会导致"!= being illegal operation"
- 在对类方法执行指针部分专用化时获取"illegal use of explicit template arguments"
- 简单的模板化函数,用于转换 std::vectors - "illegal use of this type as an expression"
- 在 C++ 中使用特殊符号时"Illegal case"