转载:https://blog.csdn.net/Set_Mode/article/details/91049861
目录
Bootloader 介绍
什么是Bootloader
Bootloader的特点
Bootloader的操作模式
常用bootloader介绍
U-boot介绍
U-boot的特点:
U-boot命令介绍
printenv 显示所有环境变量
setenv 设置新的环境变量
saveenv 将当前定义的所有的环境变量值存入flash中
tftp 通过网络下载程序
protect 对Nor Flash写保护
erase 擦除Nor FLASH
Nand相关命令
movi 命令
bootcmd 自启动命令
bootm kernel-addr ramdisk-addr dtb-addr
go addr 执行内存中的二进制代码,简单的跳转到指定地址(运行裸机程序)
U-BOOT 配置编译
U-Boot目录结构
编译U-boot
使用build.sh编译
查看build.sh
U-BOOT编译生成的映像文件
U-boot镜像下载烧录
u-boot-fs4412.bin
u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。
从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;
当前版本号:参考Makefile。
http://www.denx.de/wiki/U-Boot/WebHome
代码结构清晰、易于移植(见目录结构)
支持多种处理器体系结构(见arch目录)
支持众多开发板(目前官方包中有200多种,见board目录)
命令丰富、有监控功能
支持网络协议、USB、SD等多种协议和设备
支持文件系统
更新较活跃,使用者多,有助于解决问题
命令分类
环境设置、数据传输、存储器访问、加载运行
ORIGEN # pri
ORIGEN # set myboard FS4412
ORIGEN # pri
U-boot # setenv ethaddr 11:22:33:44:55:66 //设置开发板的物理地址
U-boot # setenv ipaddr 192.168.2.10
U-boot # setenv serverip 192.168.2.231
U-boot # tftp 41000000 application.bin
U-boot # tftp 41000000 zImage
protect on 0 10000 对区间[0x0, 0x10000]进行写保护
protect off 0 10000 对上述区间取消写保护
erase all 擦除FLASH所有的扇区
erase 0 10000 把FLASH区间 [0x0, 0x10000]擦除
nand read addr off size
nand write addr off size
nand erase [clean] [off size]
NAND flash和NOR flash的区别详解 https://zhidao.baidu.com/question/1993729068599410707.html
NAND flash按块访问和NOR flash按字节访问
NAND flash必须先擦出后写
movi init —初始化eMMC并显示相关信息
movi read u-boot/kernel addr //读u-boot或读kernel,可以选择
movi write u-boot/kernel addr
movi read rootfs addr size
movi write rootfs addr size
如果定义了该变量,在自启动模式下将会执行该环境变量中的命令。
将文件通过tftp自动下载到指定的地址
U-boot # setenv bootcmd tftp 41000000 uImage; bootm 41000000
U-boot # saveenv
bootargs 是uboot传递给内核到启动参数,是一个字符串
console=xxx: 告诉内核启动时候到调试信息是从哪个设备输出,这里是串口2
init=xxx: 告诉内核linux到第一个用户进程是什么
root=xxx : 告诉内核根文件系统在哪里
root=/dev/nfs 表示根文件系统在网路远端
nfsroot=(开发板)ip:path rw 其中rw表示可读可写
ip=xxx :(Ubuntu ip)告诉内核开机的时候内核的ip地址是多少(静态分配ip)
引导内核为内核传参,其中内核和ramdisk通常为mkimage处理过的二进制文件。
从这个地址处自动启动程序
arch, board, include…
common, net, fs, drivers…
tools, doc
整个工程通过Makefile来组织编译。顶层目录下的Makefile中包含了开发板的配置信息。从顶层目录开始递归地调用各级子目录下的Makefile,最后链接成u-boot映像。
它负责u-boot整体配置和编译
在Makefile中指定使用的交叉工具链
配置u-boot: make origen_config
编译: make
linux@linux:~/u-boot-2013.01-fs4412$ ./build.sh
#!/bin/sh
sec_path="CodeSign4SecureBoot/"
CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
ROOT_DIR=$(pwd)
CUR_DIR=${ROOT_DIR##*/}
case "$1" in
clean)
echo make clean
make mrproper
;;
*)
if [ ! -d $sec_path ]
then
echo "**********************************************"
echo "[ERR]please get the CodeSign4SecureBoot first"
echo "**********************************************"
return
fi
make fs4412_config
make -j$CPU_JOB_NUM
if [ ! -f checksum_bl2_14k.bin ]
then
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "There are some error(s) while building uboot, please use command make to check."
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
exit 0
fi
cp -rf checksum_bl2_14k.bin $sec_path
cp -rf u-boot.bin $sec_path
rm checksum_bl2_14k.bin
cd $sec_path
cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-fs4412.bin
mv u-boot-fs4412.bin $ROOT_DIR
rm checksum_bl2_14k.bin
rm u-boot.bin
echo
echo
;;
esac
烧录编译产生的镜像 u-boot.bin
初次或开发板代码损坏不能正常启动时,可采用JTAG工具烧录
专用的烧录工具如h-jtag或DNW等
在u-boot已经能工作,升级或修正U-boot时,可用U-boot中的命令来烧录
其它方式 如SD卡 , Fastboot命令
镜像固化位置
ROM、NOR FLASH、NAND FLASH EMMC等