10

ARM プラットフォームでinsmodカーネル モジュールを使用していますが、カーネル パニックが発生し、この 3 つのエラーが画面に表示されます。

  1. Unhandled fault: external abort on non-linefetch (0x008)
  2. Unhandled fault: imprecise external abort (0xc06)
  3. Kernel panic - not syncing: Fatal exception in interrupt

    • 括弧内の値は何ですか?
    • 3アトミックながらスケジューリングのように聞こえますが、カーネル モジュールにはそのようなものはありません。 とはどういう意味ですか?
4

1 に答える 1

13

括弧内の値はifsr(命令フォルトステータス) レジスタです。アボートには多くの原因があり、これらは特定の原因を示します。特定の障害の原因を処理するカーネルにはいくつかのテーブルがあり、他のテーブルにはprintk、タスクを実行して中止したりpanic()、カーネルを中止したりするハンドラがあります。参照: arm/mm/fault.c。障害ハンドラーを開発していない限り、値はおそらく価値がありません。障害が何であるかについての考えを与えることができますが、PCそのアドレスのコードを取得して見ることをお勧めします (すでに印刷されていると思いますか?)。

これらの障害はどこでも発生する可能性があります。ユーザータスク、カーネルタスク、またはinterruptハンドラーなどで。interruptハンドラーがクラッシュしたため、Linux はすべてを停止し、処理を続行しないことを決定します。そうしないと、ディスクが(さらに)破損する可能性があります。

注: 各フォルト ステータス レジスタには、特定の ARM CPU ごとに異なるabort.Sファイルがあります。たとえば、abort-ev7.S v7_early_abortを参照してください。これは、起動時に一致するプロセッサ テーブルに格納されます。

  1. 未処理の障害- (MMU 経由で) マップされていないメモリを読み取ろうとしています。
  2. カーネル パニック-回復不能と見なされるコードで未処理の障害が発生しました。
于 2013-04-08T22:42:12.853 に答える