我的目标是将自定义内核和 initramfs 加载到基于 imx28 开发板的 wink hub 1 的内存中,并使用 u-boot shell 中的 bootm 命令启动它。
因此,我下载了 u-boot 2014.01 源代码并使用提供的补丁从头开始构建它这里然后我下载了最新的 buildroot 并为 imx28 板构建了内核和根文件系统以及 initramfs。
使用 JTAG 我可以加载,u-boot at 0x40000100, kernel at 0x42000000
但是initramfs at 0x42300000
当我将这些地址传递到 u-boot shell 并点击 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 shell 上,点击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)
如上所述,保持其未选中状态。
问候,阿米特。