1

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に精通していません。

4

1 に答える 1

0

この問題はbinutilsに関連しているようです。Debianでは、2.20.1-16へのダウングレードがうまくいきました。 http://ecos.sourceware.org/ml/ecos-discuss/2011-06/msg00010.html

編集:リンクをたどってください、適切な修正もあります。

于 2011-06-03T12:35:47.710 に答える