[RAPA3기][4조][Fail-Operational TMR 기반 자율주행 차량 제어 시스템] 커널 로드 주소와 Reserved Memory(fb_video) 충돌 여부 문의

안녕하세요, 프로젝트 진행 간에 커널 관련 오류가 지속 발생하여 확인 요청 차 문의 드립니다.

현재 tcnnapp 구동 시 불규칙적인 간격으로, Kernel Panic, Watchdog Reset, RCU Stall, Segmentation Fault가 발생하는 상황입니다. 자체 제작 드라이버 제거 및 최소 기능 동작 상태에서도 동일 증상이 발생하여 나름의 확인을 진행해 보았습니다.

저희가 확인한 바로는, 커널이 로드되는 물리 주소와 DTS 상의 비디오 버퍼 예약 주소가 겹치는 것으로 보입니다. 이로 인해서 실행 중인 커널 코드나, 데이터 영역이 오염되는 게 아닌지 추측하고 있습니다.

root@ai-g-topst:~# cat /proc/iomem | grep “Kernel code”
20000000-20bcffff : Kernel code

위와 같이 커널 코드가 해당 주소를 점유 중인 것으로 확인했습니다.

이때, fb_vido 노드가 0x20000000 을 예약하려고 하였다가 실패하는 로그가 부팅 시에 발견 되었습니다.

[ 0.000000] OF: fdt: Reserved memory: failed to reserve memory for node ‘fb_video’: base 0x0000000020000000, size 16 MiB

이를 바탕으로 DTS의 reserved-memory/fb_video 노드의 시작 주소를 확인해본 결과

root@ai-g-topst:~# hexdump -Cv /proc/device-tree/reserved-memory/fb_video/reg
00000000 00 00 00 00 20 00 00 00 00 00 00 00 01 00 00 00 |… …|

DT는 fb_video를 0x20000000에 16MiB로 하드코딩해두었고, 커널은 그걸 예약(memblock reserve)하는 데 실패한 것으로 보입니다.

이후로는, FB 프레임 버퍼는 CMA에서 잡히는 것으로 확인했습니다.

  1. cma: Reserved 512 MiB at 0x59000000
  2. fb fb@0: ... fb_map_video_memory ... PA=0x59100000 size(0x00465000)
  3. using cma-default

그럼에도 불구하고 잔존한 설정에 의해 오류 발생 가능성에 대해서 궁금합니다.

즉, tcnnapp 사용 시 app이 종료되거나, kernel 오류 발생이 불규칙적으로 발생하는 것이 위와 관련이 있는 지 궁금합니다.

추가로 status에 diabled로 오타가 있는 것도 확인했습니다. 확인 부탁 드립니다.

드라이버 내부를 확인해보진 못했지만, 비활성화가 되지 않은 드라이버들로 인해 overlay 진행되어 오류가 발생할 수 있는지 궁금합니다.

root@ai-g-topst:~# grep -r diabled /proc/device-tree/reserved-memory/
grep: /proc/device-tree/reserved-memory/video/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext15/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext8/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext13/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext6/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext11/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext4/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext2/status: binary file matches
grep: /proc/device-tree/reserved-memory/video_ext2/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext9/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext14/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext7/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext12/status: binary file matches
grep: /proc/device-tree/reserved-memory/video_ext/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext5/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext10/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext3/status: binary file matches

root@ai-g-topst:~# grep -r disabled /proc/device-tree/reserved-memory/
grep: /proc/device-tree/reserved-memory/viqe0/status: binary file matches
grep: /proc/device-tree/reserved-memory/optee_os/status: binary file matches
grep: /proc/device-tree/reserved-memory/v4l2_vout0/status: binary file matches
grep: /proc/device-tree/reserved-memory/video_dual/status: binary file matches
grep: /proc/device-tree/reserved-memory/osd/status: binary file matches
grep: /proc/device-tree/reserved-memory/viqe1/status: binary file matches
grep: /proc/device-tree/reserved-memory/dual_display/status: binary file matches
grep: /proc/device-tree/reserved-memory/v4l2_vout1/status: binary file matches
grep: /proc/device-tree/reserved-memory/overlay_rot/status: binary file matches
grep: /proc/device-tree/reserved-memory/vpu_share_s/status: binary file matches

root@ai-g-topst:~# grep -r okay /proc/device-tree/reserved-memory/
grep: /proc/device-tree/reserved-memory/reserved_m_can_0/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_main/status: binary file matches
grep: /proc/device-tree/reserved-memory/overlay/status: binary file matches
grep: /proc/device-tree/reserved-memory/fb_video/status: binary file matches
grep: /proc/device-tree/reserved-memory/video_sw/status: binary file matches
grep: /proc/device-tree/reserved-memory/pmap_visionprotocol2/status: binary file matches
grep: /proc/device-tree/reserved-memory/overlay2/status: binary file matches
grep: /proc/device-tree/reserved-memory/reserved_m_can_1/status: binary file matches
grep: /proc/device-tree/reserved-memory/enc_ext/status: binary file matches
grep: /proc/device-tree/reserved-memory/pmap_visionprotocol/status: binary file matches
grep: /proc/device-tree/reserved-memory/pmap_visionprotocol3/status: binary file matches
grep: /proc/device-tree/reserved-memory/vpu_share_m/status: binary file matches
grep: /proc/device-tree/reserved-memory/fb_wmixer/status: binary file matches
grep: /proc/device-tree/reserved-memory/pmap_visionprotocol1/status: binary file matches
grep: /proc/device-tree/reserved-memory/overlay1/status: binary file matches

확인 부탁 드립니다. 감사합니다.

안녕하세요 topst매니저 입니다.
사용중인 AI-G SDK 버전과 사용하신 tcnnapp 명령어를 보내주시면 빠르게 확인 도와드릴 수 있을 것 같습니다.
감사합니다.

안녕하세요. 환경 및 명령어는 다음과 같습니다.

[환경]

  • AI-G Image Release: 1.1.0

  • Kernel: 5.10.223-tcc

  • /etc/issue: Telechips Baseline (Poky/meta-telechips/meta-core) 4.0.17

  • /etc/version: 20180309123456

[실행 방법]

  • 실행 바이너리: ./tcnnapp

  • 실행 옵션: -i camera, -o display 로 구동 중입니다.

[수정/추가 사항]

  • Lane(OpenCV) 처리 로직 추가

  • SysV Shared Memory(SHM) publish 추가

위 추가 내용은 유저스페이스 영역(OpenCV 처리 및 IPC)이라 커널 크래시를 직접 유발하진 않을 것으로 판단하고 있습니다.

1 Like

안녕하세요.
디버깅 환경을 재현하고자 합니다.
수정하신 파일들과 실행하신 tcnnapp파일(full set 및 최소 기능구현)을 전달해주시면 감사하겠슨다.

넵 알겠습니다.

링크는 아래에 첨부하였으며 엑세스 요청해주시면 감사하겠습니다.

기존 소스코드에서 수정된 파일은, CMakelists.txt, NnAppMain.c, NnNeruralNetwork.c 이며, 추가한 파일로는 lane_process_cpp.hpp, lane_process_cpp.cpp, shared_data_srs_compliant.h 입니다.

https://drive.google.com/file/d/18zYr4f5owd7vmmk5_3LZfzvbTE4ijHLJ/view?usp=sharing

imx219 센서 카메라 사용 중 입니다.

액세스 요청드렸습니다. 확인 부탁드립니다.

넵 액세스 허용 했습니다. 확인 부탁드립니다.

1 Like