uboot启动Linux内核卡住
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与内核镜像使用同一交叉编译器。解决原理请求各位大佬告知一下
参考
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)