ITPub博客

首页 > Linux操作系统 > Linux操作系统 > uboot如何启动内核

uboot如何启动内核

Linux操作系统 作者:大雄45 时间:2020-08-08 20:10:11 0 删除 编辑
导读 ARM设备如何通过uboot启动 Linux内核
uboot和内核就是一个裸机程序

(1)uboot的本质就是就是一个复杂点的裸机程序,和ARM部分写的裸机程序没有本质区别。

(2)内核本身也是一个裸机程序,和uboot、裸机程序无本质区别。要说不同的地方,那就是内核运行起来后,在软件上分为内核层和应用层,分层后两层的权限不同,内存访问和设备操作的管理上更加精细(内核可以随便访问各种硬件,而应用程序只能被限制地访问硬件和内存地址)。

(3)直观上来看,uboot的镜像是u-boot.bin, linux系统的镜像是zImage,这两个东西其实都是两个裸机程序镜像。从系统的启动角度来讲,内核其实就是一个大的复杂点的裸机程序。
uboot如何启动内核uboot如何启动内核

部署在SD卡特定分区内

(1)一个完整的软件+硬件的嵌入式系统,静止时(未上电时)bootloader、kernel、rootfs等必须的软件都以镜像的形式存储在启动介质中(x210中是iNand/SD卡),运行时都是在DDR内存中运行的,与存储介质无关。上面两个状态都是稳定状态,第三个状态是动态过程,即从静止态到运行态的过程,也就是启动过程。

(2)动态启动过程就是一个从SD卡逐步搬移到DDR内存,并且运行启动代码进行相关的硬件初始化和软件架构的建立,最终达到运行时稳定状态。

(3)静止时,u-boot.bin、kernel、rootfs都在SD卡中,它们不可能随意存在SD卡的任意位置,因此需要对SD卡进行一个分区,然后将各种镜像存在不同的分区,这样在启动过程中uboot、内核就知道到哪里去找。(uboot和kernel中的分区表必须一致,同时和SD卡的实际使用分区也要一致)

运行时必须先加载到DDR中链接地址处

(1)uboot在第一阶段中进行重定位时将第二阶段(整个uboot)加载到DDR的0xC3E00000地址处,这个地址就是uboot的链接地址。

(2)内核也有类似要求,uboot启动内核时,将内核从SD卡读取放到DDR中(其实就是个重定位的过程),不能随意放置,必须放在内核的链接地址处,否则启动不起来。例如在x210中使用的内核链接地址是0x30008000。

内核启动需要必要的参数

(1)uboot是无条件启动的,从零开始启动的。

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

本文原创地址: https://www.linuxprobe.com/uboot-image.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69955379/viewspace-2710258/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-11

  • 博文量
    542
  • 访问量
    249371