Bootloader是硬件启动的引导程序,是启动操作系统的根本;是在操作系统内核或用户应用程序运行之前运行的一段小程序。
1. Bootloader基本功能
Bootloader不属于操作系统内核,采用汇编语言编写,因此针对不同的CPU体系结构,这一部分代码不具有可移植性;Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
启动加载模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
下载模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被 Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。
Bootloader基本功能:初始化硬件;将操作系统内核从Flash拷贝到SDRAM中,如果是压缩格式的内核,还要解压缩; 改写系统的内存映射,原先Flash起始地址映射为0地址,这时需要将RAM的起始地址映射为0; 提供Linux内核的启动参数; 启动Linux内核; 设置堆栈指针并将bss段清零将来执行C语言程序和调用子函数时要用到; 改变pc值,使得CPU开始执行真正的操作系统内核。
Bootloader启动:系统加电或复位后,所有CPU都会从某个地址开始执行;嵌入式系统的开发板都要把板上ROM或FLASH映射到这个地址。
2. 操作步骤:
-
解压:
tar -zxvf uboot-ebf_v2020_10_imx.tar.gz -C ../
2. 配置uboot:~/stp $ vim arm.sh
3.编译脚本:source arm.sh
4. 安装:sudo apt install flex bison
5. 添加变量:~/stp/uboot-ebf_v2020_10_imx $ echo $CROSS_COMPILE
6. 清除配置文件:~/stp/uboot-ebf_v2020_10_imx $ make distclean
7. 配置make选项: ~/stp/uboot-ebf_v2020_10_imx $ make mx6ull_fire_mmc_defconfig
8. 生成Uboot镜像:make -j4
(4线程)
11. 创建一个out文件夹用于存放,复制imx文档:~/stp/uboot-ebf_v2020_10_imx $cp u-boot-dtb.imx ../out/
12. 查看TF卡名字,清空SD卡前40M:sudo dd iflag=dsync oflag=dsync if=/dev/zero of=/dev/sda bs=512 count=8192
13.烧写imx文件:sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb seek=2
14.配置树莓派5另一个IP地址或者写成sh文件:~/stp $ vim net.sh
#!/bin/sh
sudo ifconfig eth0 xxx.xxx.xx.xx
15. 提高权限:chmod +x net.sh
16.执行:./net.sh
17.安装服务:sudo apt install tftpd-hpa
18.配置服务:sudo vim /etc/default/tftpd-hpa
TFTP USERNAME="tftp'
TFTP ADDRESS=":69"
TFTPDIRECTORY="/home/11/stp/out" //存放 u-boot-dtb.imx 的绝对路径
TFTP OPTIONS="--secure
19. 启动服务:sudo service tftpd-hpa restart
20.验证