Построение задач ECOS для цели Linux Synthetic - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь создать цель Synthetic Linux с помощью ECOS. Моя программная среда:

  • Ubuntu 11.4
  • GCC 4.5.2
  • ECOS 3.0

В Config Tool я настроил цель Linux Sythetic со всеми пакетами. При нажатии F7 (сборка) начинается компиляция, но позже она говорит:

/ опт / ЭКОС / ЭКОС-3,0 / пакеты / гал / синт / i386linux / v3_0 / SRC / системный вызов-i386linux-1.0.S: Ассемблер сообщений: make: Leaving каталог `/ opt / ecos / linux_build ' /opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457: Ошибка: .size выражение для __restore_rt не оценивает константу

/ опт / ЭКОС / ЭКОС-3,0 / пакеты / гал / синт / i386linux / v3_0 / SRC / системный вызов-i386linux-1.0.S: 457: Ошибка: .size выражение для __restore не оценивает константу делать: [src / syscall-i386-linux-1.0.o.d] Ошибка 1 make: [build] Ошибка 2

Содержимое файла / opt / ecos / ecos-3.0 / packages / hal / synth / i386linux / v3_0 / src / syscall-i386-linux-1.0.S из строки 434 это:

// ----------------------------------------------------------------------------
// Special support for returning from a signal handler. In theory no special
// action is needed, but with some versions of the kernel on some
// architectures that is not good enough. Instead returning has to happen
// via another system call.         

        .align 16
        .global cyg_hal_sys_restore_rt
cyg_hal_sys_restore_rt:
        movl    $SYS_rt_sigreturn, %eax
        int     $0x80
1:              
        .type __restore_rt,@function
        .size __restore_rt,1b - __restore_rt

        .align 8
        .global cyg_hal_sys_restore
cyg_hal_sys_restore:
        popl    %eax
        movl    $SYS_sigreturn, %eax
        int     $0x80
1:              
        .type __restore,@function
        .size __restore,1b - __restore

Таким образом, __ restore и __ restore_rt не определены.

Я пытался закомментировать эту часть и удалить пакеты, связанные с сигналами (там написано, что это обработчик сигналов), но, похоже, это базовая часть ядра ECOS; сборка кажется успешной, когда части закомментированы, но когда я компилирую примеры приложений, возникает ошибка компоновщика из-за отсутствующих символов (cyg_hal_sys_restore).

Глупая идея, но я пытался заменить "__restore" на "cyg_hal_sys_restore" и "... rt" таким же образом, просто для исключения undefs (не очень надеясь, что неправильный код не вызовет ошибок), и результат таков: сборка в порядке (так как нет undefs), компиляция примера в порядке ( как отсутствующие символы), но пример a.out выбрасывает segfault как раз в тот святой момент, когда я его запускаю.

Хэлп, пожалуйста, я не знаком ни с inline asm, ни с ECOS.

1 Ответ

0 голосов
/ 03 июня 2011

Проблема, похоже, связана с binutils. На Debian у меня работало понижение до 2.20.1-16. http://ecos.sourceware.org/ml/ecos-discuss/2011-06/msg00010.html

РЕДАКТИРОВАТЬ: Перейдите по ссылке, там тоже исправление.

...