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

  • 相关阅读:
    第三方登录(QQ登录)开发流程详解
    网页优化方案
    linux中PHP链接MySQL主机127.0.0.1与localhost
    RSync实现文件备份同步
    网站攻击以及解决方案
    迎难而上,QPS提高22+倍
    新的一扇窗
    边缘计算开源平台
    高并发分布式计算-生产实践
    分布式UUID的生成
  • 原文地址:https://www.cnblogs.com/ynxf/p/5979027.html
Copyright © 2011-2022 走看看