u-boot 문제를 디버깅하는 방법은 무엇입니까?

u-boot 문제를 디버깅하는 방법은 무엇입니까?

저는 Beaglebone Black에 맞춤형 시스템을 통합하는 작업을 하고 있습니다. 대부분의 경우 모든 것이 잘 작동하지만 가끔 전원을 켰을 때 시스템이 부팅되지 않는 경우가 있습니다. 직렬 디버그 케이블이 연결되어 있으면 이런 일이 발생하지 않습니다. (따라서 u-boot 및 커널 메시지를 볼 수 있습니다.)

그러나 드물게 오류가 발생하는 경우 직렬 케이블을 연결하면 u-boot 프롬프트가 표시되는 것을 발견했습니다. 커널을 로드하고 거기에서 모든 것을 로드하도록 u-boot를 수동으로 설정하면 바로 부팅할 수 있습니다(eMMC 등을 읽을 수 있음).

내 첫 번째 생각은 직렬 회선에 u-boot가 중단되는 일종의 소음이 있다는 것이었습니다(기본적으로 2초 안에 중단된다고 생각합니다). 그러나 0초 지연(스페이스바를 기다리지 않음)을 사용하도록 u-boot를 다시 컴파일했는데 문제가 해결되지 않았습니다.

부팅하는 동안 직렬 케이블을 연결하지 않고 u-boot가 정지되는 이유를 어떻게 알 수 있습니까? 이렇게 하면 문제가 해결됩니다. Heisenbug? 모든 종류의 로깅에 액세스할 수 있나요?

답변1

한때 uart RX 핀이 접지에 연결된 보드가 있었습니다. 따라서 u-boot는 항상 버튼이 눌려진 것을 봅니다.

어떤 버전을 사용하시는지 모르겠지만...

존재하다

/common/autoboot.c

기능

static int abortboot_normal(int bootdelay)

반환하기 전에 줄을 추가하세요

abort = 0;

그러면 누르는 키가 반환되지 않습니다.

관련 정보