《Linux Uboot usb命令》

UBOOT中一般USB的配置:

#define CONFIG_USB_OHCI
#define CONFIG_USB_STORAGE
#define CONFIG_CMD_USB
#define CONFIG_CMD_FAT
#define CONFIG_DOS_PARTITION
#define CONFIG_SUPPORT_VFAT

 

UBOOT进入命令行 输入 help 可以看到有很多内置的命令,也可以自己添加命令

这篇介绍usb命令:

 

=> usb
usb - USB sub-system

Usage:
usb start - start (scan) USB controller
usb reset - reset (rescan) USB controller
usb stop [f] - stop USB [f]=force stop
usb tree - show USB device tree
usb info [dev] - show available USB devices
usb test [dev] [port] [mode] - set USB 2.0 test mode
    (specify port 0 to indicate the device's upstream port)
    Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable]
usb storage - show details of USB storage devices
usb dev [dev] - show or set current USB storage device
usb part [dev] - print partition table of one or all USB storage    devices
usb read addr blk# cnt - read `cnt' blocks starting at block `blk#'
    to memory address `addr'
usb write addr blk# cnt - write `cnt' blocks starting at block `blk#'
    from memory address `addr'

1.使用usb之前要执行 usb reset 或者 usb start,一般推荐usb reset

=> usb reset
resetting USB...
entry ali_ehci_usb_remove
usb_init-(drivers/usb/host/usb-uclass.c)
USB0:   entry ali_ehci_usb_ofdata_to_platdata, name:ehci@0x1803A100
usb_reg:0xb803a000, hccr:0xb803a100, usb_phy:0xb803d800
usb_power:0
fdtdec_get_int_array_count: phy-setting
entry ali_ehci_usb_probe
hccr b803a100 hcor b803a120, usb_regs:b803a000, phy_regs:b803d800
Wr USB setting (0x04 ,0x00000000) (rd back 0x00000000)
Wr USB setting (0x10 ,0x03000000) (rd back 0x83000000)
Wr USB setting (0x24 ,0x00080000) (rd back 0x00080000)
Wr USB setting (0x2c ,0x00000000) (rd back 0x00000000)
USB EHCI 1.00
adth] 1 USB Device(s) found [status:1]
scanning bus 0 for devices... 4 USB Device(s) found
scan end

2. 执行1步骤后,usb info 可以查看usb的一些信息

// 这里是我的usb信息
=> usb info
...
...

4: Mass Storage,  USB Revision 2.0
 - Kingston DataTraveler 2.0 C86000BDBE37EE307A2100C4
 - Class: (from Interface) Mass Storage
 - PacketSize: 64  Configurations: 1
 - Vendor: 0x0930  Product 0x6545 Version 1.0
   Configuration: 1
   - Interfaces: 1 Bus Powered 200mA
     Interface: 0
     - Alternate Setting 0, Endpoints: 2
     - Class Mass Storage, Transp. SCSI, Bulk only
     - Endpoint 1 In Bulk MaxPacket 512
     - Endpoint 2 Out Bulk MaxPacket 512

3. usb tree 树形目录查看所有的usb的信息

=> usb tree
USB device tree:
  1  Hub (480 Mb/s, 0mA)
  |  u-boot EHCI Host Controller 
  |
  +-2  Vendor specific (480 Mb/s, 500mA)
  |    Realtek 802.11n AC5D5C51BE6F
  |  
  +-3  Hub (480 Mb/s, 100mA)
    |   USB2.0 Hub 
    |
    +-4  Mass Storage (480 Mb/s, 200mA)
         Kingston DataTraveler 2.0 C86000BDBE37EE307A2100C4

4. usb storage , usb dev 查看当前使用usb的信息

=> usb storage
  Device 0: Vendor: Kingston Rev: PMAP Prod: DataTraveler 2.0
            Type: Removable Hard Disk
            Capacity: 29774.8 MB = 29.0 GB (60978816 x 512)

=> usb dev
USB device 0: Vendor: Kingston Rev: PMAP Prod: DataTraveler 2.0
            Type: Removable Hard Disk
            Capacity: 29774.8 MB = 29.0 GB (60978816 x 512)

5. 正常U盘的系统信息在第一个分区中,但也不排除有时候在其他的分区,所以就导致了有时候插入U盘但是怎么也识别不到

尤其是代码中类似写死了 "fatload usb 0 %x %s",  这时候我们可以通过 usb part 来查看有几个分区。

//两个不同U盘的信息

=> usb part

Partition Map for USB device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     2               60978814        3f3a81c0-01     0b Boot


=> usb part

Partition Map for USB device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     32              60062468        00000000-01     0c

检测是第几个具体没想到什么好方法,一般都是手动去查看

=> usb part 0

Partition Map for USB device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     32              60062468        00000000-01     0c
=> usb part 1

no USB devices available
=> usb part 2

no USB devices available

//上面基本可以确定在第一个分区中。

6. 停止U盘

=> usb stop
stopping USB..
entry ali_ehci_usb_remove

其他几个命令也没怎么用过,像usb write,usb read, 如果U盘格式是fat格式,一般就用 fatwrite,fatread 这些对应的文件系统的命令读写比较好。类似下面这样:

"fatwrite usb 0 0x%x(addr) test.bin 0x%x(size)"

"fatload usb 0 0x%x(addr) test.bin"

补充:

上面提到过,如果U盘有几个分区,虽说默认系统信息在第一个分区,但不排除列外,有时候代码写死也不想去改。

那么这个时候我的做法就是修改uboot查找分区代码,当然这种做法是在于uboot本身使用usb命令不那么严格要求,把代码写死从第几个分区改为一样自动寻找。

// disk/Part.c 中 get_device_and_partition 函数


    // 添加的代码,写死自动去找。
    part = PART_AUTO;


    /*
     * If user didn't specify a partition number, or did specify something
     * other than "auto", use that partition number directly.
     */
    if (part != PART_AUTO) {
        ret = get_partition_info(*dev_desc, part, info);
        if (ret) {
            printf("** Invalid partition %d **\n", part);
            goto cleanup;
        }
    } else {

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: U-Boot 是一种开源的 Bootloader,常用于嵌入式系统的启动管理。它可以在引导 Linux 操作系统之前为设备配置硬件和加载内核。U-Boot 是跨平台的,可以在多种嵌入式设备上运行,包括嵌入式 Linux 和 RTOS 系统。 ### 回答2: Linux和uboot都是嵌入式系统中非常重要的组成部分。 Linux是一种开源的操作系统,具有灵活、高效、可靠的特点,因此在嵌入式系统中被广泛使用。Linux可以支持众多的硬件平台,可以根据需求自由定制内核配置,因此可以实现非常精简的系统,对于资源有限的嵌入式设备而言非常适合。同时,在Linux社区拥有众多的开发者和用户,不仅有丰富的文档与社区经验可以参考,也可以得到及时的技术支持和更新。 UBOOT是一个开源的引导加载程序,其功能是将操作系统从闪存等存储介质中取出并加载到内存中启动运行。UBOOT作为引导程序,可以实现很多操作系统没有的功能,例如热插拔、网络启动等。而且,它本身的文件体积相对比较小,占用系统资源较少。UBOOT的源代码非常精简,容易移植到不同的硬件平台上,并且支持丰富的配置选项,用户可以根据需求进行自定义,提高系统的效率。 在嵌入式系统中,通常使用UBOOT进行启动并加载Linux操作系统。首先,UBOOT启动,进行硬件初始化和自检。然后,UBOOT会加载内核映像到内存中,然后将系统控制权交给内核,由内核继续完成系统启动。 因此,对于嵌入式系统而言,Linux和UBOOT都是非常重要的部分,不仅可以提高系统的可靠性和效率,而且也支持各种硬件平台和应用场景的定制。 ### 回答3: Linux是一个自由、开放的操作系统,最初在1991年由Linus Torvalds所创建,它广泛用于服务器、个人电脑以及其他嵌入式设备中。 而U-Boot是一种开源的引导加载程序,通常被用来启动嵌入式Linux系统。它是一个非常常见的嵌入式Linux系统的引导加载程序,并且几乎所有的SOC供应商都提供了针对U-Boot的支持。因此,许多嵌入式Linux系统的开发人员都使用它来构建和调试它们的系统。 U-Boot还有其他用途,例如固件更新、硬件诊断和启动操作系统。它可以处理各种不同的启动来源,例如网络、USB、SD卡和SPI闪存,通过引导从这些来源启动操作系统,进而完成在嵌入式系统上的应用。 因为U-Boot是开源软件,因此它可以在许多嵌入式系统上运行,而无需支付高昂的许可费用。同时,U-Boot具有相对较小的内存开销,使其成为各种嵌入式设备开发中的理想选择。 最后,值得一提的是,U-Boot也是一个可扩展的系统。通常情况下,开发人员能够自定义U-Boot的功能,使其更好地适应他们的需要。这些扩展可以包括添加新的引导选项、从设备中读取数据以及许多其他的功能。总之,U-Boot作为一个开源的引导程序,为许多嵌入式系统的起步和开发提供了极大的便利性与可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HarkerYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值