zoukankan      html  css  js  c++  java
  • u-boot(一)启动简介


    title: u-boot(一)启动简介
    tags: linux
    date: 2018-09-21 19:56:05

    u-boot(一)启动简介

    启动概述

    U-boot的终极目的,是从FLASH中读出内核,加载到SDRAM中

    系统
    Win BIOS 引导win 识别C盘等 运行应用程序
    Linux Bootloader 引导启动linux内核 挂载根文件系统 运行应用程序

    阶段一引导

    这里包含芯片自身的引导,BIOS固件的引导,以及bootloader的引导,jz2440这里首先可能有4ksram的搬运,然后执行sram的程序,或者直接是Bootloader.所以Bootloader目的就是加载内核,传递内核参数

    阶段二Linux内核

    内核的启动参数分为固定参数和Bootloader传递参数.

    阶段三文件系统

    应用程序都是存放在文件系统上的,不像win的C盘D盘,linux的目录结构就是一个树形,树形的顶部也就是/,这个称之为根文件系统,根文件系统有一些特殊的含义,比如shell命令等都是在根文件系统中存放的.

    文件系统包含了应用程序,以及库,和动态链接需要的glibc或者Uclibc等.

    阶段四应用程序

    跑到这里,就是我们自己的应用程序执行的时候了.

    内部存储布局

    常见的内部空间布局如下:

    Bootloader Boot parameters Kernel Root filesystem
    u-boot,它会在内存的某个地方存放着内核启动的一些参数,也称为tag u-boot 参数,包含传递给内核的一些东西 内核 根文件系统

    Bootloader概述

    一般情况下,Bootloader分为两个阶段,第一个阶段为汇编阶段,我理解为为C语言提供环境.第二个阶段就是C语言的阶段,实现复杂的功能.

    • 汇编阶段
      • 硬件初始化,比如关看门狗,设置时钟(这个也可以在C阶段)
      • 如果Bootloader需要在SDRAM中运行,则需要①sdram驱动②搬运代码到sdram
      • 设置C函数调用、运算所需要的栈(Sp)
    • C阶段
      • 初始化硬件设备
      • 内存映射,这里指的是检测内存有多大,告诉内核
      • 读取内核
      • 读取根文件系统,有些格式的根文件系统不需要复制到RAM
      • 设置启动参数,启动内核
    • 内核启动须知
      • 内核入口函数有三个参数,所以R0=0,R1=机器ID,R2=启动参数的内存地址
      • CPU处于SVC模式,禁止中断
      • Cache和MMU
        • MMU必须关闭
        • 指令cache不相关
        • 数据Cache关闭

    内核启动参数 taggedlist

    内核是这么读取参数的:

    1. 先判断是什么类型的参数,长度为多少
    2. 将读取指定长度的内容识别为该格式的参数

    所以很自然的,内存单元的参数就是

    size
    tag
    data
    

    体验一下实际的Uboot

    1. 解压官方源码,注意这里是u-boot-1.1.6,不是u-boot-2012.04.01_100ask
    2. 使用补丁包
    3. 配置并编译
    tar xjf u-boot-1.1.6.tar.bz2 
    cd u-boot-1.1.6/
    patch -p1 <../u-boot-1.1.6_jz2440.patch #p1表示忽略应用位置第一个父目录,具体参考diff补丁格式
    make 100ask24x0_config
    make
    
    1. 烧录,oflash到nandflash或者norflash

    2. 备份下补丁文件(压缩文件包)

    U-boot的使用帮助

    1. 使用命令q退出菜单,命令menu进入菜单

    2. 使用help查看所有命令

    3. 退出菜单后可以使用或者help+具体命令来查看帮助

    4. 使用print或者printenv来查看环境变量,使用set命令来设置环境变量,比如使用倒计时时间 set bootdelay 8,注意需要最后使用save来保存

    U-boot基本要求

    核心功能

    1. 需要有FLASH读取的能力,内核存储在FLASH
    2. 能够操作SDRAM,将读取到的内核加载到SDRAM

    需要以下程序模块

    1. 初始化时钟,看门狗等其他基本操作
    2. 支持串口方便调试
    3. 读写FLASH
    4. 读写SDRAM
    5. 其他模块,比如网卡,USB等,支持内核烧写
  • 相关阅读:
    2020.12.7
    IDEA修改代码后不用重新启动项目即可刷新
    期中测试人口普查登记题目
    Android去掉标题头
    Android限制输入框内容
    Android:setOnItemClickListener cannot be used with a spinner报错
    Android修改app图标
    将外部sqlite3数据库导入到Android项目中
    IDEA个人常用快捷键
    css选择器
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/10023658.html
Copyright © 2011-2022 走看看