부트 로더의 구조를 이해하는 데 유용한 도구 나 방법이 있습니까?


9

최근 에 오픈 소스 부트 로더 인 U-boot를 실행하는 Atmel AT91SAM9G20 SBC로 작업하고있는 불쾌한 버그의 원인을 알아 냈습니다 . 문제의 핵심은 U-boot가 하드웨어가 내가 만든 것과 다르게 구성 될 것으로 예상했기 때문에 일부 장치 레지스터가 잘못 구성되었다는 것입니다.

이제 문제를 파악 했으므로 레지스터를 올바르게 구성하려면 U-boot를 조정해야합니다. 프로그램의 끝에 몇 줄의 코드를 추가하여 맹목적으로 할 수는 있지만 지저분합니다.

이것은 내 질문에 이르게합니다 : main ()에서 시작하여 모든 파일에서 가능한 모든 코드 경로를 읽는 것보다 U-boot가 어떻게 효율적으로 작동하는지 알 수 있습니까? 파일을 둘러보고 관련 식별자 근처의 코드를 보았습니다. 이것은 효과가없는 것으로 판명되었습니다. 대부분의 코드는 내가 신경 쓰지 않는 하위 시스템의 드라이버 인 것 같습니다. 나는 실제로 부트 로더가 어떻게 잘 작동하는지 이해하지만, 순진한 접근법보다 더 나은 방법이 있기를 바랍니다.


uboot 개발자 메일 링리스트에서 질문을 했습니까?
sybreon

답변:


6

다음과 같은 몇 가지 도구 / 전략이 도움이 될 수 있습니다.

  • 소스 코드를 이해하기위한 더 나은 도구 :

    • cscope 는 C 코드를 탐색하는 도구입니다. grep과 비슷하지만 구문을 이해합니다.
    • 함수 호출 구조의 그림을 그리려면 그래프 생성기 호출
    • 내가 시도하지 않았지만 Fenris 가 재미있어 보입니다.
  • 런타임 분석

    • 디버거를 사용하여 흥미로운 섹션을 단계별로 진행하고 무슨 일이 일어나고 있는지 분석
    • gcc의 인스 트루먼 테이션 기능을 사용하여 모든 기능의 시작 / 종료에 대한 청크를 호출하십시오. 예. http://ndevilla.free.fr/etrace/
  • 나만의 미니 부트 로더 작성

    • 나는 종종 무언가를 이해하는 가장 좋은 방법은 그것을 스스로 재창조하는 것임을 알게된다

불행히도 모든 것을 위해 작동하는 마술 레시피는 없습니다.


@ 런타임 분석-별도의 임베디드 시스템에서 실행할 수 없습니다. 특히 부트 로더와 같은 기본 OS가 동시에 실행되지 않는 경우에는 더욱 그러합니다.
코너 울프

Joby가 제안한대로 디버거를 사용하여 계속 진행할 수 있습니다. 복잡성에 따라 도움이 될 수도 있고 아닐 수도 있습니다.
Nick T

Cscope는 내가 상상했던 것입니다. 나는 조금 더 빛나는 것을 원했지만 좋은 출발입니다. 감사.
pingswept December

2

AT91을 위해 어떻게 구성 했습니까?

코드 트리는 아키텍처 특정 항목이 'arch / (cpu class) / (cpu type) / ...'트리에 있도록 설계되었습니다. 아치 / 팔 / cpu / arm926ejs / at91에서 AT91 코드를 찾았습니다. 파일의 거의 절반이 개별 AT91 변형에 따라 다르기 때문에 그 디렉토리에서 살펴볼 것이 그리 많지 않습니다.

이것이 명백한 경우에 죄송합니다 ...하지만 이것을 확인하는 것에 대해서는 언급하지 않았습니다.

나는 아직 uBoot 코드 트리를 보지 않았지만 당신의 게시물이 그렇게 두려워했습니다. 백 버너 프로젝트는 결국 사용자 지정 iMX233 PCB에서 uBoot 및 Linux를 사용합니다. uBoot 아키텍처와 변형 관련 항목이 얼마나 잘 격리되어 있으며 얼마나 큰 고통이 될지에 대한 피드백을 얻는 데 관심이 있습니다.


예, arch / arm / cpu / arm926ejs / at91 / *와 함께 좋은 시간을 보냈습니다. 그러나 제안 해 주셔서 감사합니다. 내가 찾던 코드는 실제로 프로세서 부트 ROM에 있었고 Atmel 만 액세스 할 수 있습니다. 자세한 내용은 다음과 같습니다. at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept December

1
그건 그렇고, 전반적으로, 나는 U-boot에 깊은 인상을 받았습니다. 지원하는 수많은 보드와 CPU의 경우 꽤 체계적으로 구성되어 있습니다. 이 문서는 드물지만 부트 로더에는 적합하지 않은 것 같습니다.
pingswept December

@pingswept : 이봐, 리눅스 4 계층. 좋은. 아마도 iMX233 대신 해당 칩을 살펴 봐야 할 것입니다. ARM과 2 개의 SDRAM 칩을 4 개의 레이어로 가져 와서 다른 프로젝트에서 작업하기 위해 시간을 허비하고있었습니다. 나는 Altium 사용자이기도합니다.
darron

9G20과 iMX233은 매우 가깝습니다. 이더넷 MAC이 내장되어 있고 칩의 수량이 조금 더 저렴하기 때문에 9G20을 선택했지만 iMX233은 가까운 주자였습니다.
pingswept December

또한 Chumby Hacker Board를 살펴보십시오. iMX233 주위에 시스템을 구축하기로 결정한 경우 시작하기에 좋은 장소 일 수 있습니다. Altium 파일은이 위키 페이지에 있습니다. wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.