uboot的常用命令及用法

本文详细介绍了U-Boot环境下的各种命令,包括帮助、重启、内核启动、环境变量操作、内存读写、网络文件传输等,适用于嵌入式系统的开发者理解和掌握U-Boot的工作原理和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://blog.youkuaiyun.com/jklinux/article/details/72638830

https://blog.youkuaiyun.com/dagefeijiqumeiguo/article/details/51314856

 

uboot是bootloader的一种,主要是用于引导内核启动. 
uboot除此功能外, 还带有很多其它功能. 功能是通过命令来调用.

uboot的命令:

    help   //列出当前uboot所有支持的命令
    help  命令   //查看指定命令的帮助

    reset   //重启uboot

    bootm   //用于启动内核 
      用法: bootm 0x42000000   //从内存地址0x42000000启动内核, 启动前需把内核镜像uImage存放到指定的内存地址

    printenv    //打印所有环境变量的值
    printenv  环境变量名   //查看指定的环境变量值
      常用环境变量:
        bootdelay   // uboot启动后, 倒计时多少秒后自动执行环境变量bootcmd的语句
        bootcmd     // 倒计时到0后,自动执行里面的语句
        bootargs    // 是用于提供给内核的启动参数语句   

    setenv      //设置/修改/删除环境变量的值
      用法:
            setenv   环境变量名     //删除指定的环境变量
        setenv   myargs   "hello"  //设置环境变量myargs=hello, 如果环境变量没有会创建出来,如果已存则会修改它的值

    saveenv     //保存环境变量,环境变量修改过后必须执行此命令才可以保存起来,否则重启后环境变量就恢复了.

    loady    //用于从uart线下载文件到板上内存里(loadb, loads, loadx基本一样)
       用法:
        loady  0x40008000   //把下载的文件从内存地址0x40008000开始存放
        执行"loady 0x40008000"后, uboot就会进入等待状态,等着接收数据
        minicom具有通过uart传输文件的功能.
        按"ctrl+a", 松手后再按"s", 选择"ymodem", 在弹出的界面里按空格键选中要传的文件.

    md   内存地址   //用于查看内存地址上的值
        用法:
        md.b    0x40008000   100    //从内存地址0x40008000开始,查看0x100个字节并输出值
        md.w    0x40008000   100    //从内存地址0x40008000开始,查看0x100个16位值并输出值
        md.l    0x40008000   100    //从内存地址0x40008000开始,查看0x100个32位值并输出值     

    mw    //用于修改内存地址上的值
        用法:
        mw.b    0x40008000  0xab   100  //从内存地址0x40008000开始的0x100字节空间,设值为0xab
        mw.w    0x40008000  0xabcd 100  //从内存地址0x40008000开始的0x200字节空间,每16位值设为0xabcd
        mw.l    0x40008000  0xabcdef88 100    //从内存地址0x40008000开始的0x400字节空间,每32位值设为0xabcdef88       


    go   //执行指定内存地址上的指令
       用法:
        go  0x40008000    


    mmc   // sd/mmc接口设备(sd卡, emmc)操作命令, 按扇区操作(每扇区512字节)
       用法:
        mmc   read  addr  blk  cnt  //从mmc设备上的第blk个扇区开始,共读出cnt个扇区到内存地址addr上
        mmc  write  addr  blk  cnt  //把内存地址addr上的数据写入mmc设备的第blk个扇区,共cnt个扇区大小
        mmc  dev     //用于当看当前的mmc设备是第几个
        mmc  erase  blk  cnt    //把mmc设备的第blk个扇区开始清零,共清除cnt个扇区大小 
        mmc  part   //列出当前mmc设备的分区信息
        mmc  list   //列出所有的mmc设备信息


    ext4ls  //查看存储设备的ext2/3/4分区里的内容
       用法:
        ext4ls  mmc  0:2   //查看第0个存储设备的第二个分区

    ext4load //从ext2/3/4分区里读出文件到指定的内存地址
       用法:
        ext4load mmc 0:2 0x40008000 /uImage  //从第0个存储设备的第2个分区的根目录读出uImage文件到内存地址0x40008000

    fatls  //查看存储设备的fat分区里的内容
       用法:
        fatls  mmc  0:1   //查看第0个存储设备的第1个分区(fat分区)

    fatload //从fat分区里读出文件到指定的内存地址
       用法:
        fatload mmc 0:1 0x40008000 /uImage  //从第0个存储设备的第1个分区的根目录读出uImage文件到内存地址0x40008000   

    fatwrite  //把内存上的数据存储到fat分区的一个文件里
       用法:
        fatwrite mmc 0:1 0x40008000 /my.txt 0x35  //把内存地址0x40008000开始的0x35个字节数据写入到第0个设备的第1个分区里,文件名为my.txt


    run   //执行指定的环境变量里的语句
       用法:
        run  bootcmd  //执行环境变量bootcmd里的语句


    //如uboot上已驱动好网络设备并环境变设好IP及PC端IP,还可以使用以下命令:
    tftpboot  0x40008000  文件名   // 通过网络下载文件到内存地址0x40008000, PC端需配置好tftp服务器  
    nfs   0x40008000  pc端IP:/带路径的文件名   //pc端需配置好nfs服务器
    ping     ip  //检测网络是否通

 

指令: bootm

bootm  用于将内核镜像加载到内存的指定地址处

例:

bootm 0x82000000

查看和修改环境变量指令常用环境变量列表
 

bootdelay 执行自动启动(bootcmd中的命令)的等候秒数 
baudrate 串口控制台的波特率 
bootfile 默认的下载文件名 
bootargs 传递给Linux内核的启动参数 
bootcmd 自动启动时执行命令 
stdin 标准输入设备,  一般是串口  
stdout 标准输出,  一般是串口,也可是LCD(VGA)
stderr   标准出错,一般是串口,也可是LCD(VGA)
serverip TFTP服务器端的IP地址 
ipaddr 本地的IP地址  
ethaddr 以太网的MAC地址 
netmask 以太网的网络掩码 

gatewayip 以太网的网关

 

指令: setenvname value
第1个参数是环境变量的名称。  
第2个参数是要设置的值,如果没有第2个参数,表示删除这个环境变量
例:
setenv serverip 192.168.1.12//添加环境变量serverip 其值为 192.168.1.12
setenv serverip 192.168.1.20//在上一行的基础上把环境变量serverip 值重新赋为 192.168.1.20
setenv serverip  //把 serverip 变量删除

指令: saveenv保存环境变量

指令: printenv  查看环境变量
使用该命令返回:
 

bootdelay=1
baudrate=115200
bootfile="uImage"
filesize=6600EC
fileaddr=82000000
bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Jan 20 2015 - 15:46:38)
serverip=192.168.1.12
ipaddr=192.168.1.129
ethaddr=00:01:02:11:88:91
netmask=255.255.255.0
gatewayip=192.168.1.1

 

 

查看和修改内存值指令

查看内存命令 md
修改内存命令 mm
填充内存命令 mw
复制内存命令 cp
这些命令都可以带上后缀 “.b”(字节 byte),  ”.w”(字 word),  ”.l”(4字节 long)  为单位进行操作

指令: mw填充内存命令
mw[.b,.w,.l] address value [count]
表示以[.b,.w,.l]为单位往开始地址为address的内存填充count 个值为 value 的数据
例:
mw.b 82000000 ff 100000从地址0x82000000地址开始填充0x100000(1M字节)个值为0xff的数据

指令: md查看内存命令
md[.b,.w,.l] address [count]
表示以[.b,.w,.l]为单位显示从地址address开始的内存数据,显示的数据个数为count
例:
md.b 82000000  10显示从地址0x82000000地址开始的0x10个字节的数据
返回信息:
82000000: d3 2c b4 4b 2c d3 4b b4 d3 d3 b4 b4 d3 2c b4 4b    .,.K,.K......,.K

指令: mm修改内存命令
mm[.b,.w,.l] address 
表示以[.b,.w,.l]为单位从地址address开始修改内存数据,执行mm命令后,输入新数据后回车,地址会自动增加,按“CTRL + c”退出;
例: 把第一个字节数据0xd3修改为0xd4
mm.b 82000000
返回:
82000000: d3 ? d4
82000001: 2c ? 

指令: cp复制内存命令
cp[.b,.w,.l] source target [count]
表示以[.b,.w,.l]为单位从源地址source的内存复制count个数据到 目的地址 target的内存中去;



下载的指令
指令: tftp通过网口下载文件到设备
tftp  address  filename 把文件filename下载到地址address
例:
下载
tftp 0x82000000 u-boot-hi3520d.bin 把TFTP目录下名为u-boot-hi3520d.bin的文件拷贝到SDRAM的 82000000 地址

上传
tftp 0x82000000 flash 2000000 把SDRAM的 82000000 地址开始的 0x2000000(32M)字节的拷贝到把TFTP目录下命名为flash(flash名字是否可变)




Flash操作的指令(不同的Flash不同)
指令: eraseFlash擦除命令 
erase  start  end 擦除的范围为 start – end
erase  start+len 擦除的范围为 start – (start+len-1)
erase  all 擦除所有
例:
对于SPI NOR FLASH
sf erase 0 100000 擦除flash 0 - 0x100000 的数据

指令: writeFlash烧写命令
write addr off size将SDRAM的 addr 地址处的 size 字节的数据烧写到 flash 的 off 偏移地址
例:
对于SPI NOR FLASH
sf write 82000000 0 100000 把SDRAM地址 0x82000000 处 0x100000(1M字节)的数据烧写到 flash 的 0 偏移地址

指令: readFlash读取命令
read addr off size从 Flash 的 off 偏移地址处读取 size 字节的数据到SDRAM的 addr地址
例:
对于SPI NOR FLASH
sf read 82000000 0 2000000 从 flash 的 0 偏移地址出读取 0x2000000(32M)字节的数据到 SDRAM的 82000000 地址

<think>好的,我现在需要回答用户关于U-Boot的gpt命令的问题。首先,我得回忆一下U-Boot的相关知识,尤其是GPT分区表的部分。U-Boot是嵌入式系统中常用的引导加载程序,负责初始化硬件并加载操作系统。用户提到的gpt命令应该与处理GPT分区表有关。 首先,我需要确认gpt命令在U-Boot中的具体功能。记得U-Boot提供了很多命令来管理存储设备,比如mmc、usb等,而GPT(GUID Partition Table)是一种分区表格式,取代了旧的MBR。所以gpt命令可能用于读写、验证或操作GPT分区。 接下来,我需要分步骤整理gpt命令的常见用法。例如,创建分区表、查看分区信息、重写分区表、验证分区表等。可能还有相关的子命令,比如gpt read、gpt write、gpt verify等。 然后,我需要考虑用户可能的实际应用场景。比如在嵌入式开发中,用户可能需要通过U-Boot的命令行来手动调整分区,或者在烧写系统时验证分区是否正确。这时候使用gpt命令就很有帮助。 另外,要注意语法是否正确,比如设备号、分区表的位置等参数如何指定。例如,使用gpt read mmc 0 $part_addr来从MMC设备0读取分区表到内存地址$part_addr。 还需要提醒用户注意事项,比如操作分区表可能导致数据丢失,确保设备号正确,以及备份重要数据。这些安全提示对用户来说非常重要,避免误操作。 可能还需要举例说明,让用户更清楚如何使用这些命令。例如,如何查看当前设备的分区信息,或者如何恢复分区表。如果有相关的环境变量需要设置,比如分区表的内存地址,也要说明清楚。 最后,检查是否有遗漏的功能或常见的错误处理情况。比如,如果gpt命令执行失败,可能的原因是什么,如何排查问题,比如设备未初始化,地址错误等。 总结一下,我需要结构清晰地介绍gpt命令的用途、常见用法、参数说明、示例以及注意事项,确保用户能够理解并正确使用这些命令。同时,按照用户的要求,使用中文,保持条理清晰,逐步解释。</think>U-Boot的`gpt`命令是用于管理**GUID分区表(GPT)**的工具,常用于嵌入式系统开发中对存储设备(如eMMC、SD卡、硬盘等)进行分区操作。以下是逐步说明: --- ### **一、gpt命令核心功能** 1. **读取GPT分区表** - 语法:`gpt read <interface> <dev> [<addr>]` - 示例:`gpt read mmc 0 $part_addr` - 作用:从`mmc 0`设备读取GPT分区表到内存地址`$part_addr`。 2. **写入GPT分区表** - 语法:`gpt write <interface> <dev> <addr>` - 示例:`gpt write mmc 0 $part_addr` - 作用:将内存地址`$part_addr`中的分区表写入`mmc 0`设备。 3. **验证GPT分区表** - 语法:`gpt verify <interface> <dev>` - 示例:`gpt verify mmc 0` - 作用:检查设备的分区表是否有效(如CRC校验)。 4. **创建默认分区表** - 语法:`gpt create <interface> <dev> <partitions>` - 示例:`gpt create mmc 0 "name1:size1,name2:size2"` - 作用:根据指定名称和大小生成新分区表。 --- ### **二、典型使用场景** 1. **初始化存储设备** ```bash # 1. 进入U-Boot命令行 # 2. 创建新分区表(示例为2个分区) gpt create mmc 0 "boot:64MiB,rootfs:-" # 3. 写入设备 gpt write mmc 0 ``` 2. **恢复损坏的分区表** ```bash # 1. 从备份地址读取分区表 gpt read mmc 0 0x1000000 # 2. 写入设备修复 gpt write mmc 0 0x1000000 ``` --- ### **三、参数说明** | 参数 | 含义 | |--------------|----------------------------------------------------------------------| | `<interface>` | 存储接口类型(如`mmc`、`sata`、`usb`) | | `<dev>` | 设备编号(如`0`表示第一个MMC设备) | | `<addr>` | 内存地址(存放分区表的临时位置,需提前预留空间) | | `<partitions>`| 分区定义字符串(格式:`"名称1:大小1,名称2:大小2"`,`-`表示剩余空间) | --- ### **四、注意事项** 1. **数据丢失风险**:操作分区表会清空设备数据,请提前备份。 2. **设备号确认**:通过`mmc list`或`scsi list`确认设备编号。 3. **内存地址对齐**:确保`addr`指向的内存区域未被占用。 4. **兼容性**:部分U-Boot版本可能不支持`gpt`命令,需确认配置项`CONFIG_CMD_GPT`已启用。 --- ### **五、调试技巧** - 使用`printenv`检查环境变量(如`part_addr`是否定义)。 - 通过`md`命令查看内存内容,确认分区表是否正确读取。 - 若写入失败,尝试重置设备(`mmc rescan`)后重试。 如需进一步操作细节,可结合具体硬件平台提供补充信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值