Компиляция на Vortex86: «Недопустимая инструкция»

Я использую встроенный компьютер, который имеет Vortex86-SG ЦПУ, Ubuntu 10.04 с ядром 2.6.34.10-vortex86-sg, К сожалению, мы не можем скомпилировать новое ядро, потому что у нас нет исходного кода, даже драйверов или патчей.

Я должен запустить небольшой проект, написанный на C ++ с OpenFrameworks. Фреймворк правильно компилирует каждый скрипт в 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

Решение

Я знаю, что немного опоздал, но недавно у меня возникли проблемы с компиляцией ядра для 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. Включить общую поддержку x86
  10. Включить математическую эмуляцию
  11. Я отключил общую поддержку IDE, потому что буду использовать устаревший режим (выбирается в BIOS)
  12. В разделе «Драйверы устройств» -> Ethernet (10 или 100 Мбит) -> Убедитесь, что выбрана поддержка адаптера Fast Ethernet RDC R6040.
  13. Поддержка USB -> Выбрать поддержку для хоста USB, поддержка EHCI HCD (USB 2.0), поддержка OHCI HCD
  14. безопасный конфиг как .config
  15. проверьте последовательные порты: отредактируйте .config вручную, убедитесь, что CONFIG_SERIAL_8250_NR_UARTS = 4 (или больше, если у вас есть дополнительные), CONFIG_SERIAL_8250_RUNTIME_UARTS = 4 (или больше, если у вас есть дополнительные). Если вы хотите использовать более 4 последовательных портов, используйте config_serail_8250_MANY_PORTs установлен.
  16. скомпилировать заголовки ядра и источник: #make-kpkg --initrd kernel_image kernel_source kernel_headers modules_image
3

Другие решения

Других решений пока нет …