처리되지 않은 신호의 코드 번호는 무엇을 의미합니까?

처리되지 않은 신호의 코드 번호는 무엇을 의미합니까?

저는 FPGA의 맞춤형 디자인에서 실행되는 RISC-V Ariane CVA6 프로세서에서 맞춤형 GNU/Linux 배포판을 실행하고 있습니다.

메모리 매핑된 I/O 레지스터에서 데이터를 읽으려고 하면 버스 오류가 발생합니다. 매핑과 주소가 올바른지 확인했습니다.

실행하면 dmesg처리되지 않은 신호 7 코드 0x2 오류가 표시됩니다. 처리되지 않은 신호번호를 확인했어요여기하지만 코드 0x2에 대한 참조를 찾을 수 없습니다. 어떤 아이디어가 있나요?

답변1

이 코드의 의미는 아키텍처에 따라 다릅니다. RISC-V의 경우 이 메시지를 발행하는 코드는 다음 위치에 있습니다.do_trap존재하다arch/riscv/kernel/traps.c. 신호 7은 SIGBUS(https://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 전문가 포럼이 더 나을 수 있습니다.

관련 정보