AM335x Beaglebone black 蚂蚁矿机L3+控制板 u-Boot 启动分析

本文详细解析了AM335x微控制器的启动顺序,特别是如何通过SYSBOOT引脚配置启动源。同时,深入探讨了U-Boot启动脚本,包括SD卡、Nandflash和网络启动的流程,以及如何通过环境变量控制启动行为。此外,还展示了如何从SD卡加载uEnv.txt并执行其中的命令。
摘要由CSDN通过智能技术生成

AM335x 可以通过控制上电是sysboot 引脚的电平选择启动顺序,官方的beaglebone black 电路如下:

 

 

矿板的SYSBOOT[4:0] = 10011,默认启动顺序如下:

默认是从NAND 启动,所以如果想改变启动顺序就必须改SYSBOOT[4:0]这几个的电阻控制上电默认高低电平。

下面分析矿机板子中u-boot 的启动脚本:

UBoot启动后按ESC 键进入UBoot  cmd 界面,输入printenv  答应UBoot 环境变量 ,输出如下:

U-Boot# printenv
arch=arm
baudrate=115200
board=am335x
bootcmd=gpio set 53; i2c mw 0x24 1 0x3e; run findfdt; mmc dev 0; if mmc rescan ; then echo micro SD card found;setenv mmcdev 0;else echo No micro SD card found, setting mmcdev to 1;setenv mmcdev 1;fi;setenv bootpart ${mmcdev}:2;mmc dev ${mmcdev}; if mmc rescan; then gpio set 54; echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;gpio set 55; if run loaduimage; then gpio set 56; run loadfdt;run mmcboot;fi;fi;run nandboot;
bootdelay=1
bootdir=/boot
bootenv=uEnv.txt
bootfile=uImage
bootpart=0:2
console=ttyO0,115200n8
cpu=armv7
dfu_alt_info_emmc=rawemmc mmc 0 3751936
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw mmc 100 100;u-boot.img.raw mmc 300 3C0;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-evn part 0 6;fdt part 0 7;kernel part 0 8;rootfs part 0 9;usrda part 0 10
ethact=cpsw
ethaddr=68:9e:19:a7:af:25
fdt_high=0xffffffff
fdtaddr=0x80F80000
fdtfile=am335x-boneblack.dtb
findfdt=if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi;if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
ipaddr=192.168.51.171
kloadaddr=0x80007fc0
loadaddr=0x80200000
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
loaduimage=load mmc ${bootpart} ${kloadaddr} ${bootdir}/${bootfile}
mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${kloadaddr} - ${fdtaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
mtdids=nand0=omap2-nand.0
mtdparts=mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1792k(u-boot),128k(u-boot-env),128k(fdt),5m(kernel),20m(rootfs), -(usrdata)
nandargs=setenv bootargs console=${console} ${optargs} init=/sbin/init
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; gpio set 54; nand read ${rdaddr} ${nandfsaddr} ${nandfssize}; gpio set 55; nand read ${fdtaddr} ${nandfdtaddr} ${nandfdtsize}; gpio set 56; bootm ${loadaddr} ${rdaddr} ${fdtaddr}
nandfdtaddr=0x260000
nandfdtsize=0x020000
nandfsaddr=0x800000
nandfssize=0x1400000
nandimgsize=0x500000
nandroot=ubi0:rootfs rw ubi.mtd=7,2048
nandrootfstype=ubifs rootwait=1
nandsrcaddr=0x280000
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
netboot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootm ${loadaddr} - ${fdtaddr}
nfsopts=nolock
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ${rdaddr} ${fdtaddr}
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M
ramrootfstype=ext2
rdaddr=0x81000000
rootpath=/export/rootfs
serverip=192.168.51.226
soc=am33xx
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootm ${loadaddr}
spibusno=0
spiimgsize=0x362000
spiroot=/dev/mtdblock4 rw
spirootfstype=jffs2
spisrcaddr=0xe0000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial
stdin=serial
stdout=serial
usbnet_devaddr=68:9e:19:a7:af:25
vendor=ti
ver=U-Boot 2013.04-dirty (Jan 04 2015 - 17:08:05)
----------------------------------------------------------------debain boot ------------------------------------
Press ESC to abort autoboot in 1 seconds
gpio: pin 53 (gpio 53) value is 1
mmc0 is current device
micro SD card found
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
SD/MMC found on device 0
1179 bytes read in 8 ms (143.6 KiB/s)
Loaded environment from uEnv.txt
Importing environment from mmc ...
Running uenvcmd ...
1197 bytes read in 36 ms (32.2 KiB/s)
debug: [/boot/vmlinuz-4.4.30-ti-r64] ...
8644992 bytes read in 1470 ms (5.6 MiB/s)
debug: [/boot/initrd.img-4.4.30-ti-r64] ...
4946838 bytes read in 852 ms (5.5 MiB/s)
debug: [/boot/dtbs/4.4.30-ti-r64/am335x-boneblack.dtb] ...
62069 bytes read in 63 ms (961.9 KiB/s)
debug: [console=tty0 console=ttyO0,115200n8 bone_capemgr.enable_partno= root=/dev/mmcblk0p1 rootfstype=ext4 rootwait coherent_pool=1M quiet cape_universal=enable] ...
debug: [bootz 0x82000000 0x88080000:4b7b96 0x88000000] ...
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Using Device Tree in place at 88000000, end 88012274

SD 卡启动

重点分析这一段:

bootcmd=

gpio set 53;  #点亮53号引脚连接的灯

i2c mw 0x24 1 0x3e;

run findfdt; #运行查找 设备树命令

mmc dev 0;  # 设置MMC0 为当前操作设备

if mmc rescan ; then echo micro SD card found;setenv mmcdev 0; # 扫描测试SD 卡是否存在

else echo No micro SD card found, setting mmcdev to 1;

setenv mmcdev 1; 不存在的话以MMC1 作为当前设备 

fi;

setenv bootpart ${mmcdev}:2;

mmc dev ${mmcdev};

if mmc rescan;

then gpio set 54; echo SD/MMC found on device ${mmcdev};

if run loadbootenv;  #去当前设备中查找uEnv.txt

then echo Loaded environment from ${bootenv};

run importbootenv; 

fi;

if test -n $uenvcmd; then echo Running uenvcmd ...;

run uenvcmd; #运行uEnv.txt中的命令

fi;

gpio set 55;

if run loaduimage; #加载uImage 镜像文件

then gpio set 56;

run loadfdt; #加载dtb 设备树文件

run mmcboot; #启动

fi;

fi;

run nandboot;#如果MMC、SD启动失败,运行从Nandflash 启动脚本

Nandflash 启动脚本如下

nandboot=

echo Booting from nand ...; #显示提示信息

run nandargs; #设置环境变量

nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; #从Nandflash 中读取image到RAM

gpio set 54; nand read ${rdaddr} ${nandfsaddr} ${nandfssize};#从Nandflash 中读取ramdisk到RAM

gpio set 55; nand read ${fdtaddr} ${nandfdtaddr} ${nandfdtsize};#从Nandflash 中读取设备树到RAM

gpio set 56; bootm ${loadaddr} ${rdaddr} ${fdtaddr} #从内存中启动

网络启动

后面调试自己的镜像会经常使用

netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp #指定NFS 和bootargs环境变量
netboot=

echo Booting from network ...;

setenv autoload no;

dhcp;

tftp ${loadaddr} ${bootfile}; #通过tft读取image到RAM

tftp ${fdtaddr} ${fdtfile};#通过tft读取设备树文件到RAM

run netargs;#设置网络文件系统和启动环境变量bootargs

bootm ${loadaddr} - ${fdtaddr} #从内存中启动

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值