电子说
3 U-Boot开发
3.1 U-Boot源码说明
进入U-Boot源码目录,执行如下命令,查看U-Boot源码目录。
Host# ls -l
图 23
图 24

3.2配置U-Boot
U-Boot可使用menuconfig进行配置,请参考“配置内核选项”章节,配置menuconfconfig所需依赖环境。
在LinuxSDK源码目录下,执行如下命令先编译一次U-Boot,脚本会在U-Boot目录下执行"make rk3576_defconfig"生成.config文件。
Host# ./build.sh uboot
图 25
图 26
在LinuxSDK源码目录下,执行如下命令,进入"u-boot"目录,通过menuconfig配置U-Boot。
Host# cd u-boot/
Host# make menuconfig
图 27
图 28
在U-Boot目录下执行如下命令,更新defconfig文件。
Host# make savedefconfig
Host# mv defconfig configs/rk3576_defconfig
图 29
3.3编译U-Boot
在LinuxSDK源码目录下执行如下命令,配置编译选项,并单独编译U-Boot。
Host# ./build.sh uboot
图 30
图 31
备注:U-Boot编译会将"rkbin/bin/rk35/"目录下的bl31固件一起编译。具体U-Boot版本号与对应使用的bl31固件如下表所示。

3.4替换U-Boot镜像
3.4.1替换U-Boot SPL
我司已提供SPL镜像rk3576_idblock_v1.09.107.img和rk3576_spl_loader_v1.09.107.bin文件,位于产品资料“4-软件资料LinuxU-Bootimageu-boot-2017.09-[版本号]-[Git系列号]”目录下。
其中rk3576_idblock_v1.09.107.img文件可通过单板机系统固化至系统启动卡或eMMC,rk3576_spl_loader_v1.09.107.bin暂未提供固化方法。
请从eMMC启动系统,将SPL镜像rk3576_idblock_v1.09.107.img文件拷贝到单板机root目录下,执行如下命令固化至eMMC。
备注:如需固化至系统启动卡,请将设备节点修改为"/dev/mmcblk1"。
Target# dd if=rk3576_idblock_v1.09.107.img of=/dev/mmcblk0 seek=64 conv=fsync
Target# reboot
图 32
3.4.2替换U-Boot镜像
我司已提供U-Boot镜像uboot.img文件,位于产品资料“4-软件资料LinuxU-Bootimageu-boot-2017.09-[版本号]-[Git系列号]”目录下。
请从eMMC启动系统,请将U-Boot镜像uboot.img文件拷贝至单板机root目录下,执行如下命令将其固化至eMMC。
备注:如需固化至系统启动卡,请将设备节点修改为"/dev/mmcblk1p1"。
Target# dd if=uboot.img of=/dev/mmcblk0p1 conv=fsync
Target# reboot
图 33
3.5U-Boot使用说明
3.5.1 U-Boot命令行进入方式
单板机上电启动后,在U-Boot倒计时结束之前按下"Ctrl + C"进入U-Boot命令行模式。
U-Boot# help
图 34
图 35

3.5.2环境变量说明
(1)环境变量存储
执行命令"setenv"或"env default -f -a"修改的是运行空间中的环境变量值,须使用saveenv命令将修改后的环境变量保存起来。否则U-Boot重启后,将会使用修改前的环境变量值。环境变量修改完成后,执行reset命令,即可使用修改后的U-Boot环境变量启动。
U-Boot# env default -f -a
U-Boot# saveenv
U-Boot# reset
图 36
(2)默认配置信息
在U-Boot命令行执行printenv命令可查看环境变量,如下提供主要U-Boot环境变量的解析说明。不同版本的U-Boot,环境变量可能会有所不同,内容仅供参考。
/*调试串口波特率为115200bps*/
baudrate=115200
/*系统启动时,将会先设置启动方式*/
bootcmd=boot_android ${devtype} ${devnum};boot_fit;bootrkp;run distro_bootcmd;
/*设置启动方式为linux启动*/
distro_bootcmd=setenv scsi_need_init; for target in ${boot_targets}; do run bootcmd_${target}; done
/*单板机名字为evb_rk3576*/
board_name=evb_rk3576
/*启动延时为0秒*/
bootdelay=0
/*读取设备树文件至DDR地址0x48300000*/
fdt_addr_r=0x48300000
/*读取内核镜像至DDR地址0x40400000*/
kernel_addr_r=0x40400000
/*mmc启动命令。配置mmc启动参数*/
mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
/*USB启动命令。配置USB启动参数*/
usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi
(3)环境变量修改
本次修改以修改启动延时为1秒为例。
U-Boot# setenv bootdelay 1
图 37
3.5.3 Kernel参数传递
通过U-Boot命令行使用printenv命令看到Kernel参数。
图 38
亦可观察内核启动阶段的Kernel参数。
图 39
(1)root参数
指定根文件系统位置,如"root=/dev/mmcblk0p6"表示根文件系统位于eMMC中的mmcblk0p6分区。
(2)console参数
指定内核启动时的控制台设备,如"console=ttyFIQ0"表示使用串口FIQ0作为控制台。
由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注Tronlong创龙科技微信公众号或官网,或者评论区留言,感谢您的支持!
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !