概述
传参过程
uboot倒计时结束,默认以bootcmd
来启动内核,它等于
fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr}
上面两个语句的含义是:从mmc 0设备的第一个分区加载boot.scr文件到scriptaddr地址,然后执行boot.scr脚本。
查看mmc 0:1中的文件,的确有boot.scr:
在uboot源码中搜索scriptaddr,发现它定义在include/configs/sunxi-common.h
它的值为43100000,和uboot启动信息对应上了:
boot.scr脚本内容如下:
# Recompile with: mkimage -C none -A arm -T script -d boot.cmd boot.scr
# CPU=H3
# OS=friendlycore/ubuntu-oled/ubuntu-wifiap/openwrt/debian/debian-nas...
echo "running boot.scr"
setenv load_addr 0x44000000
setenv fix_addr 0x44500000
fatload mmc 0 ${load_addr} uEnv.txt # 从MMC 0读取uEnv.txt到0x44000000
env import -t ${load_addr} ${filesize} # 从uEnv.txt中引入环境变量
fatload mmc 0 ${kernel_addr} ${kernel} # 从MMC 0读取zImage文件到0x46000000
fatload mmc 0 ${ramdisk_addr} ${ramdisk} # 从MMC 0读取rootfs.cpio.gz文件到0x47000000
setenv ramdisk_size ${filesize}
fatload mmc 0 ${dtb_addr} sun8i-${cpu}-${board}.dtb # 从MMC 0读取设备树文件文件到0x48000000
fdt addr ${dtb_addr} # 指定设备树在内存中的地址
# merge overlay
fdt resize 65536 # Resize fdt to size + padding to 4k addr
overlay search # overlay 文件系统
for i in ${overlays}; do
if fatload mmc 0 ${load_addr} overlays/sun8i-h3-${i}.dtbo; then
echo "applying overlay ${i}..."
fdt apply ${load_addr}
fi
done
fatload mmc 0 ${fix_addr} overlays/sun8i-h3-fixup.scr
source ${fix_addr}
# setup XR819 MAC address
if test $board = nanopi-duo; then fdt set xr819 local-mac-address ${wifi_mac_node}; fi
# setup boot_device
fdt set mmc${boot_mmc} boot_device <1>
setenv overlayfs data=/dev/mmcblk0p3
#setenv hdmi_res drm_kms_helper.edid_firmware=HDMI-A-1:edid/1280x720.bin video=HDMI-A-1:1280x720@60
setenv pmdown snd-soc-core.pmdown_time=3600000
setenv bootargs "console=${debug_port} earlyprintk
root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=${fsck.repair}
panic=10 fbcon=${fbcon} ${hdmi_res} ${overlayfs} ${pmdown}"
bootz ${kernel_addr} ${ramdisk_addr}:${ramdisk_size} ${dtb_addr}
uEnv.txt文件内容
#################################################################
# General options
#################################################################
ramdisk=rootfs.cpio.gz
kernel=zImage
fix_addr 0x44500000
kernel_addr=0x46000000
ramdisk_addr=0x47000000
dtb_addr=0x48000000
debug_port=ttyS0,115200
fsck.repair=yes
# 0 = /dev/fb0, First framebuffer
# 1 = /dev/fb1, Second framebuffer
# README: linux/Documentation/fb/fbcon.txt
fbcon=map:0
#################################################################
# Overlay options
# README: /overlays/README.txt
#################################################################
#uart0/enable=no
#uart1/enable=no
#uart2/enable=no
#uart3/enable=no
#i2c0/enable=no
#i2c1/enable=no
#i2c2/enable=no
#spi0/enable=no
#pwm0/enable=no
#ir/enable=no
#tft28/enable=no
#tft28/speed=50000000
#tft28/rotate=90
#tft28/fps=33
#tft28/debug=0x0
#tft13/enable=no
#tft13/speed=50000000
#tft13/rotate=0
#tft13/fps=0x0
#tft13/debug=0x0
从上面的分析可以看出内核、设备树的地址都是在uEnv.txt文件中定义的,如果需要修改,修改这个文件就可以了。
同时可以知道设备树的名字是 sun8i-${cpu}-${board}.dtb
,
生成boot.scr
boot.scr是由boot.cmd使用mkimage工具生成的。
mkimage工具在uboot/tools文件夹下
boot.scr放在TF卡第一分区。
其他的参考
全志v3s学习笔记(4)——u-boot传参(boot.scr)和参数配置(script.bin)文件
制作uboot 能执行的脚本
等后续用到再来仔细研究。
最后
以上就是高挑墨镜为你收集整理的全志H3 uboot传参到内核分析,boot.scr文件分析传参过程生成boot.scr的全部内容,希望文章能够帮你解决全志H3 uboot传参到内核分析,boot.scr文件分析传参过程生成boot.scr所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复