SW 개발

uboot fit image configuration 에러 처리

. . . 2022. 9. 16. 23:09
반응형

fit image 를 이용하여 부팅중에 에러가 발생하여 내용을 정리한다.

1 이슈사항

부팅중에 다음과 같은 Could not find configuration node 에러가 발생하여 부팅이 넘어가지 않는경우가 발생한다.

MMC read: dev # 0, block # 32768, count 102400 ... 102400 blocks read: OK
## Loading kernel from FIT Image at a0000000 ...
Could not find configuration node
ERROR: can't get kernel image!

위의 증상은 말그대로 fit image 내의 configure 설정이 안되어 있어 넘어가지 않는것이다.

2 디버깅하기

2.1 fit image 내용살펴보기

해당 에러까지 넘어왔다면 uboot 에서 fit image 를 메모리에 로딩까지는 정상적으로 된 상태이다.

(로딩된 fit image 의 내용을 살펴볼 수있다.)

uboot 에 다음의 명령어를 입력한다.

iminfo [LOAD_ADDRESS]
  • LOAD_ADDRESS : 실제 fit image 가 로딩된 주소
    • 대부분 로그에서도 확인가능하다.
    • Loading kernel from FIT Image at a0000000 ... 에서 보면, 0xa0000000 에 로딩이 완료되었다는 뜻.
    • 아니면 uboot env 쪽을 확인하여 이미지 로딩주소를 확인한다.

iminfo 명령어를 수행 하면 다음과 같은 이미지의 실제 내용을 볼 수 있다.

## Checking Image at a0000000 ...
   FIT image found
   FIT description: arm64 kernel, ramdisk and FDT blob
    Image 0 (kernel)
     Description:  ARM64 Kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0xa00000d0
     Data Size:    15185058 Bytes = 14.5 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x84080000
     Entry Point:  0x84080000
    Image 1 (initrd)
     Description:  initrd for arm64
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0xa0e7b620
     Data Size:    21968191 Bytes = 21 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x00000000
     Entry Point:  0x00000000
    Image 2 (ls1012ardb-dtb)
     Description:  ls1012ardb-dtb
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0xa236ec10
     Data Size:    14690 Bytes = 14.3 KiB
     Architecture: AArch64
     Load Address: 0x90000000
    Image 3 (ls1012aqds-dtb)
     Description:  ls1012aqds-dtb
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0xa2372614
     Data Size:    16669 Bytes = 16.3 KiB
     Architecture: AArch64
     Load Address: 0x90000000
// 생략...
    Configuration 0 (ls1012ardb)
     Description:  config for ls1012ardb
     Kernel:       kernel
     Init Ramdisk: initrd
     FDT:          ls1012ardb-dtb
    Configuration 1 (ls1012aqds)
     Description:  config for ls1012aqds
     Kernel:       kernel
     Init Ramdisk: initrd
     FDT:          ls1012aqds-dtb
    Configuration 2 (ls1012afrwy)
     Description:  config for ls1012afrwy
     Kernel:       kernel
     Init Ramdisk: initrd
     FDT:          ls1012afrwy-dtb
// 생략...
## Checking hash(es) for FIT Image at a0000000 ...
   Hash(es) for Image 0 (kernel):
   Hash(es) for Image 1 (initrd):
   Hash(es) for Image 2 (ls1012ardb-dtb):
// 생략...
  • 확인해야할 사항
    • Default Configuration: 'config@1' 와 같이 default configuration 이 있는지 꼭 확인해보자.
    • 어떠한 confguration 이 있는지 확인해보자. 위의 예제에서는 ls1012ardb, ls1012aqds, ls1012afrwy .. 등이 configuation 이다. (해당문자열을 bootm 명령어와 함께 주면된다)

3 문제해결

MMC read: dev # 0, block # 32768, count 102400 ... 102400 blocks read: OK
## Loading kernel from FIT Image at a0000000 ...
Could not find configuration node
ERROR: can't get kernel image!

위의 에러 문구와 같이, fit image 의 configuration 을 주지 않아 발생한 오류이므로 configure 를 명시하면된다.

  • 지원하는 configuration 은 위에서 설명한것과 같이 iminfo 명령어를 이용하면된다.

지원하는 configuration 을 bootm 명령어에 다음과 같이 주면된다.

bootm $load_addr#<configuration>
  • 위의 예제와 같은경우 ... bootm $load_addr#ls1012aqds 을 설정하면 ls1012aqds 설정으로 부팅이된다.
  • 만약 Default Configuration 이 있는 경우 bootm $load_addr 만으로도 부팅이 된다. (아무런 configure 정보를 주지 않으면 default config 로 동작된다.)

...

반응형