내 목표는 imx28 개발 보드를 기반으로 하는 wink 허브 1의 메모리에 사용자 정의 커널과 initramfs를 로드하고 u-boot 쉘에서 bootm 명령을 사용하여 부팅하는 것입니다.
그래서 u-boot 2014.01 소스 코드를 다운로드하고 제공된 패치를 사용하여 처음부터 빌드했습니다.여기그런 다음 최신 빌드 루트를 다운로드하고 imx28 보드용 커널, 루트 파일 시스템 및 initramfs를 빌드했습니다.
JTAG를 사용하면 로드할 수 있지만 u-boot at 0x40000100, kernel at 0x42000000
이 initramfs at 0x42300000
주소를 u-boot 쉘에 전달하고 bootm을 누르면 압축을 푼 후 커널이 멈추고 아무 일도 일어나지 않습니다...
커널에 문제가 있는게 아닌가 싶었는데, 커널 주소만 전달하고 커스텀 주소를 로드하지 않아도(즉, NAND 메모리에 있는 커널을 로드합니다)RAM에서는 커널이 여전히 정지되어 부팅할 수 없으며 명령으로만 작동합니다 boot (bootcmd)
.
이것은 메모리 주소에서 커널을 수동으로 로드하려고 할 때의 출력입니다. 압축을 푼 후에는 아무 일도 일어나지 않습니다.
=> bootm 42000000 42300000
## Booting kernel from Legacy Image at 42000000 ...
Image Name: Linux-2.6.35.3-flex-dvt
Created: 2014-04-30 3:15:35 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1928460 Bytes = 1.8 MiB
Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 42300000 ...
Image Name: Root Filesystem
Created: 2019-01-12 14:23:44 UTC
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 893637 Bytes = 872.7 KiB
Load Address: 40800000
Entry Point: 40800000
Verifying Checksum ... OK
Loading Kernel Image ... OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
그러나 u-boot 쉘에서는 boot
명령을 클릭하면 시작되고 모든 것이 잘 작동합니다.
내가 뭘 잘못하고 있는지 모르겠습니다. /include/configs/mx28evk.h
커널 uImage, initramfs 및 fdt 주소를 확인했는데 모든 것이 올바른 것 같습니다.
답변1
문제가 어디에 있는지 알아냈습니다.
낮은 수준의 디버깅을 활성화하고 모든 printk를 내장된 ICE UART 포트로 리디렉션하여 UART 콘솔에 출력이 표시되지 않도록 했습니다.
[ ] Kernel low-level debugging functions
[ ] Early printk (NEW)
[ ] Kernel low-level debugging via EmbeddedICE DCC channel (NEW)
위에서 언급했듯이 선택하지 않은 상태로 두십시오.
감사합니다, 아미트.