全志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文件分析的主要内容,如果未能解决你的问题,请参考以下文章

uboot以tag方式给内核传参

全志平台boot框架中增加设备驱动过程分析

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

通过uboot传参设置mtd分区流程源码分析