Ubuntu驱动程序开发2-Uboot使用(bootcmd、bootargs、uboot命令)

1、环境变量bootcmd与bootargs

1.1 环境变量bootcmd

   bootcmd 保存着 uboot 默认命令, uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。可以在 uboot 启动以后进入命令行设置 bootcmd 环境变量的值。如果 EMMC 或者 NAND 中没有保存 bootcmd 的值,那么 uboot 就会使用默认的值,板子第一次运行 uboot 的时候都会使用默认值来设置 bootcmd 环境变量。

  默认的bootcmd是在mx6ull_alientek_emmc.h文件中,通过设置宏CONFIG_BOOTCOMMAND来设置的。

  或者,我们可以直接在uboot中设置bootcmd的值,这个值就保存在EMMC中:

setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb; bootz 80800000 - 83000000;'
saveenv

1.2 环境变量bootargs

  bootargs保存着uboot传递给Linux内核的参数

setenv bootargs console= ttymxc0, 115200 root=/dev/mmcblk1p2 rootwait rw
saveenv

console:用来设置通过什么设备和Linux进行交互,串口还是LCD屏幕?因为I.MX6ULL的串口1在linux下的设备文件就是/dev/ttymxc0,因此设置 "console= ttymxc0, 115200"就是设置ttymxc0(串口1)作为Linux终端,且波特率为115200。

root:用来设置根文件系统的位置,/dev/mmcblkx(x=0~n)表示 mmc 设备,而/dev/mmcblkxpy(x=0~n,y=1~n)表示mmc设备x的分区y。I.MX6U-ALPHA 开发板中/dev/mmcblk1 表示 EMMC,而/dev/mmcblk1p2 表示EMMC 的分区 2

rootwait:表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。 

rw:表示根文件系统是可以读写的,不加rw 的话可能无法在根文件系统中进行写操作,只能进行读操作

rootfstype:此选项一般配置 root 一起使用, rootfstype 用于指定根文件系统类型,如果根文件系统为ext 格式的话此选项无所谓。如果根文件系统是 yaffs、 jffs 或 ubifs 的话就需要设置此选项,指定根文件系统的类型。

2、uboot命令

2.1 帮助命令

help  //查看所有命令
?    //查看所有命令
help bootz  //查看bootz命令说明
? bootz    //查看bootz命令说明

2.2 信息查询

bdinfo    //查看板子信息

printenv    //输出环境变量信息
printfenv baudrate    //打印指定环境变量(波特率)信息

2.3 uboot网络环境变量设置

 在使用nfs、tftp命令前需要先设置uboot的网络:

setenv ipaddr 192.168.2.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.2.1
setenv netmask 255.255.255.0
setenv serverip 192.168.2.102
saveenv

ipaddr:开发板IP

serverip:Ubuntu主机IP

2.3 nfs命令

nfs [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress:是要保存的 DRAM 地址,

[[hostIPaddr:]bootfilename]:是要下载的文件地址

举例:

nfs 80800000 192.168.1.250:/home/mklinux/nfs/zImage

2.4 tftp命令

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress:是要保存的 DRAM 地址,

[[hostIPaddr:]bootfilename]:是要下载的文件地址

举例:

tftp 80800000 zImage

tftp不需要输入文件在Ubuntu中的完整路径,只需要输入文件名即可。

 2.5 EMMC和SD卡命令

mmc list:查看开发板所有的MMC设备

mmc part:查看当前MMC设备所有分区

fstype<interface><dev>:<part>:查看MMC设备某个分区的文件系统格式。一般分区0存放着uboot,格式未知;分区1存放着linux镜像和设备树,格式fat;分区2存放着linux根文件系统,格式ext4

fatls <interface> [<dev[:part]>] [directory]:interface,要查询的接口,比如mmc;dev,要查询的设备号;part,要查询的分区,directory,要查询的目录

mmc dev [dev] [part]:切换MMC为:设备号dev,分区号part

mmc write addr blk# cnt:addr,要写入MMC中的数据在DRAM中的起始地址;blk#,要写入MMC的起始块(16进制);cnt,要写入块的大小

mmc erase addr blk# cnt:addr,要擦除MMC中的数据在DRAM中的起始地址;blk#,要写入MMC的起始块(16进制);cnt,要写入块的大小

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]:
 interface 为接口,比如 mmc

 dev 是设备号, part 是分区,    

 addr 是保存在 DRAM 中的起始地址,

 filename 是要读取的文件名字。

 bytes 表示读取多少字节的数据,如果 bytes 0 或者省略的话表示读取整个文件。

 pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。 

2.6 BOOT命令

2.6.1 bootz

  用于从开发板中DRAM的指定地址加载镜像文件zImage及设备树文件,并启动Linux。

bootz [addr [initrd[:size]] [fdt]]

  addr:LInux镜像文件在DRAM地址

  initrd:initrd文件在DRAM地址,不适用的话用‘-’代替

  fdt:设备树文件在DRAM地址

举例:

  详见 

2.6.2 boot

  通过读取bootcmd来启动Linux镜像。

举例:

  详见

2.6.3 bootm

  用于启动uImage镜像文件。

posted @ 2020-05-15 09:13  Mike_2019  阅读(1284)  评论(0编辑  收藏  举报