1、boot loader的介绍
操作系统的启动,首先我们要知道,操作系统在开发板上电之后是存在存储器里面的EMMC/SD卡,而操作系统是跑在内存中的,这时我们需要一个东西,将我们的操作系统搬运到内存中,这个东西就是boot loader,它又叫做系统的引导程序。
2、uboot和bootloader的关系
bootloader仅仅是引导程序的一段核心的代码
uboot就是bootloader的一个发行版
类似与linux和ubuntu的关系一样
https://u-boot.readthedocs.io/en/latest/(自行了解)
3、uboot的重要文件夹
fs:uboot支持的文件系统
include:编译需要的头文件
arch:支持的架构 ----芯片架构相关的代码
board:板级资源 ----开发板资源相关的代码
driver:驱动相关的文件夹
sd_fuse:工具相关的文件夹
4、uboot的编译和烧写
1)编译的步骤:
1:将压缩包放入虚拟机
2:在虚拟机里解压压缩包(路径自定义--建议不要有中文路径)
tar xvf uboot_tiny4412-sdk1506.tar.bz2
3:跳转到解压后的目录
执行清理动作
make clean:
清理编译之后产生的东西,并不会清理配置文件
make distclean:
将所有的东西 包括配置文件都清理,恢复出厂设置
4:做开发板的选型
make Tiny4412_config
5: 编译uboot
make
2)uboot的烧录
1:生成bl2的程序
在sd_fuse文件夹里执行
./mkbl2 u-boot.bin bl2.bin 14336
2:烧录BL2(BL1已经烧录过了)
sudo dd iflag=dsync oflag=dsync if=./bl2.bin of=/dev/sdb seek=17
3:烧录uboot
sudo dd iflag=dsync oflag=dsync if=./u-boot.bin of=/dev/sdb seek=49
4:烧录向量表
sudo dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=/dev/sdb seek=705
5、 uboot的命令
- uboot环境变量:
- printenv、print、pri打印全部变量
- set、setenv:新增、修改、删除环境变量
- 新增#set 环境变量名 环境变量值
- 删除#set 环境变量
- 修改#set 环境变量名 新的环境变量
- save 保存环境变量(如果不保存重启后无效)
- reset 重启
- 常用命令:
- version --查看版本
- ?或者help 打印支持所有的命令
- ?XXX命令 --打印XXX命令的使用规则
- ping --测试网络连通性
- loady 使用串口下载代码到内存 loady 0x02023400/go 地址
- md 查看内存数据md.b/w/l 分别代表字节/字/四字节
- bdinfo 查看配置信息
- fatinfo 查看指定设备fat的分区信息
- fatinfo <interface> <dev[:part]>
- interface --mmc(MMC或SD,emmc,usb)
- dev :设备编号
- 设备分区号,可选
- fatinfo <interface> <dev[:part]>
- fatload:(重点)
- 从启动介质里下载内容到内存列
- fatload mmc [存储介质的标号]:[存储介质的分区号] [内存里的地址] [要下载的文件] [要下载文件的大小]
- fatload mmc 0:1 0x02023450 images/FriendlyARM.ini 3072
10.read :从存储介质读取一段代码到内存里
movi read kernel 0 40008000
他的意思就是从0号存储介质(sd卡)读取内核到内存里的 0x40008000位置