setenv aaa 123 // 添加
setenv aaa 456 // 修改
setenv aaa // 删除
md.b [address] // 按字节显示
md.w [address] // 按半直显示
md.l [address] // 按字显示
简单地说, bootloader就是操作系统内核运行之前运行的一段小程序. 通过这段小程序, 我们可以初始化硬件设备, 建立内存空间的映射图, 从而将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核准备好正确环境.
bootloader的主要运行任务就是将内核映像从硬盘上读到RAM中, 然后跳转到内核的入口点去运行, 也即开始启动操作系统.
通常, bootloader是严重低依赖于硬件而实现的, 特别是在嵌入式世界. 因此, 在嵌入式世界建立一个通用的bootloader几乎是不可能的.
系统加电或复位后, 所有CPU通常都从某个由CPU制造商预先安排的地址上取指令. 比如, 基于ARM7TDMI core的CPU在复位时通常都从地址0x00000000取它的第一条指令.
一个同时装有bootloader, 内核的启动参数, 内核映像和根文件系统映像的固态存储设备的典型空间分配结构图:
bootloader + boot parameters + kernel + root filesystem
bootloader的启动过程可分为单阶段(Single Stage)和多阶段(Multi-Stage)两种.
通常多阶段的bootloader能提供更为复杂的功能, 以及更好的可移植性. 从固态存储设备上启动的bootloader大多都是2阶段的启动过程, 也即启动过程可以分为stage 1和stage 2两个部分.
stage 1完成初始化硬件, 为stage 2准备内存空间, 将stage2复制到内存中, 设置堆栈然后跳转到stage 2.