uboot启动Linux内核uImage卡在Starting kernel ...这一步
由于出现这种情况的原因有很多,暂时列举几种
一、内核镜像uImage的加载地址和入口地址不一致
查看uImage的信息
mkimage -l arch/arm/boot/uImage
可以看见加载地址与入口地址为0xc2000040。由于uImage在头部添加了64个字节的识别信息,那么
加载地址是uboot在加载内核时的存放地址,入口地址是内核代码的开始执行地址。在使用前面的uboot加载uImage时,把uImage加载到加载地址(0xc2000040)处,然后就在入口地址(0xc2000040)处开始执行,而实际的代码执行地址是0xc2000080(入口地址+文件头长度)。所以无法启动uImage.
所以在uboot启动阶段使用如下代码可以启动
tftp c2000000 uImage
bootm
二、串口终端设置错误
找到自己开发板的串口终端,在bootargs里面修改。如正点原子stm32mp157开发板的串行终端为ttySTM0,加上使用nfs挂载根文件系统则
setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.1.208:/home/lemonhack/study/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.250:192.168.1.208:192.168.1.1:255.255.255.0::eth0:off'
三、编译uboot使用的交叉编译器与编译linux内核的交叉编译器不同
这是我写这篇文章遇到的问题
我使用的是正点原子的stm32mp157开发板,uboot使用的是正点原子已经编译好的uboot,根据视频教程,编译uboot使用的是arm-none-linux-gnueabihf-这一个交叉编译器。而内核镜像我是自己编译的,使用的是arm-linux-gnueabihf-这一个交叉编译器,所以uboot启动的时候卡在Starting kernel ...这一步。
解决方法就是uboot与内核镜像使用同一交叉编译器。解决原理请求各位大佬告知一下
参考
uboot无法引导uImage错误及其解决方法 - qiaoqiao2003 - 博客园 (cnblogs.com)文章来源:https://www.toymoban.com/news/detail-644786.html
(1条消息) Exynos4412 移植Linux Kernel 5.15过程记录(二)——解决U-Boot启动内核卡在Starting kernel的问题,DM9000网卡驱动(设备树)_dm9000设备树_HelloTonyGo的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-644786.html
到了这里,关于uboot启动Linux内核卡住的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!