1、U-Boot启动参数解析:
进入U-Boot命令行使用printenv命令可以看到U-Boot启动参数,如使用默认参数,类似如下:
默认的U-boot启动参数设置的启动顺序为:
(1) SD卡启动脚本
(2) SD卡
(3) EMMC
若检测到 SD 卡已插入,则加载 SD 卡 boot 分区中的 zImage 内核镜像和 rootfs
分区文件系统。
若没有检测到 SD 卡插入,从EMMC启动系统。
以下为U-Boot启动参数解析:
/芯片类型为arm/
arch=arm
/mmc启动参数/
args_mmc=run finduuid;setenv bootargs console= console {optargs} root=PARTUUID= uuidrwrootfstype= {mmcrootfstype}
/串口波特率为115200/
baudrate=115200
/板卡类型属于AM335x系列/
board=am335x
/板卡具体类型为A335_ICE/
board_name=A335_ICE
/* 被下面的scan_dev_for_scripts所执行 启动script */
boot_a_script=load devtype {devnum}: distrobootpart {scriptaddr} prefix {script}; source ${scriptaddr}
/* 被下面的scan_dev_for_efi所执行 启动efi */
boot_efi_binary=load devtype {devnum}: distrobootpart {kernel_addr_r} efi/boot/bootarm.efi; if fdt addr fdtaddrr;thenbootefi {kernel_addr_r} fdtaddrr;elsebootefi {kernel_addr_r} ${fdtcontroladdr};fi
/* 被下面的scan_dev_for_extlinux所执行 启动extlinux */
boot_extlinux=sysboot devtype {devnum}: distrobootpartany {scriptaddr} ${prefix}extlinux/extlinux.conf
/* fdt设备树标志位 yes/try */
boot_fdt=try
/* usb启动时扫描USB controller */
boot_net_usb_start=usb start
/* 指定安装目录 */
boot_prefixes=/ /boot/
/* 设置dhcp启动参数文件 */
boot_script_dhcp=boot.scr.uimg
/* 设置启动参数文件 */
boot_scripts=boot.scr.uimg boot.scr
/* 设置targets值为下面的distro_bootcmd里的bootcmd_${target}赋值以执行相关的boot命令 */
boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 pxe dhcp
/* 默认的启动命令 先执行findfdt得到fat设备树 然后执行设置init_console初始化串口 最后启动系统 */
bootcmd=run findfdt; run init_console; run envboot; run distro_bootcmd
/* dhcp的bootcmd命令 由上面的distro_bootcmd选择执行 */
bootcmd_dhcp=run boot_net_usb_start; if dhcp scriptaddr {boot_script_dhcp}; then source ${scriptaddr}; fi
/* legacy_mmc0的bootcmd命令 由上面的distro_bootcmd选择执行 */
bootcmd_legacy_mmc0=setenv mmcdev 0; setenv bootpart 0:2 ; run mmcboot
/* legacy_mmc1的bootcmd命令 由上面的distro_bootcmd选择执行 */
bootcmd_legacy_mmc1=setenv mmcdev 1; setenv bootpart 1:2 ; run mmcboot
/* mmc0的bootcmd命令 由上面的distro_bootcmd选择执行 */
bootcmd_mmc0=setenv devnum 0; run mmc_boot
/* mmc1的bootcmd命令 由上面的distro_bootcmd选择执行 */
bootcmd_mmc1=setenv devnum 1; run mmc_boot
/* nand启动时的启动命令 */
bootcmd_nand=run nandboot
/* pxe启动时的启动命令 */
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
/* 设置bootcount的值为1 这里并未使用 */
bootcount=1
/* 设置bootdelay的值为2 应该是延时使用的 这里并未使用 */
bootdelay=2
/* 设置boot的目录为/boot */
bootdir=/boot
/* 设置环境变量的文件 */
bootenvfile=uEnv.txt
/* 设置启动的镜像文件 */
bootfile=zImage
/* 设置启动文件的大小 */
bootm_size=0x10000000
/* 设置分区值 比如sd mmc卡中的分区 */
bootpart=0:2
/* 从loadaddr地址处开始执行script文件 */
bootscript=echo Running bootscript from mmc mmcdev...;source {loadaddr}
/* 设置串口console 从UART0输出 波特率115200 无校验位 8位数据位 */
console=ttyO0,115200n8
/* cpu架构是armv7 */
cpu=armv7
/* 设置在各个存储器中的位置 这里并未使用 */
dfu_alt_info_emmc=rawemmc raw 0 3751936
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw raw 0x100 0x100;u-boot.img.raw raw 0x300 0x400;spl-os-args.raw raw 0x80 0x80;spl-os-image.raw raw 0x900 0x2000;spl-os-args fat 0 1;spl-os-image fat 0 1;u-boot.img fat 0 1;uEnv.txt fat 0 1
dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;u-boot-spl-os part 0 6;kernel part 0 8;rootfs part 0 9
dfu_alt_info_ram=kernel ram 0x80200000 0xD80000;fdt ram 0x80F80000 0x80000;ramdisk ram 0x81000000 0x4000000
/* 循环boot_targets找到相应的启动设备 然后去执行 bootcmd_ target∗/distrobootcmd=fortargetin