問題タブ [gem5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
115 参照

python - Pythonファイルを実行して編集し、2番目のターミナルで実行しても大丈夫ですか

シミュレーションを実行しています (これについては後で詳しく説明します)。このシミュレーションのファイルの 1 つは、構成の詳細を含む python ファイルです。このシミュレーションの複数のバージョンを実行したいのですが、1 つのシミュレーションを実行し、別のターミナルを開き、python ファイルを編集して 2 つ目のシミュレーションを実行すると、最初のシミュレーションが台無しになるかどうかわかりません。Pythonには「ソースコード」という概念があり、実際のプロセスとは別のものですか? ファイルを安全に編集できますか? これらのシミュレーションには時間がかかります。

(そのため、gem5 シミュレーションを実行していて、複数のバージョンのシミュレーションを実行し、CPU のさまざまなプロパティを実行する必要があります。それが役立つ場合に備えて。)

0 投票する
1 に答える
3142 参照

gem5 - syscall エミュレーション SE モードで gem5 を実行しているときに「FATAL: kernel too old」を解決するにはどうすればよいですか?

Ubuntu 17.10、C プログラム:

gem5 バージョン: da79d6c6cde0fbe5473ce868c9be4771160a003b 2017 年 12 月

GCC バージョン:

コンパイルして実行します。

結果:

X86 と同様です。

これは、メーリング リストで何度も質問されているので、ここで議論を集中させて、最善の解決策を決定しましょう。

https://www.mail-archive.com/gem5-users@gem5.org/msg12385.htmlは、適切な問題の説明を提供します。

_start() の開始直後に、C ライブラリは uname() システムコールを発行して、最小カーネル バージョンを確認します。gem5/src/arch/arm/linux/process.cc http://process.ccを見ると、エミュレートされた syscall が 32 ビット モードで「3.0.0」を返し、64 で「3.7. 0+」。crosstool-ng でツールチェーンを設定すると、オプション「CT_LIBC_GLIBC_MIN_KERNEL_VERSION」があります。それがエミュレートされた uname() のレポートよりも大きい場合、glibc は fatal() を実行します。

魔法のツリー内ブロブを使用すると、次のことに気付きました。

では、そのブロブの何が特別で、どのように生成されたのでしょうか?

ソース コードで許可されているソース バージョン

823d9d177fded16af07114d70b5c26caaec6aa00 は、偽のカーネル バージョンが定義されている x86 ポイントがsrc/arch/x86/linux/process.cc.

同様の grep は、アーム 32 が 3.0 で、アーム 64 が 3.7.0 であったことを示しています。

crosstool-ng試み

有望な可能性の 1 つは、crosstool-ng https://github.com/crosstool-ng/crosstool-ngを使用してコンパイラを生成することです。これにより、物事がより制御されます。

ab3c204aee88f08481f1f63825d0e94b082ef84e の時点で、次の構成の両方を試しました。

  • ./ct-ng arm-cortex_a15-linux-gnueabihf
  • ./ct-ng aarch64-unknown-linux-gnu

GCC 8.1 でカーネル 4.16 用にコンパイルすると、gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e で静的コンパイルがそれぞれ次のように失敗します。

と:

しかし、私は失敗を本当に理解していません:

  • openatはかなり古いカーネル 2.6.16 で導入されましたが、それほど風変わりではないように思えますが、なぜまだ実装されていないのでしょうか?

    ソースを見ると、64 ビットでは実装されているが、何らかの理由で 32 ビットでは実装されていないことがわかります。

    また、arm の最小カーネル バージョンを 3.2 に設定しようとしましたが、当然のことながら、役に立ちませんでした。

  • 命令mrsが実装されないのはなぜですか?ARM リファレンスによると、この命令のエンコードは次のように終了します。

    つまり:

    と一致するかもしれません0x4d5380000が、よくわかりません。

また、さまざまな crosstool-ng 設定、特にターゲット カーネル バージョンをいじってみるのも興味深いでしょう。そのリビジョンではデフォルトで最新の v4.16 が syscall の問題を解決するかどうかを確認します。

gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 2018 年 5 月でテスト済み。