指点成金-最美分享吧

登录

全志H3 uboot传参到内核分析,boot.scr文件分析

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了全志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 0x44000000setenv fix_addr 0x44500000fatload mmc 0 $load_addr uEnv.txt          # 从MMC 0读取uEnv.txt到0x44000000env import -t $load_addr $filesize       # 从uEnv.txt中引入环境变量fatload mmc 0 $kernel_addr $kernel       # 从MMC 0读取zImage文件到0x46000000fatload mmc 0 $ramdisk_addr $ramdisk     # 从MMC 0读取rootfs.cpio.gz文件到0x47000000setenv ramdisk_size $filesizefatload mmc 0 $dtb_addr sun8i-$cpu-$board.dtb  # 从MMC 0读取设备树文件文件到0x48000000fdt addr $dtb_addr                                 # 指定设备树在内存中的地址# merge overlayfdt resize 65536                                     # Resize fdt to size + padding to 4k addroverlay 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    fidonefatload mmc 0 $fix_addr overlays/sun8i-h3-fixup.scrsource $fix_addr# setup XR819 MAC addressif test $board = nanopi-duo; then fdt set xr819 local-mac-address $wifi_mac_node; fi# setup boot_devicefdt 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@60setenv pmdown snd-soc-core.pmdown_time=3600000setenv bootargs "console=$debug_port earlyprintkroot=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=$fsck.repairpanic=10 fbcon=$fbcon $hdmi_res $overlayfs $pmdown"bootz $kernel_addr $ramdisk_addr:$ramdisk_size $dtb_addr

uEnv.txt文件内容

################################################################## General options#################################################################ramdisk=rootfs.cpio.gzkernel=zImagefix_addr 0x44500000kernel_addr=0x46000000ramdisk_addr=0x47000000dtb_addr=0x48000000debug_port=ttyS0,115200fsck.repair=yes# 0 = /dev/fb0, First framebuffer# 1 = /dev/fb1, Second framebuffer# README: linux/Documentation/fb/fbcon.txtfbcon=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文件分析的主要内容,如果未能解决你的问题,请参考以下文章