Linux嵌入式驱动学习之路⑥u-boot启动内核

Posted 叶念西风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux嵌入式驱动学习之路⑥u-boot启动内核相关的知识,希望对你有一定的参考价值。

  内核启动是需要必要的启动参数。不能开机自动完全从0开始启动,需要uboot帮助内核实现重定位并提供参数。

   首先,uboo会从Kernel分区中读取bootcmd环境变量,根据环境变量可自动启动。

分区:

  每个硬盘上都有一个分区表。由于Flash中没有分区表,所以Flash的分区只能在源代码中定义,故无法更改。

mtdparts=nandflash0:[email protected]0(bootloader),128k(params),2m(kernel),-(root)

  注:@0 表示从0开始。  

  在启动之前,先从NandFlash中读出内核,放到内存中。而uImage = 头部+真正的内核。

  头(64字节):

    ih_load:加载地址,即内核运行是应该位于的地方。

    ih_ep: 入口地址,即内核的入口地址。

  这和uboot很相似。uboot的加载地址是TEXT_BASE,入口地址是start.S中的_start。

  bootm完成的工作:

    1.读取头部

    2. 根据头部信息移动内核

    2. 启动内核。

  在启动的时候,uboot需要告诉内核一些启动参数。即设置参数。

  跳转到内核的第一条代码。

  启动内核时,用头部的入口地址作为函数指针(thekernel),来启动。

 

  setup_start_tag()

  setup_memory_tag()

  setup_commandline_tag()

  setup_end_tag()

 

  

sd

 

以上是关于Linux嵌入式驱动学习之路⑥u-boot启动内核的主要内容,如果未能解决你的问题,请参考以下文章

Linux嵌入式驱动学习之路⑤u-boot启动流程分析

Linux嵌入式驱动学习之路⑦Linux内核启动流程

Linux嵌入式驱动学习之路④u-boot编译分析

Linux学习之路

[架构之路-35]:目标系统 - 系统软件 - Linux OS内核模块与内核设备驱动程序,一切皆文件,Linux虚拟文件系统与统一设备模型

Linux嵌入式驱动学习之路(十九)触摸屏驱动