我正在尝试使用ECOS构建Synthetic Linux目标。我的软件环境:
在Config Tool中,我使用“all”软件包设置了“Linux Sythetic”目标。按F7(build)编译开始,但后来说:
/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S: 汇编程序消息:make:离开 目录`/ 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不评估为常量
/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457: 错误:__ tenore的.size表达式 不评估为常数 使: [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 只是在我启动它的神圣时刻抛出段错误。
Halp,请,我不熟悉inline asm和ECOS。
答案 0 :(得分:0)
问题似乎与binutils有关。在Debian上,降级到2.20.1-16对我有用。 http://ecos.sourceware.org/ml/ecos-discuss/2011-06/msg00010.html
编辑:关注链接,也有适当的修复。