uboot启动内核过程及启动方法介绍

了解uboot命令

进入uboot命令行模式后,我们可以执行help或者?列出uboot所支持的命以及他们的作用,如果想知道某个命令的
具  体用法可以使用 “?命令”或者“help 命令”的方法列出某个命令的具体用法。

uboot的常用命令

   1.查询命令:bdinfo、printenv、 version
   		bdinfo:查询系统信息,用法【bdinfo】
   		printenv:查询当前系统所有环境变量,用法【printenv】
   		version:查询uboot版本,用法【version】

   2.环境变量操作命令:setenv、saveenv
   		setenv:新建/修改或删除环境变量,删除环境变量【setenv 环境变量名】,新建或修改环境变量【set 环境变量名=值】
   		saveenv:保存环境变量,用法【saveenv】
   
   3.内存操作命令:md、nm、mm、mw、cp 、cmp
   		md:显示内存值,用法【md[.b, .w, .l] address [# of objects]】,.b表示以byte读取,.w表示以word读取,of objects表示长度
   		mm:命令用于修改指定地址的内存值,用法【nm [.b, .w, .l] address】
   		mw:命令 mw 用于使用一个指定的数据填充一段内存,用法【mw [.b, .w, .l] address value [count]】
   		cp:cp 是数据拷贝命令,用于将 DRAM或falsh 中的数据或从一段内存拷贝到另一段内存中,用法cp [.b, .w, .l] source target count
   		cmp:用于比较两段内存的数据是否相等,【cmp [.b, .w, .l] addr1 addr2 count】
   
   4.网络操作命令:dhcp、ping、tftp、nfs
   		dhcp:自动获取ip,并通过tftp从网络启动内核,用法【dhcp】,(可通过?dhcp查看用法)
   		ping:网络连接测试,用法【ping 192.168.xxx.xxx】
   		nfs: 通过nfs从网络启动内核,用法【nfs 内存地址 主机IP:文件名】例如nfs 80800000 192.168.1.250:/home/nfs/zImage
   		tftp:通过tftp从网络启动内核,用法【tftp 80800000 192.168.1.250:/zImage】
   
   5.emmc和sd卡操作命令:mmc info、mmc read、mmc wirte、 mmc rescan、mmc part、mmc dev、mmc list
   (emmc和sd属于同一种类型设备)
   mmc info:查看当前设备信息,【mmcinfo】
   mmc rescan:扫码系统中存在的emmc设备,【mmcrescan】
   mmc list:列出系统中的所有emmc设备,即查看一共有个emmc【mmclist】
   mmc dev:切换到某个emmc设备,或切换到某个emmc设备的某个分区,【mmcdev [dev] [part]】,例如切换到emmc1的分区2:ccmdev 1 2
   mmc part:列出当前emmc的所有分区,【mmcpart】

	6.FAT 文件系统操作命令:fatinfo、fatls、fstype、fatload、fatwrite、
	fatinfo:查询指定 MMC 设置指定分区的文件系统信息,【fatinfo <interface> [<dev[:part]>]】,例:fatinfo mmc 1:1
	fatls:于查询 FAT 格式设备的目录和文件信息,【fatls <interface> [<dev[:part]>] [directory]】,例:fatls mmc 1:1
	fstype:于查看 MMC 设备某个分区的文件系统格式,【fstype <interface> <dev>:<part>】,例:fstype mmc 1:0
	fatload:于将指定的文件读取到 DRAM 中,【fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]】,例:fatload mmc 1:1 80800000 zImage
	fatwrite:将文件写入硬盘,【fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>】

	7. EXT 格式文件系统操作命令:ext2load、ext2ls、ext4load、ext4ls
	   (操作方法与FAT一致)

	8.NAND 操作命令:
	    nand info:打印 NAND Flash 信息
		nand device:切换 NAND Flash,如果你的板子支持多片 NAND 的话就可以使用此命令来设置当前所使用的 NAND
		nand erase:擦除 NAND Flash,从指定地址开始(off)开始,擦除指定大小(size)的区域【nand erase[.spread] [clean] off size】,擦除指定的分区【nand erase.part [clean] partition】,【nand erase.chip [clean]】,
		例如:nand erase 0x4000000 0xA00000
		nand write:写入,【nand write addr off size】,例如:nand write 0x87800000 0x4000000 0xA00000
		nand read:读取,【nand read addr off size】,例如:nand read 0x83000000 0x6000000 0x19000
		
   9.boot操作命令:bootz、bootm、boot、
   		bootz:令用于启动 zImage 镜像文件,用法【bootz addr initrd fdt】addr 是 zImage 的内存地址,initrd 是 zImage 的地址 initrd 文件的内存地址,不使用 initrd 的话用‘-’代替,fdt 就是设备树文件的内存地址。
   		bootm:令用于启动 uImage 镜像文件,用法【bootz addr initrd fdt】addr 是 zImage 的内存地址,initrd 是 zImage 的地址 initrd 文件的内存地址,不使用 initrd 的话用‘-’代替,fdt 就是设备树文件的内存地址,bootm命令可以直接使用bootm addr 的方式启动uImage而不需要设备树文件。
   		boot:boot命令也使用来启动linux用来启动linux内核的,但是它不是直接去启动,而是间接的调用bootcmd
   		来启动内核,具体的启动内核行为是由bootcmd决定的。

uboot启动启动内核的过程以及启动方法

内核的启动过程:要启动内核,必须先把内核镜像文件uImage/zImage、设备树文件加载到内存中,然后使用uboot的boot操着命令(bootz或者bootm)来启动镜像文件,所以启动linux内核分为以下两个步骤:

1.加载Image文件和设备树文件到内存:
	tftp方式加载:tftp 0x87800000 zImage  
	             tftp 83000000 imx6ull-alientek-emmc.dtb
	nfs方式加载:nfs 0x87800000 zImage  
	            nfs 83000000 imx6ull-alientek-emmc.dtb

2.使用bootm或者bootzq启动镜像:
    zImage:bootz 80800000 – 83000000		
    uImage:bootm 80800000 – 83000000  或 bootm 80800000
    
以上是两个步骤就是uboot启动linux内核的标准过程,我们可以把这两个过程合并统一写道bootcmd中,
然后执行boot命令(boot命令会自动查找bootcmd并执行),实现相同的效果,具体做法如下:
      1)setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'  
      2)boot 

uboot启动linux内核的通常做法

一般uboot是从硬盘中加载内核到内存中的,这样可以保证uboot在没有网络的情况下也可以启动linux内核,因此我们通常的做法是:先将linux内核和设备树文件先写入硬盘,然后设置bootcmd让uboot从硬盘加载内核和设备树文件到内存中,然后执行boot命令,具体如下:

1. 获取Image和设备树文件并保存到硬盘
	tftp 0x87800000 zImage  
    tftp 83000000 imx6ull-emmc.dtb
    fatwrite mmc 1:1 80800000 zImage 0x5c2720	//保存zImage
	fatwrite mmc 1:0 80800000 imx6ull-emmc.dtb0x620		//保存设备树文件

2. 设置bootcmd从硬盘加载内核和设备树文件到内存:
    setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-emmc.dtb; bootz 80800000 - 83000000'
3.根据bootcmd启动内核:
    boot
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值