1、出错的现象
(1)U盘被格式成FAT32文件系统,在Windows和Linux系统中都可以正常识别并挂载,在uboot下可以正常识别但是不能挂载;
(2)在uboot下使用usb命令可以探测到U盘,但是用fatls、fatinfo等命令去挂载U盘时会失败,识别不了U盘上的FAT32文件系统;
2、报错打印
# usb device
Install USB Device...
#
# usb start
starting USB...
USB0: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 0 for devices... 2 USB Device(s) found
USB1: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 1 for devices... 1 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
#
# usb tree
USB device tree:
1 Hub (5 Gb/s, 0mA)
| U-Boot XHCI Host Controller
|
+-2 Mass Storage (480 Mb/s, 100mA)
Kingston DataTraveler 2.0 60A44CB2B14C1380F7B105A1 # 插入的U盘
3 Hub (5 Gb/s, 0mA)
U-Boot XHCI Host Controller
#
# fatinfo usb 0
## Valid DOS partition found ##
** Unable to use usb 0:1 for fatinfo **
#
# fatls usb 0
[fs_set_blk_dev] ifname=usb, dev_part_str=0, fstype=1
## Valid DOS partition found ##
** Unrecognized filesystem type **
(1)从uboot的启动打印可以看出,识别到了U盘,但是识别不到U盘的分区表;
(2)结论:U盘识别是没有问题的,出错的是查找U盘的分区表,也就是识别不了FAT32文件系统;
3、报错的原因
(1)磁盘分区格式分为MBR和GPT,具体两种分区格式的区别这里不做介绍;
(2)虽然我们将U盘格式化成FAT文件系统格式,但是并没有去修改U盘的分区格式是MBR还是GPT;
(3)上面的报错原因:U盘是GPT格式分区,但是uboot没有使能GPT分区表的支持,只支持MBR分区格式;
4、解决办法
4.1、uboot使能GPT分区表的支持
(1)打开CONFIG_EFI_PARTITION,如果通过menuconfig的方式,在menuconfig–>Partition Types–>Enable EFI GPT partition table。
(2)打开该选项后,默认会新增CONFIG_EFI_PARTITION_ENTRIES_NUMBERS和CONFIG_EFI_PARTITION_ENTRIES_OFF配置项,保持默认值即可。
4.2、修改U盘的分区格式为MBR
在linux系统中,使用parted命令重新格式化U盘,将U盘改成MBR分区格式,具体步骤自行百度;
推荐
给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转