全志H3 uboot传参到内核分析,boot.scr文件分析
Posted 【ql君】qlexcel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全志H3 uboot传参到内核分析,boot.scr文件分析相关的知识,希望对你有一定的参考价值。
传参过程
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文件分析的主要内容,如果未能解决你的问题,请参考以下文章
全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩
全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩