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

53. Uboot命令使用

一、uboot启动log简析

1、以后带有调试性质的开发,uboot都是烧写到SD卡中的,因为方便烧写。

二、uboot命令使用

2.1、help命令
查看某一个命令帮助信息,?命令名

2.2、信息查询
1、bdinfo
bdinfo

arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x20000000
eth0name    = FEC1
ethaddr     = (not set)
current eth = FEC1
ip_addr     = <NULL>
baudrate    = 115200 bps
TLB addr    = 0x9FFF0000
relocaddr   = 0x9FF51000
reloc off   = 0x18751000
irq_sp      = 0x9EF4EEA0
sp start    = 0x9EF4EE90
FB base     = 0x00000000
2、printenv命令 重要
printenv
查看当前板子的环境变量。

2.3、setenv命令 重点
设置环境变量,也可以自定义环境变量,也可以删除环境变量

2.4、saveenv命令 重点
保存环境变量。

2.5、新建环境变量

2.6、删除环境变量

2.7、内存操作命令
1、md命令

md.b 0x80000000 20

80000000: c0 3b 39 98 00 00 00 01 00 00 01 50 00 0a 00 05 .;9…P…
80000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …

md.b 80000100 14

80000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
80000110: 00 00 00 00 …

md.w 80000000 14

80000000: 3bc0 9839 0000 0100 0000 5001 0a00 0500 .;9…P…
80000010: 0000 0000 0000 0000 0000 0000 0000 0000 …
80000020: 0000 0000 0e00 0480 …

md.l 80000000 14

80000000: 98393bc0 01000000 50010000 05000a00 .;9…P…
80000010: 00000000 00000000 00000000 00000000 …
80000020: 00000000 04800e00 02000000 09c80e00 …
80000030: 02000000 03800e00 02000000 00000000 …
80000040: 02000000 00800e00 02000000 01000000 …
2、nm命令

3、mm命令
mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令 nm 的话地址不会自增。比如以.l 格式修改从地址 0x80000000 开始的连续 3 个内存块(3*4=12个字节)的数据为 0X05050505,

4、mw命令

5、cp命令

6、cmp命令

2.8、网络操作命令
网线插如到ENET2上,保证开发板和电脑处于同一个网段内。
1、ping命令 重点

=> setenv ethaddr 00:04:9f:04:d2:35
=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
=> bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x20000000
eth0name    = FEC1
ethaddr     = 00:04:9f:04:d2:35
current eth = FEC1
ip_addr     = <NULL>
baudrate    = 115200 bps
TLB addr    = 0x9FFF0000
relocaddr   = 0x9FF51000
reloc off   = 0x18751000
irq_sp      = 0x9EF4EEA0
sp start    = 0x9EF4EE90
FB base     = 0x00000000
=> bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x20000000
eth0name    = FEC1
ethaddr     = 00:04:9f:04:d2:35
current eth = FEC1
ip_addr     = 192.168.32.10
baudrate    = 115200 bps
TLB addr    = 0x9FFF0000
relocaddr   = 0x9FF51000
reloc off   = 0x18751000
irq_sp      = 0x9EF4EEA0
sp start    = 0x9EF4EE90
FB base     = 0x00000000
setenv ipaddr 192.168.1.50 
setenv ethaddr 00:04:9f:04:d2:35 
setenv gatewayip 192.168.1.1 
setenv netmask 255.255.255.0 
setenv serverip 192.168.1.250 
saveenv 
=> ping 192.168.1.60
Using FEC1 device
host 192.168.1.60 is alive

只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
2、dhcp命令

3、nfs命令 重点
目的就是为了调试程序。
nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。这样做的目的是为了方便调试 linux 镜像和设备树,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。原因是嵌入式 linux开发不像单片机开发,可以直接通过 JLINK 或 STLink 等仿真器将代码直接烧写到单片机内部的 flash 中,嵌入式 Linux 通常是烧写到 EMMC、 NAND Flash、 SPI Flash 等外置 flash 中,但是嵌入式 Linux 开发也没有 MDK, IAR 这样的 IDE,更没有烧写算法,因此不可能通过点击一个“download”按钮就将固件烧写到外部 flash 中。虽然半导体厂商一般都会提供一个烧写固件的软件,但是这个软件使用起来比较复杂,这个烧写软件一般用于量产的。其远没有 MDK、 IAR的一键下载方便,在 Linux 内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的 linux 镜像和设备树文件下载到 DRAM 中,然后就可以直接运行。

4、tftp命令 重点
tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议, Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa
2.9 EMMC/SD卡操作命令
1、mmc命令
SD卡、emmc都可以识别

mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1 (eMMC)
mmc dev 0
switch to partitions #0, OK
mmc0 is current device

//SD卡

mmc info
Device: FSL_SDHC
Manufacturer ID: 3
OEM: 5344
Name: SU08G
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes

//emmc

mmc info
Device: FSL_SDHC
Manufacturer ID: 15
OEM: 100
Name: 8GTF4
Tran Speed: 52000000
Rd Block Len: 512
MMC version 4.0
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 8-bit
Erase Group Size: 512 KiB

2、mmc info命令

3、mmc rescan命令

4、mmc list命令

5、mmc dev命令

6、mmc part命令
有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看 EMMC 的分区情况,输入如下命令:

mmc dev 1 
mmc part 
=> mmc part

Partition Map for MMC device 1  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     20480           262144          c2db7502-01     0c
  2     282624          14987264        c2db7502-02     83

此时 EMMC 有两个分区,扇区 20480~1024000 为第一个分区,扇区 1228800~6504448 为第二个分区。如果 EMMC 里面烧写了 Linux 系统的话, EMMC 是有3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放 Linux 镜像文件和设备树,第 2 个分区存放根文件系统。但是在图 30.4.5.6 中只有两个分区,那是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的。一个新的 SD 卡默认只有一个分区,那就是分区 0,所以前面讲解的 uboot 烧写到 SD 卡,其实就是将 u-boot.bin 烧写到了 SD 卡的分区 0 里面。后面学习 Linux 内核移植的时候再讲解怎么在 SD 卡中创建并格式化第二个分区,并将 Linux 镜像文件和设备树文件存放到第二个分区中。

7、mmc read命令
mmc read 命令用于读取 mmc 设备的数据,命令格式如下:
mmc read addr blk# cnt
addr 是数据读取到 DRAM 中的地址, blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区, cnt 是要读取的块数量(十六进制)。比如从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处,命令如下:

mmc dev 1 0 
mmc read 80800000 600 10
md.b 80800000 200
=> md.b 80800000 200
80800000: ed 7c 99 0f 62 61 75 64 72 61 74 65 3d 31 31 35    .|..baudrate=115
80800010: 32 30 30 00 62 6f 61 72 64 5f 6e 61 6d 65 3d 45    200.board_name=E
80800020: 56 4b 00 62 6f 61 72 64 5f 72 65 76 3d 31 34 58    VK.board_rev=14X
80800030: 31 34 00 62 6f 6f 74 5f 66 64 74 3d 74 72 79 00    14.boot_fdt=try.
80800040: 62 6f 6f 74 63 6d 64 3d 72 75 6e 20 66 69 6e 64    bootcmd=run find
80800050: 66 64 74 3b 6d 6d 63 20 64 65 76 20 24 7b 6d 6d    fdt;mmc dev ${mm
80800060: 63 64 65 76 7d 3b 6d 6d 63 20 64 65 76 20 24 7b    cdev};mmc dev ${
80800070: 6d 6d 63 64 65 76 7d 3b 20 69 66 20 6d 6d 63 20    mmcdev}; if mmc
80800080: 72 65 73 63 61 6e 3b 20 74 68 65 6e 20 69 66 20    rescan; then if
80800090: 72 75 6e 20 6c 6f 61 64 62 6f 6f 74 73 63 72 69    run loadbootscri
808000a0: 70 74 3b 20 74 68 65 6e 20 72 75 6e 20 62 6f 6f    pt; then run boo
808000b0: 74 73 63 72 69 70 74 3b 20 65 6c 73 65 20 69 66    tscript; else if

可以看到“D$…baudrate=115200.board_name=EVK.board_rev=14X14.”等字样,这个就是 uboot 中的环境变量。 EMMC 核心板 uboot 环境变量的存储起始地址就是1536*512=786432。

8、mmc write命令
要将数据写到 MMC 设备里面,可以使用命令“mmc write”

mmc dev 1
mmc write 80800000 2EF

9、mmc erase命令 最好不要使用!!

2.10 FAT格式文件系统操作命令
对于I.MX6U来说,SD/EMMC分为三个分区:
第一个:存放uboot
第二个:存放Linux zImage,.dtb。FAT
第三个:系统的根文件系统,EXT4

1、fatinfo命令

=> fatinfo mmc 1:1
Interface:  MMC
  Device 1: Vendor: Man 000015 Snr 453cbcaa Rev: 0.6 Prod: 8GTF4R
            Type: Removable Hard Disk
            Capacity: 7456.0 MB = 7.2 GB (15269888 x 512)
Filesystem: FAT32 "NO NAME    "

2、fatls命令

=> fatls mmc 1:1
  6788320   zimage
    38859   imx6ull-14x14-emmc-4.3-480x272-c.dtb
    38859   imx6ull-14x14-emmc-4.3-800x480-c.dtb
    38859   imx6ull-14x14-emmc-7-800x480-c.dtb
    38859   imx6ull-14x14-emmc-7-1024x600-c.dtb
    38859   imx6ull-14x14-emmc-10.1-1280x800-c.dtb
    39691   imx6ull-14x14-emmc-hdmi.dtb
    39599   imx6ull-14x14-emmc-vga.dtb

3、fstype命令

=> fstype mmc 1:1
fat
=> fstype mmc 1:2
ext4

4、fatload命令
fatload 命令用于将指定的文件读取到 DRAM 中,命令格式如下: fatload [<dev[:part]> [ [ [bytes [pos]]]]]
interface 为接口,比如 mmc, dev 是设备号, part 是分区, addr 是保存在 DRAM 中的起始地址, filename 是要读取的文件名字。 bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。 pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。我们将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址处,命令如下: fatload mmc 1:1 80800000 zImage操作过程:

=> fatload mmc 1:1 80800000 zImage
reading zImage
6788320 bytes read in 221 ms (29.3 MiB/s)

从 EMMC 里面读取的,而 EMMC 是 8 位的,速度肯定会很快的。
5、fatwrite命令
注意! uboot 默认没有使能 fatwrite 命令,需要修改板子配置头文件,比如 mx6ullevk.h、mx6ull_alientek_emmc.h 等等,板子不同,其配置头文件也不同。

2.11 EXT格式文件系统操作命令
1、ext4ls命令

=> ext4ls mmc 1:2
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
<DIR>       4096 bin
<DIR>       4096 boot
<DIR>       4096 dev
<DIR>       4096 etc
<DIR>       4096 home
<DIR>       4096 lib
<DIR>       4096 media
<DIR>       4096 mnt
<DIR>       4096 opt
<DIR>       4096 proc
<DIR>       4096 run
<DIR>       4096 sbin
<DIR>       4096 sys
<SYM>          8 tmp
<DIR>       4096 usr
<DIR>       4096 var
<DIR>       4096 .cache
<DIR>       4096 .local
<DIR>       4096 .config

2.12 NAND操作命令

1、nand info命令

2、nand write命令

3、nand erase命令

4、nand write命令

5、nand read命令

2.13 BOOT操作命令
1、booz命令
要启动Linux必须将zImage,dtb放到DRAM。

2、bootm命令

3、boot命令

2.14 其他命令
1、reset命令

2、go命令

3、run命令

4、mtest命令


http://www.kler.cn/a/529641.html

相关文章:

  • 基于RAG的知识库问答系统
  • 基于Python的简单企业维修管理系统的设计与实现
  • Mybatis-plus缓存
  • Docker Hello World
  • Rust 条件语句
  • “LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”
  • 通过 Docker 部署 Mastodon 服务器 的教程
  • Vue.js 使用 `teleport` 实现全局挂载
  • 低成本、高附加值,具有较强的可扩展性和流通便利性的行业
  • 数据建模中的Chasm 陷阱
  • 更高效地使用Adobe软件,提升创作质量
  • Perl语言的函数实现
  • Echarts 封装通用组件
  • mysql大表的解决方案,及Hive分页查询
  • 康德哲学与自组织思想的渊源:从《判断力批判》到系统论的桥梁
  • 注解(Annotation)
  • 【深度学习】softmax回归的简洁实现
  • JPA中基本类型集合的映射与操作实例
  • [SAP ABAP] SE11 / SE16N 修改标准表(慎用)
  • java练习(5)
  • GMSL 明星产品之 MAX96724
  • CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
  • DeepSeek为什么超越了OpenAI?从“存在主义之问”看AI的觉醒
  • 【Elasticsearch】_all 查询
  • Arduino大师练成手册 -- 控制 AS608 指纹识别模块
  • 低空经济专业课程详解