未処理の信号のコード番号とはどういう意味ですか?

未処理の信号のコード番号とはどういう意味ですか?

私はFPGAのカスタムデザインで動作するRISC-V Ariane CVA6プロセッサでカスタムGNU / Linuxディストリビューションを実行しています。

メモリマップされたI / Oレジスタからデータを読み取ろうとすると、バスエラーが発生します。マッピングとアドレスが正しいことを確認しました。

実行すると、dmesg未処理の信号7コード0x2エラーが表示されます。未処理の信号番号を確認しました。ここしかし、コード0x2への参照が見つかりません。どんなアイデアがありますか?

答え1

このコードの意味はアーキテクチャによって異なります。 RISC-Vの場合、このメッセージを発行するコードは次の場所にあります。do_trap存在するarch/riscv/kernel/traps.c。信号7はSIGBUShttps://elixir.bootlin.com/linux/v5.15/source/include/uapi/asm-generic/signal.h#L18) (一部の古いアーキテクチャは信号番号が異なります). SIGBUSの場合、コードは次のようになります。BUS_xxx絶え間ない。 2 はBUS_ADRERR「存在しない物理アドレス」です。mm_fault_error

マッピングに問題があります。 MMU を誤って入力したか、正しいコンテキストに対して MMU テーブルを入力していない可能性があります。これはUnix.SEの専門知識をはるかに超えています。問題がLinuxカーネルのMMU管理に関するものである場合は、Stack Overflowでヘルプを見つけることができます。完全なコードを投稿すると。 RISC-Vで周辺機器を設定する際に問題がある場合は、RISC-Vエキスパートフォーラムがより良い可能性があります。

関連情報