当前位置: 首页 > web >正文

uboot使用指南

1.uboot的分类

        本节是 uboot 的使用,所以就直接使用正点原子已经移植好的 uboot,这个已经放到了开发板光盘中了,路径为:开发板光盘->1、程序源码->3、正点原子 Uboot Linux 出厂源码->uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2

2.uboot初次编译

        首先在 Ubuntu 中安装 ncurses 库,否则编译会报错,安装命令如下:
sudo apt-get install libncurses5-dev
        在 Ubuntu 中创建存放 uboot 的目录,比如我的是/home/$USER/linux/uboot,然后在此目录
下新建一个名为“alientek_uboot”的文件夹用于存放正点原子提供的 uboot 源码。
        将其拷贝到 Ubuntu 中新建的 alientek_uboot 文件夹下,完成以后如图所示:
        使用如下命令对其进行解压缩:
tar -vxjf uboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2
        解压完成以后 alientek_uboot 文件夹内容如图:
        如果使用的是 512MB+8GB EMMC 核心板,使用如下命令来编译对应的 uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)
mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
        这三条命令中 ARCH=arm 设置目标为 arm 架构,CROSS_COMPILE 指定所使用的交叉编
译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清
理一下工程。第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置 uboot, 配置文件为 mx6ull_14x14_ddr512_emmc_defconfig。最后一条指令相当于 “make -j12”也就是使用 12 核来编译 uboot。当这三条命令执行完以后 uboot 也就编译成功了.如图:
        编译完成以后的 alentek_uboot 文件夹内容如图所示:
        可以看出,编译完成以后 uboot 源码多了一些文件,其中 u-boot.bin 就是编译出来的 uboot
二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVTDCD等数据)才能在I.MX6U
上执行,图中的 u-boot.imx 文件就是添加头部以后的 u-boot.binu-boot.imx 就是我们最
终要烧写到开发板中的 uboot 镜像文件。
每次编译 uboot 都要输入一长串命令,为了简单起见,我们可以新建一个 shell 脚本文件,
将这些命令写到 shell 脚本文件里面,然后每次只需要执行 shell 脚本即可完成编译工作。新建
名为 mx6ull_alientek_emmc.sh shell 脚本文件,然后在里面输入如下内容:
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
        第 1 行是 shell 脚本要求的,必须是“#!/bin/bash”或者“#!/bin/sh”。
        第 2 行使用了 make 命令,用于清理工程,也就是每次在编译 uboot 之前都清理一下工程。
这里的 make 命令带有三个参数,第一个是 ARCH,也就是指定架构,这里肯定是 arm;第二个
参数 CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如 arm-linux-gnueabihf-gcc 编译器的前缀就是“arm-linux-gnueabihf-”;最后一个参数 distclean 就是清除工程。
        第 3 行也使用了 make 命令,用于配置 uboot。同样有三个参数,不同的是,最后一个参数
mx6ull_14x14_ddr512_emmc_defconfig。前面说了 uboot bootloader 的一种,可以用来引导 Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构
和外设,比如 USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所
以在编译 uboot 之前,一定要根据自己的需求配置 uboot mx6ull_14x14_ddr512_emmc_defconfig 就是正点原子针对 I.MX6U-ALPHA EMMC 核心板编写的配置文件,这个配置文件在 uboot 源码的 configs 目录中。在 uboot 中,通过“make xxx_defconfig”来配置 ubootxxx_defconfig 就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。
        第 4 行有 4 个参数,用于编译 uboot,通过第 3 行配置好 uboot 以后就可以直接“make”编
uboot 了。其中 V=1 用于设置编译过程的信息输出级别;-j 用于设置主机使用多少线程编译
uboot,最好设置成我们虚拟机所设置的核心数,如果在 VMware 里面给虚拟就分配了 4 个核,
那么使用-j4 是最合适的,这样 4 个核都会一起编译。
        使用 chmod 命令给予 mx6ull_alientek_emmc.sh 文件可执行权限,然后就可以使用这个 shell 脚本文件来重新编译 uboot,命令如下:
./mx6ull_alientek_emmc.sh

3.uboot烧写与启动

        uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将 uboot
烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写,命令如
下:
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!
        等待烧写完成,完成以后将 SD 卡插到 I.MX6U-ALPHA 开发板上,BOOT 设置从 SD 卡启
动,使用 USB 线将 USB_TTL 和电脑连接,也就是将开发板的串口 1 连接到电脑上。打开
MobaXterm,设置好串口参数并打开,最后复位开发板。在 MobaXterm 上出现“Hit any key to
stop autoboot: ”倒计时的时候按下键盘上的回车键,默认是 3 秒倒计时,在 3 秒倒计时结束以
后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核了。如果在 3 秒倒计时
结束之前按下回车键,那么就会进入 uboot 的命令行模式,
        当进入到 uboot 的命令行模式以后,左侧会出现一个“=>”标志。
        uboot 启动的时候会输出一些信息,这些信息如下所示:
1 U-Boot 2016.03-gd3f0479 (Aug 07 2020 - 20:47:37 +0800)
2 
3 CPU: Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
4 CPU: Industrial temperature grade (-40C to 105C) at 51C
5 Reset cause: POR
6 Board: I.MX6U ALPHA|MINI
7 I2C: ready
8 DRAM: 512 MiB
9 MMC: FSL_SDHC: 0, FSL_SDHC: 1
10 Display: ATK-LCD-7-1024x600 (1024x600)
11 Video: 1024x600x24
12 In: serial
13 Out: serial
14 Err: serial
15 switch to partitions #0, OK
16 mmc1(part 0) is current device
17 Net: FEC1
18 Error: FEC1 address not set.
19
20 Normal Boot
21 Hit any key to stop autoboot: 0
22 =>
        第 1 行是 uboot 版本号和编译时间,可以看出,当前的 uboot 版本号是 2016.03,编译时
间是 2020 8 7 日凌晨 20 47 分。
        第 3 和第 4 行是 CPU 信息,可以看出当前使用的 CPU 是飞思卡尔的 I.MX6ULLI.MX
前属于飞思卡尔,然而飞思卡尔被 NXP 收购了),频率为 792MHz,但是此时运行在 396MHz
这颗芯片是工业级的,结温为-40°C~105°C
        第 5 行是复位原因,当前的复位原因是 PORI.MX6ULL 芯片上有个 POR_B 引脚,将这
个引脚拉低即可复位 I.MX6ULL
        第 6 行是板子名字,当前的板子名字为“I.MX6U ALPHA|MINI”。
        第 7 行提示 I2C 准备就绪。
        第 8 行提示当前板子的 DRAM(内存)为 512MB,如果是 NAND 版本的话内存为 256MB
        第 9 行提示当前有两个 MMC/SD 卡控制器:FSL_SDHC(0)FSL_SDHC(1)I.MX6ULL
支持两个 MMC/SD,正点原子的 I.MX6ULL EMMC 核心板上 FSL_SDHC(0)接的 SD(TF)卡,
FSL_SDHC(1)接的 EMMC
        第 10 和第 11 行是 LCD 型号,当前的 LCD 型号是 ATK-LCD-7-1024x600 (1024x600),分
辨率为 1024x600,格式为 RGB888(24 )
        第 12~14 是标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终
端。
        第 15 16 行是切换到 emmc 的第 0 个分区上,因为当前的 uboot emmc 版本的,也就
是从 emmc 启动的。我们只是为了方便将其烧写到了 SD 卡上,但是它的“内心”还是 EMMC
的。所以 uboot 启动以后会将 emmc 作为默认存储器,当然了,你也可以将 SD 卡作为 uboot
存储器,这个我们后面会讲解怎么做。
        第 17 行是网口信息,提示我们当前使用的 FEC1 这个网口,I.MX6ULL 支持两个网口。
        第 18 行提示 FEC1 网卡地址没有设置,后面我们会讲解如何在 uboot 里面设置网卡地址。
        第 20 行提示正常启动,也就是说 uboot 要从 emmc 里面读取环境变量和参数信息启动 Linux
内核了。
        第 21 行是倒计时提示,默认倒计时 3 秒,倒计时结束之前按下回车键就会进入 Linux 命令
行模式。如果在倒计时结束以后没有按下回车键,那么 Linux 内核就会启动,Linux 内核一旦启
动,uboot 就会寿终正寝。
        这个就是 uboot 默认输出信息的含义,NAND 版本的 uboot 也是类似的,只是 NAND 版本
的就没有 EMMC/SD 相关信息了,取而代之的就是 NAND 的信息,比如 NAND 容量大小信息。
uboot 是来干活的,我们现在已经进入 uboot 的命令行模式了,进入命令行模式以后就可以
uboot 发号施令了。当然了,不能随便发号施令,得看看 uboot 支持哪些命令,然后使用这些
uboot 所支持的命令来做一些工作。下一节就讲解 uboot 命令的使用。

4.uboot的使用

        进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot
支持的命令。
        uboot 是可配置的,需要什么命令就使能什么命令。目前所使用的命令是正点原子提供的 uboot 中使能的命令,uboot 支持的命令还有很多,而且也可以在 uboot 中自定义命令。
        以“bootz”这个命令为例,我们输入如下命令即可查看“bootz”这个命令的用法:
? bootz 或 help bootz

4.1信息查询命令

bdinfo 命令,此命令用于查看板子信息,直接输入“bdinfo”即可。

        可以得出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息。
        命令“printenv用于输出环境变量信息,uboot 也支持 TAB 键自动补全功能,输入“print
然后按下 TAB 键就会自动补全命令,直接输入“print”也可以.
        命令 version 用于查看 uboot 的版本号.

4.2 环境变量操作

        环境变量的操作涉及到两个命令:setenv saveenv,命令 setenv 用于设置或者修改环境变
量的值。命令 saveenv 用于保存修改后的环境变量,一般环境变量是存放在外部 flash 中的,
uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM
中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则的话
uboot 下一次重启会继续使用以前的环境变量值。
        比如我们要将环境变量 bootdelay 改为 5,就可以使用如下所示命令:
setenv bootdelay 5
saveenv
        有时候我们修改的环境变量值可能会有空格,比如 bootcmdbootargs 等,这个时候环境变
量值就得用单引号括起来,比如下面修改环境变量 bootargs 的值:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv

新建环境变量

setenv author zuozhongkai
saveenv

删除环境变量

setenv author
saveenv

内存操作命令

        内存操作命令就是用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 mdnm
mmmwcp cmp。该部分并不是重点,使用时网上搜索即可,故不再详细讲解。uboot 命令中的数字都是十六进制的!不是十进制的!

网络操作命令

        uboot 是支持网络的,我们在移植 uboot 的时候一般都要调通网络功能,因为在移植 linux
kernel 的时候需要使用到 uboot 的网络功能做调试。uboot 支持大量的网络相关命令,比如 dhcp、ping、nfs tftpboot,我们接下来依次学习一下这几个和网络有关的命令。
        在使用 uboot 的网络功能之前先用网线将开发板的 ENET2 接口和电脑或者路由器连接起
来,I.MX6U-ALPHA 开发板有两个网口:ENET1 ENET2,一定要连接 ENET2,不能连接错
了,ENET2 接口如图所示。
setenv ipaddr 192.168.18.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.18.1
setenv netmask 255.255.255.0
setenv serverip 192.168.18.211
saveenv
        注意,网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP
地址在同一个网段内,比如我现在的开发板和电脑都在 192.168.1.0 这个网段内,所以设置开
发板的 IP 地址为 192.168.1.50,我的 Ubuntu 主机的地址为 192.168.1.253,因此 serverip 就是
192.168.1.253ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个
开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关
的环境变量以后就可以使用网络相关命令了。
        
ping 192.168.18.211
        注意!只能在 uboot ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
        dhcp 用于从路由器获取 IP 地址,前提得开发板连接到路由器上的,如果开发板是和电脑
直连的,那么 dhcp 命令就会失效。直接输入 dhcp 命令即可通过路由器获取到 IP 地址.DHCP 不单单是获取 IP 地址,其还会通过 TFTP 来启动 linux 内核.
        nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,
比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu
linux 镜像和设备树下载到开发板的 DRAM 中。这样做的目的是为了方便调试 linux 镜像和
设备树,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。原因是嵌入式 linux
开发不像单片机开发,可以直接通过 JLINK STLink 等仿真器将代码直接烧写到单片机内部
flash 中,嵌入式 Linux 通常是烧写到 EMMCNAND FlashSPI Flash 等外置 flash 中,但是
嵌入式 Linux 开发也没有 MDKIAR 这样的 IDE,更没有烧写算法,因此不可能通过点击一个
download”按钮就将固件烧写到外部 flash 中。虽然半导体厂商一般都会提供一个烧写固件的
软件,但是这个软件使用起来比较复杂,这个烧写软件一般用于量产的。其远没有 MDKIAR
的一键下载方便,在 Linux 内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这
个时候网络调试的优势就显现出来了,可以通过网络将编译好的 linux 镜像和设备树文件下载
DRAM 中,然后就可以直接运行。
        我们一般使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用
之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过
NFS 访问的文件都需要放到这个 NFS 目录中。Ubuntu NFS 服务开启我们在 4.2.1 小节已经
详细讲解过了,包括 NFS 文件目录的创建,如果忘记的话可以去查看一下 4.2.1 小节。我设置
/home/hequanxin/linux/nfs 这个目录为我的 NFS 文件目录。
        这 里我们将正点原子官方编译出来的 Linux 镜像文件 zImage 下载到开发板 DRAM 0x80800000 这个地址处。正点原子编译出来的 zImage 文件已经放到了开发板光盘中,路径为:8、系统镜像->1、出厂系统镜像->2kernel 镜像\linux-imx-4.1.15-2.1.0-gbfed875-v1.6 ->zImage。将文件 zImage 通 过 FileZilla 发 送 到 Ubuntu 中 的 NFS 目 录 下 , 比 如 我 的 就 是 放 到 /home/hequanxin/linux/nfs 这个目录下.
        准备好以后就可以使用 nfs 命令来将 zImage 下载到开发板 DRAM 0X80800000 地址处,
命令如下:
nfs 80800000 192.168.18.211:/home/hequanxin/linux/nfs/zImage
        tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令
使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器,
需要安装 tftp-hpa tftpd-hpa,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
        和 NFS 一样,TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如
下:
mkdir /home/hequanxin/linux/tftpboot
chmod 777 /home/hequanxin/linux/tftpboot
        这 样 我 就 在 我 的 电 脑 上 创 建 了 一 个 名 为 tftpboot 的目录 ( 文 件 夹 ) , 路 径 为
/home/hequanxin/linux/tftpboot。注意!我们要给 tftpboot 文件夹权限,否则的话 uboot 不能从
tftpboot 文件夹里面下载文件。
        最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行
创建,然后在里面输入如下内容
1 server tftp
2 {
3 socket_type = dgram
4 protocol = udp
5 wait = yes
6 user = root
7 server = /usr/sbin/in.tftpd
8 server_args = -s /home/hequanxin/linux/tftpboot/
9 disable = no
10 per_source = 11
11 cps = 100 2
12 flags = IPv4
13 }
启动TFTP服务
sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/home/hequanxin/linux/tftpboot"TFTP_ADDRESS=":69" TFTP_OPTIONS="-l -c -s"重启TFTP
sudo service tftpd-hpa restart将nfs中的zimage拷贝到tftpboot目录下,在开发板uboot下输入以下命令即可 
tftp 80800000 zImage
        uboot 支持 EMMC SD 卡,因此也要提供 EMMC SD 卡的操作命令。一般认为 EMMC
SD 卡是同一个东西,所以没有特殊说明,本教程统一使用 MMC 来代指 EMMC SD 卡。
uboot 中常用于操作 MMC 设备的命令为“mmc”。关于指令不做过多讲解。
        如果 EMMC 里 面烧写了 Linux 系统的话,EMMC 是有 3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放 Linux 镜像文件和设备树,第 2 个分区存放根文件系统。但是在图 中只有两个分区,那 是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的。一个新的 SD 卡默认只有一个分区,那就是分区 0,所以前面讲解的 uboot 烧写到 SD 卡,其实就是将 u-boot.bin烧写到了 SD 卡的分区 0 里面。后面学习 Linux 内核移植的时候再讲解怎么在 SD 卡中创建并格式化第二个分区,并将 Linux 镜像文件和设备树文件存放到第二个分区中。
        千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!
FAT 格式文件系统操作命令
fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息,格式如下
fatinfo mmc 1:1fatls 命令用于查询 FAT 格式设备的目录和文件信息
fatls mmc 1:1fstype 用于查看 MMC 设备某个分区的文件系统格式
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2fatload 命令用于将指定的文件读取到 DRAM 中
fatload mmc 1:1 80800000 zImagefatwirte 命令用于将 DRAM 中的数据写入到 MMC 设备中
注意!uboot 默认没有使能 fatwrite 命令,需要修改板子配置头文件,比如 mx6ullevk.h、
mx6ull_alientek_emmc.h 等等,板子不同,其配置头文件也不同。找到自己开发板对应的配置头
文件然后添加如下一行宏定义来使能 fatwrite 命令
#define CONFIG_FAT_WRITE /* 使能 fatwrite 命令 */
fatwrite mmc 1:1 80800000 zImage 6788f8 (先用TFTP下载到DRAM,会显示镜像的大小)
EXT 格式文件系统操作命令
        uboot 有 ext2 ext4 这两种格式的文件系统的操作命令,常用的就四个命令,分别为:
ext2loadext2lsext4loadext4ls ext4write。这些命令的含义和使用与 fatloadfatls fatwrite 一样,只是 ext2 ext4 都是针对 ext 文件系统的。比如 ext4ls 命令,EMMC 的分区 2 就是 ext4 格式的,使用 ext4ls 就可以查询 EMMC 的分区 2 中的文件和目录,输入命令:
ext4ls mmc 1:2
BOOT 操作命令
        uboot 的本质工作是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。常
用的跟 boot 有关的命令有:bootzbootm boot
1bootz 命令
        要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要
将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文
件拷贝到 DRAM,也可以通过 nfs 或者 tftp Linux 镜像文件和设备树文件下载到 DRAM 中。
不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令
来启动,bootz 命令用于启动 zImage 镜像文件。
Linux 镜像文件和设备树都准备好了,我们先学习如何通过网络启动 Linux,使用 tftp 命令
将zImage 下载到DRAM的0X80800000地址处,然后将设备树imx6ull-14x14-emmc-7-1024x600-
c.dtb 下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动,命令如下:
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 80800000 - 83000000
        上图就是我们通过 tftp bootz 命令来从网络启动 Linux 系统,如果我们要从 EMMC 中启
Linux 系统的话只需要使用命令 fatload zImage 和 imx6ull-14x14-emmc-4.3-480x272-c.dtb 从 EMMC 的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动即可。先使用命令 fatls 查看要
EMMC 的分区 1 中有没有 Linux 镜像文件和设备树文件,如果没有的话参考讲解的 fatwrite 命令将 tftpboot 中的 zImage 和 imx6ull-14x14-emmc-4.3-480x272-c.dtb 文件烧写 到 EMMC 的分区 1 中。然后使用命令 fatload zImage imx6ull-14x14-emmc-7-1024x600-c.dtb 文件拷贝到 DRAM 中,地址分别为 0X80800000 0X83000000,最后使用 bootz 启动,命令如下:
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 80800000 - 83000000
2bootm 命令
        bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件。如果不使用设备树的话
启动 Linux 内核的命令如下:
bootm addr
addr 是 uImage 镜像在 DRAM 中的首地址。
如果要使用设备树,那么 bootm 命令和 bootz 一样
3boot 命令
        boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux
统,bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命
令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可
以修改的。比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为“tftp
80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 -
83000000”,然后使用 saveenv bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动
Linux 系统,命令如下
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb; 
bootz 80800000 - 83000000'
saveenv
boot
        如果想从 EMMC 启动那就设置 bootcmd 为“fatload mmc 1:1 80800000 zImage; fatload mmc
1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000”,然后使用 boot命令启动即可,命令如下:
setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-
emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'
savenev
boot

4.其他常用命令

1reset 命令
2go 命令
        addr 是应用在 DRAM 中的首地址,我们可以编译一下裸机例程的实验 13_printf,然后将编
译出来的 printf.bin 拷贝到 Ubuntu 中的 tftpboot 文件夹里面,注意,这里要拷贝 printf.bin 文件,
不需要在前面添加 IVT 信息,因为 uboot 已经初始化好了 DDR 了。使用 tftp 命令将 printf.bin
下载到开发板 DRAM 0X87800000 地址处,因为裸机例程的链接首地址就是 0X87800000
最后使用 go 命令启动 printf.bin 这个应用,命令如下:
tftp 87800000 printf.bin
go 87800000
通过 go 命令我们就可以在 uboot 中运行裸机例程。
3run 命令
        run 命令用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行 bootcmd
的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量。在后面调试 Linux
统的时候常常要在网络启动和 EMMC/NAND 启动之间来回切换,而 bootcmd 只能保存一种启
动方式,如果要换另外一种启动方式的话就得重写 bootcmd,会很麻烦。这里我们就可以通过
自定义环境变量来实现不同的启动方式,比如定义环境变量 mybootemmc 表示从 emmc 启动,
定义 mybootnet 表示从网络启动,定义 mybootnand 表示从 NAND 启动。如果要切换启动方式
的话只需要运行“run mybootxxx(xxx emmcnet nand)”即可。
setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-
14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
setenv mybootnand 'nand read 80800000 4000000 800000;nand read 83000000 6000000 
100000;bootz 80800000 - 83000000'
setenv mybootnet 'tftp 80800000 zImage; tftp 83000000imx6ull-14x14-emmc-7-1024x600-c.dtb; 
bootz 80800000 - 83000000'
saveenv启动指令
run mybootemmc
4mtest 命令
        mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR
http://www.xdnf.cn/news/17601.html

相关文章:

  • 分布微服务电商订单系统Rust编码开发[下]
  • MySQL的逻辑架构和SQL执行的流程:
  • Stream流应用
  • MPLS特性之PHP(Penultimate Hop Popping)
  • afsim2.9_使用QtCreator和VSCode编译
  • 【杂谈】-智能代理+可观察性:构建下一代复杂系统监控体系
  • 《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
  • AUTOSAR进阶图解==>AUTOSAR_ASWS_TransformerGeneral
  • 关于linux操作系统下的文件操作方法:
  • ThinkPHP8学习篇(二):路由
  • 20250810 | 深度学习入门笔记1
  • 从色彩心理学看嵌入式设备UI设计:原则、挑战与实践
  • C语言-动态内存分配函数、变量属性(全局、局部、静态、只读)、C语言内存结构;
  • go加速配置(下载第三方库)
  • [0CTF 2016]piapiapia
  • 【秋招笔试】2025.08.09美团秋招研发岗机考真题-第二题
  • 在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合
  • 【2025CVPR-图象分类方向】ProAPO:视觉分类的渐进式自动提示优化
  • 【MySQL——第三章 :MySQL库表操作】
  • STM32 DMAMUX 平台驱动程序注册
  • 机器学习——DBSCAN 聚类算法 + 标准化
  • 解读 GPT-5:从“博士级 AI 专家”能力到 OpenAI API Key 获取与实践(提示工程→性能调优全流程)
  • 【递归、搜索与回溯算法】深度优先搜索
  • Spring AOP 底层实现(面试重点难点)
  • 结构化记忆、知识图谱与动态遗忘机制在医疗AI中的应用探析(上)
  • scikit-learn/sklearn学习|线性回归解读
  • 深度相机---双目深度相机
  • 神经机器翻译(NMT)框架:编码器-解码器(Encoder-Decoder)结构详解
  • tlias智能学习辅助系统--原理篇-SpringBoot原理-自动配置-自定义starter
  • Agent在游戏行业的应用:NPC智能化与游戏体验提升