Linux驱动开发 uboot如何启动内核_uboot启动内核(1)

1.uboot和内核到底是什么:

(1)uboot和内核本质是一个裸机程序,只是比我们平常看到的裸机像STM32之类的裸机大了很多,uboot和内核的裸机程序有很多个文件夹。

(2)部署在SD卡中特定分区内,静止时(未上电时)bootloader、kernel、rootfs等必须的软件都以镜像的形式存储在启动介质中(X210中是iNand/SD卡);运行时都是在DDR内存中运行的。

(3)**运行时必须先加载到DDR中链接地址处,**uboot(X210加载到DDR的0xc3e00000地址处),

内核(X210链接地址是0x30008000),其他类型的链接地址不一样。

(4)内核启动需要必要的启动参数,内核是不能开机自动完全从零开始启动的,内核启动要uboot帮忙。uboot要帮助内核实现重定位(从SD卡到DDR),uboot还要给内核提供启动参数

2.启动内核第一步:加载内核到DDR中

(1)uboot要启动内核,分为2个步骤:第一步是将内核镜像从启动介质中加载到DDR中,第二步是去DDR中启动内核镜像,boot只需要从SD卡的kernel分区去读取内核镜像到DDR中即可。

3.启动内核第二步:校验内核格式(zImage格式,uImage格式)

(1)bootm命令对应do_bootm函数,在cmd_bootm.c文件中。

do_bootm刚开始定义了一些变量,进行了一些一些细节部分操作,不管细节操作。然后到了CONFIG_ZIMAGE_BOOT,用这个宏来控制进行条件编译一段代码,这段代码是用来支持zImage格式的内核启动的。

(2)zImage启动:
do_bootm函数中一直到397行的after_header_check这个符号处,都是在进行镜像的头部信息校验。校验时就要根据不同种类的image类型进行不同的校验。校验通过则进入下一步准备启动内核;如果校验失败则认为镜像有问题,所以不能启动

LINUX_ZIMAGE_MAGIC:等于0x016f2818,表示这个镜像是一个zImage,也就是说zImage格式的镜像中在头部的一个固定位置存放了这个数作为格式标记

zImage头部开始的第37-40字节处存放着zImage标志数,从这个位置取出然后对比LINUX_ZIMAGE_MAGIC。

**image_header_t的zImage头信息,**zImage的校验过程其实就是先确认是不是zImage,确认后再修改zImage的头信息到合适,修改后用头信息去初始化images这个全局变量,然后就完成了校验。

(3)uImage启动:

在do_bootm函数中,这种方式指的就是uImage的方式

IMAGE_FORMAT_INVALID:镜像格式不合法, IMAGE_FORMAT_LEGACY:uImage格式。

IMAGE_FORMAT_FIT:设备树格式。

uImage的启动校验主要在boot_get_kernel函数中

这里是通过魔数码判断uImage镜像格式,并打印信息
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

style=“zoom: 67%;” />

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值