目录
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语言的阶段,实现复杂的功能.
-
Bootloader第一阶段功能(汇编实现):完成一些依赖于CPU体系结构的初始化,并调用第二阶段代码
- 硬件初始化,比如关WATCHDOG,关中断,设置CPU速度和时钟频率(这个也可以在C阶段)
- 如果Bootloader需要在SDRAM中运行,则需要①sdram驱动②搬运代码到sdram
- 设置C函数调用、运算所需要的栈(Sp)
-
Bootloader第二阶段功能(C实现):完成更复杂功能,代码有更好的可读性和可移植性
- 初始化本阶段要使用到的硬件设备
- ==检测系统内存映射==,这里指的是确定板上使用了多少内存、它们的地址空间是什么,告诉内核
- 读取内核
- 读取根文件系统,有些格式的根文件系统不需要复制到RAM
- 为内核设置启动参数
- 调用内核
- uboot启动内核之前要满足以下条件:
- (一)CPU寄存器的设置
1,内核入口函数有三个参数,所以R0=0,R1=机器ID,R2=启动参数的内存地址
- (二)CPU工作模式
1,禁止中断(IRQs和FIQs)
2,CPU处于SVC模式
- (三)Cache和MMU的设置
1,MMU必须关闭
2,指令cache不相关
3,数据Cache关闭
内核启动参数 tagged list
内核是这么读取参数的:
- 先判断是什么类型的参数,长度为多少
- 将读取指定长度的内容识别为该格式的参数
所以很自然的,内存单元的参数就是
size
tag
data
体验一下实际的Uboot
- 解压官方源码,注意这里是
u-boot-1.1.6,不是u-boot-2012.04.01_100ask - 使用补丁包
- 配置并编译
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
- 烧录,
oflash到nandflash或者norflash - 备份下补丁文件(压缩文件包)
U-boot的使用帮助
- 使用命令
q退出菜单,命令menu进入菜单 - 使用
help查看所有命令 - 退出菜单后可以使用
?或者help+具体命令来查看帮助 - 使用
print或者printenv来查看环境变量,使用set命令来设置环境变量,比如使用倒计时时间set bootdelay 8,注意需要最后使用save来保存
U-boot基本要求
核心功能
- 需要有FLASH读取的能力,内核存储在FLASH
- 能够操作SDRAM,将读取到的内核加载到SDRAM
需要以下程序模块
- 关看门狗,关中断,初始化时钟,初始化sdram,设置栈等其他基本操作
- 支持串口方便调试
- 读写FLASH
- 读写SDRAM
- 其他模块,比如网卡,USB等,支持内核烧写
转载:https://www.cnblogs.com/zongzi10010/p/10023658.html#u-boot一启动简介