ECOSを使用してSyntheticLinuxターゲットを構築しようとしています。私のソフトウェア環境:
- Ubuntu 11.4
- GCC 4.5.2
- ECOS 3.0
Config Toolで、「all」パッケージを使用して「LinuxSythetic」ターゲットを設定しました。F7(ビルド)を押すとコンパイルが開始されますが、後で次のように表示されます。
/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:エラー:__restore_rtの.size式が定数に評価されない
/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457:エラー:__restoreの.size式は定数makeに評価されません:[src /syscall-i386-linux-1.0.od]エラー1make:[ビルド]エラー2
434行目のファイル/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.Sの内容は次のとおりです。
// ----------------------------------------------------------------------------
// 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)。
ばかげた考えですが、undefを削除するために(間違ったコードがエラーを引き起こさないことを実際に望んでいない)、同じ方法で「__restore」を「cyg_hal_sys_restore」と「...rt」に置き換えようとしました。ビルドは(undefがないので)大丈夫です、例のコンパイルは(行方不明のシンボルがないので)大丈夫です、しかし例a.outは私がそれを始めた聖なる瞬間にsegfaultを投げます。
Halp、pls。、私はインラインasmやECOSに精通していません。