zoukankan      html  css  js  c++  java
  • 嵌入式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基本元素
    wsgiref模块
    Web框架与HTTP协议
    pymysql 于pycharm中操作mysql
    mysql
    协程
    jQuery选择器
    网络编程→锁/队列/线程
    初识网络编程&并发编程
    navcat 如何将一个库的表抽到另一个库中
  • 原文地址:https://www.cnblogs.com/ynxf/p/5979027.html
Copyright © 2011-2022 走看看