• 嵌入式Linux驱动学习之路(六)u-boot启动内核


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

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

    分区:

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

    mtdparts=nandflash0:256k@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

  • 相关阅读:
    栈的经典运用-求值数学表达式
    java中Stack的源码解析
    java-背包的实现
    数据库的事务的特性及隔离级别
    EnumMap的用法和源码解析
    java final关键字的解析
    java中的static关键字解析
    XPath如何定位dom节点
    java 枚举(enum) 详细用法
    jdk动态代理
  • 原文地址:https://www.cnblogs.com/ynxf/p/5979027.html
Copyright © 2020-2023  润新知