ARM-LINUX uboot是怎样启动内核

首先进入到uboot
输入:
print

输出(注意不同的uboot输出的内容不一样):

baudrate=115200
board_name=EVK
board_rev=14X14
boot_fdt=try
bootargs=console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.100:/home/lee/linux/nfs/rootfs ip=192.168.10.50:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off
bootcmd=run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run net             boot; fi; fi; else run netboot; fi
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=1
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
ethact=FEC1
ethaddr=00:04:9f:04:d2:35
ethprime=FEC
fdt_addr=0x83000000
fdt_file=imx6ull-14x14-emmc-4.3-800x480-c.dtb
fdt_high=0xffffffff
findfdt=if test $fdt_file = undefined; then if test $board_name = EVK && test $board_rev = 9X9; then setenv fdt_file imx6ull-9x9-evk.dtb; fi; if test $board_name = EVK && tes             t $board_rev = 14X14; then setenv fdt_file imx6ull-14x14-evk.dtb; fi; if test $fdt_file = undefined; then echo WARNING: Could not determine dtb to use; fi; fi;
gatewayip=192.168.10.1
image=zImage
initrd_addr=0x83800000
initrd_high=0xffffffff
ip_dyn=yes
ipaddr=192.168.10.50
loadaddr=0x80800000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
logo_file=alientek.bmp
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_m             ass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test $             {boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcdev=1
mmcpart=1
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = ye             s || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Can             not load the DT; fi; fi; else bootz; fi;
netmask=255.255.255.0
panel=ATK-LCD-4.3-800x480
script=boot.scr
serverip=192.168.10.100
splashimage=0x88000000
splashpos=m,m

主要看:

 bootcmd=
 	run findfdt;
 	mmc dev ${mmcdev};
 	mmc dev ${mmcdev}; 
 	if mmc rescan; 
 	then 
 		if run loadbootscript; 
 		then 
 			run bootscript; 
 		else 
 			if run loadimage; 
 			then 
 				run mmcboot; 
 			else 
 				run netboot; 
 			fi; 
 		fi;                                  
 	else 
 		run netboot; 
 	fi

这一行就是uboot启动内核, 设备树, 和文件系统的关键
假设你需要修改nfs或tftp 启动内核, 设备树,文件系统
就修改对应的环境变量

像我的arm板
启动的时候跑到了 “run loadimage”
然后"run mmcboot"

mmcboot=
	echo Booting from mmc ...; 
	run mmcargs; 
	if test ${boot_fdt} = yes || test ${boot_fdt} = try; 
	then 
		if run loadfdt; 
		then 

这里就是启动文件系统

mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}

如果我要从这里修改文件系统从nfs启动
则输入:

setenv mmcargs 'setenv bootargs console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.100:/home/lee/linux/nfs/rootfs ip=192.168.10.50:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off rw'
saveenv

结尾的rw表示文件系统读写权限

参考文章:
https://blog.csdn.net/qq_44708426/article/details/106519779

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值