am335x uboot参数 说明

来源:互联网 发布:知乎 天星资本 编辑:程序博客网 时间:2024/05/29 19:54

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 mmcmmcdev...;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{boot_targets}; do run bootcmd_${target}; done

/* 设置efi设备树的安装目录 */
efi_dtb_prefixes=/ /dtb/ /dtb/current/

/扫描是否SD卡已插入,若SD卡中有U-Boot启动脚本,则使用脚本中的U-Boot 环境变量启动,否则采用默认的U-Boot环境变量进行启动。/
envboot=mmc dev mmcdev;ifmmcrescan;thenechoSD/MMCfoundondevice{mmcdev};if run loadbootscript; then run bootscript;else if run loadbootenv; then echo Loaded env from bootenvfile;runimportbootenv;fi;iftestnuenvcmd; then echo Running uenvcmd …;run uenvcmd;fi;fi;fi;

/* eth1网卡的mac地址 */
eth1addr=68:c9:0b:26:cb:af

/* 网卡使用设备 */
ethact=ethernet@4a100000

/* mac地址 */
ethaddr=68:c9:0b:26:cb:ad

/* fdt文件读取地址 */
fdt_addr_r=0x88000000

/* fdt文件读取地址 */
fdtaddr=0x88000000

/* fdt控制地址 */
fdtcontroladdr=9ef2e2d8

/* fdt文件 初始化为未定义 */
fdtfile=undefined

/* 根据board_name 选择适合我们单板的设备树dtb */
findfdt=if test boardname=A335BONE;thensetenvfdtfileam335xbone.dtb;fi;iftestboard_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi; if test boardname=BBG1;thensetenvfdtfileam335xbonegreen.dtb;fi;iftestboard_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test boardname=A335XSK;thensetenvfdtfileam335xevmsk.dtb;fi;iftestboard_name = A335_ICE; then setenv fdtfile am335x-icev2.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;

/* 获得uuid 给后面的root值使用 */
finduuid=part uuid mmc 0:2 uuid

/* 从mmc中的环境文件获取环境变量 */
importbootenv=echo Importing environment from mmcmmcdev...;envimportt{loadaddr} ${filesize}

/* 根据board_name 来设置串口 波特率等 */
init_console=if test $board_name = A335_ICE; then setenv console ttyO3,115200n8;else setenv console ttyO0,115200n8;fi;

/* 内核地址 */
kernel_addr_r=0x82000000

/* 获得dfi的设备树文件 */
load_efi_dtb=load devtype{devnum}:distrobootpart{fdt_addr_r} prefix{efi_fdtfile}

/* 环境文件所在地址 */
loadaddr=0x82000000

/* 拷贝mmc里的bootenvfile到loadaddr中 */
loadbootenv=fatload mmc mmcdev{loadaddr} ${bootenvfile}

/* 拷贝mmc里的boot.scr到loadaddr中 */
loadbootscript=load mmc mmcdev{loadaddr} boot.scr

/* 拷贝mmc中的bootdir/fdtfile到fdtaddr中 */
loadfdt=load mmc bootpart{fdtaddr} bootdir/{fdtfile}

/* 拷贝mmc中的bootdir/bootfile到loadaddr中 */
loadimage=load mmc bootpart{loadaddr} bootdir/{bootfile}

/* 拷贝mmc中ramdisk.gz到rdaddr中 */
loadramdisk=load mmc mmcdev{rdaddr} ramdisk.gz

/* 设置devtype 和调用scan_dev_for_boot_part */
mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi

/SD卡启动时,先扫描SD卡是否插入,若检测到SD卡已经插入,则加载SD卡boot分区中的Uboot.img以及zImage内核镜像。加载完成后,运行run args_mmc ,加载rootfs分区文件系统,以及设置控制台参数,加载完成后,运行bootz进行从SD卡启动/
mmcboot=mmc dev mmcdev;ifmmcrescan;thenechoSD/MMCfoundondevice{mmcdev};run envboot; if run loadimage; then run mmcloados;fi;fi;

/从第一个mmc设备启动/
mmcdev=0

/* 设置bootargs参数和判断boot_fdt的值来确定bootz 启动位置 */
mmcloados=run args_mmc; if test bootfdt=yes||test{boot_fdt} = try; then if run loadfdt; then bootz loadaddr{fdtaddr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;

/* 设置mmc文件系统为ext4 */
mmcrootfstype=ext4 rootwait

/* 设置nand mtd分区 */
mtdparts=mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system)

/* nand启动的参数 */
nandargs=setenv bootargs console=console{optargs} root=nandrootrootfstype={nandrootfstype}

/* nand启动时设置args参数读取内核到ram中 然后启动内核 */
nandboot=echo Booting from nand …; run nandargs; nand read fdtaddrNAND.ubootsplos;nandread{loadaddr} NAND.kernel; bootz loadaddr{fdtaddr}

/* 设置bootrgs参数值中的root=值*/
nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system,2048

/* 设置nand启动时的文件系统为ubifs */
nandrootfstype=ubifs rootwait=1

/网络启动netboot参数/
netargs=setenv bootargs console=console{optargs} root=/dev/nfs nfsroot=serverip:{rootpath},${nfsopts} rw ip=dhcp

/网络启动时,使用tftp从服务器中加载U-boot.img文件以及内核镜像文件,加载完成后,执行run netargs设置控制台参数,设置完成后启动系统/
netboot=echo Booting from network …; setenv autoload no; dhcp; run netloadimage; run netloadfdt; run netargs; bootz loadaddr{fdtaddr}

/网络启动时,通过tftp加载dtb文件到fdtaddr 中/
netloadfdt=tftp fdtaddr{fdtfile}

/网络启动时,通过tftp加载内核镜像文件到loadaddr 中/
netloadimage=tftp loadaddr{bootfile}

/nfs传输取消文件锁模式/
nfsopts=nolock

/根文件系统分区设置/
partitions=uuid_disk=uuidgptdisk;name=rootfs,start=2MiB,size=,uuid={uuid_gpt_rootfs}

/pxe启动文件加载地址/
pxefile_addr_r=0x80100000

/ramdisk文件读取地址/
ramargs=setenv bootargs console=console{optargs} root=ramrootrootfstype={ramrootfstype}

/* 从ram中启动系统 */
ramboot=echo Booting from ramdisk …; run ramargs; bootz loadaddr{rdaddr} ${fdtaddr}

/ramdisk文件读取地址/
ramdisk_addr_r=0x88080000

/ram启动时根文件系统的路径/
ramroot=/dev/ram0 rw

/* ram启动时的文件系统类型 */
ramrootfstype=ext2

/* ramdisk文件系统运行地址 */
rdaddr=0x88080000

/网络启动时根文件系统的路径/
rootpath=/export/rootfs

/* 设置prefix安装目录的值 然后调用scan_dev_for_extlinux scan_dev_for_scripts scan_dev_for_efi */
scan_dev_for_boot=echo Scanning devtype{devnum}:distrobootpart...;forprefixin{boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;

/* 根据devtype和devnum 来选择执行scan_dev_for_boot */
scan_dev_for_boot_part=part list devtype{devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in devplist;doiffstype{devtype} devnum:{distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done

/* 为efi扫描设备 设置fdt文件 加载efi文件 */
scan_dev_for_efi=setenv efi_fdtfile fdtfile;iftestz"{fdtfile}” -a -n “soc";thensetenvefifdtfile{soc}-board{boardver}.dtb; fi; for prefix in efidtbprefixes;doifteste{devtype} devnum:{distro_bootpart} prefix{efi_fdtfile}; then run load_efi_dtb; fi;done;if test -e devtype{devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing…; fi; setenv efi_fdtfile

/* 加载extlinux.conf文件 然后执行 */
scan_dev_for_extlinux=if test -e devtype{devnum}:distrobootpart{prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing…; fi

/* 获得需要的配置脚本 然后去执行 */
scan_dev_for_scripts=for script in bootscripts;doifteste{devtype} devnum:{distro_bootpart} prefix{script}; then echo Found U-Boot script prefix{script}; run boot_a_script; echo SCRIPT FAILED: continuing…; fi; done

/* 脚本文件的执行地址 */
scriptaddr=0x80000000

/* soc类型是am33xx */
soc=am33xx

/* spi启动的bootargs */
spiargs=setenv bootargs console=console{optargs} root=spirootrootfstype={spirootfstype}

/* spi启动时的启动命令 */
spiboot=echo Booting from spi …; run spiargs; sf probe spibusno:0;sfread{loadaddr} spisrcaddr{spiimgsize}; bootz ${loadaddr}

/* spi启动时img的大小 */
spiimgsize=0x362000

/* spi的根文件系统路径 */
spiroot=/dev/mtdblock4 rw

/* spi启动时的根文件系统类型为jffs2 */
spirootfstype=jffs2

/* spi img的读取地址 */
spisrcaddr=0xe0000

/根据相关环境变量设置静态IP/
static_ip=ipaddr:{serverip}:gatewayip:{netmask}:${hostname}::off

/标准错误输出/
stderr=serial@481a6000

/标准输入/
stdin=serial@481a6000

/标准输出/
stdout=serial@481a6000

/* usb启动系统命令 */
usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi

/* 芯片供应商 */
vendor=ti

/* uboot版本 */
ver=U-Boot 2016.05-00235-g2ae6e93-dirty (Dec 22 2016 - 11:41:59 +0800)