NanoPC-T2 Uboot启动过程分析 - 3-2 启动命令的执行

本文分析了NanoPC-T2中UBoot如何从ext4文件系统加载Linux内核和根文件系统,并执行bootm命令启动内核的过程。do_ext4_load()函数负责从文件系统复制内核和根文件系统到内存特定地址,随后bootm命令的do_bootm()函数初始化并调用bootm_load_os()加载内核,最终通过boot_jump_linux()将控制权传递给Linux内核。
摘要由CSDN通过智能技术生成

回忆上一节,UBoot当前要解析和执行启动命令。该启动命令存储在环境变量bootcmd中。回忆环境变量的内容:


baudrate=115200

bloader=ext4load mmc 0:1

bootcmd=$bloader 0x48000000 $kernel;$bloader 0x49000000 root.img.gz;bootm 0x48000000

bootdelay=0

bootfile=uImage

ethaddr=00:e2:1c:ba:e8:60

firstboot=0

gatewayip=192.168.1.254

ipaddr=192.168.1.165

kernel=uImage

netmask=255.255.255.0

serverip=192.168.1.164

stderr=serial

stdin=serial

stdout=serial

bootcmd一个有三条命令,通过继续展开后可以得到三条命令的全部内容:


ext4load mmc 0:1 0x48000000 uImage

ext4load mmc 0:1 0x49000000 root.img.gz

bootm 0x48000000

首先先查找第一条命令的相关信息,ext4load。这条命令的实现位于/uboot-root/common/cmd_ext4.c中。下面是其定义:


U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,

 "load binary file from a Ext4 filesystem",

 "<interface> <dev[:part]> [addr] [filename] [bytes]\n"

 " - load binary file 'filename' from 'dev' on 'interface'\n"

 " to address 'addr' from ext4 filesystem");

可以看出,这个命令由do_ext4_load()去执行实现,作用是从具体设备或分区上的ext4文件系统中将指定文件以二进制的形式复制到指定内存地址上。由于其具体实现涉及硬件操作,过程比较复杂,这里就不详细展开了。但需要知道的是,第一和第二条命令,是将Linux系统的内核uImage和Linux系统的根文件系统root.img.gz分别复制到0x4800_0000和0x4900_0000这两个地址中。复制完后内存使用情况如下:


RAM:

0xC000_0000

 -

0x5000_0000(RAM_TOP)

 -

0x4FFE_F800

 UBOOT(Reserve 478K)

0x4FF7_8000

 -

0x4FFF_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值