嵌入式Linux系统中U盘挂载

USB一般分为主机(Host)和从机(Slave),数据传输是建立在Host和Slave的正常连接基础上,比如电脑上的USB口是Host,U盘是Slave;还有一种协议OTG(On The Go),这是一种USB2.0引入的工作模式,可以进行主从协商,什么时候做Host或者Slave由一个ID决定,这个ID是硬件上的管脚来检测的,原理图:

嵌入式Linux系统中U盘挂载

本章内容是有关USB Host进行U盘的挂载。

1 配置选项说明

嵌入式Linux系统中U盘挂载

在目录~/share/patchs/udisk-config中,有一个配置文件,我们已经把U盘需要支持的选项加入进去,现在需要对比工程的区别,然后进行分析,可以通过beyond compare进行比较:

差异点1:

嵌入式Linux系统中U盘挂载

CONFIG_SCSI=y

支持SCSI协议(小型计算机接口协议),设备上如果有任何如下类型SCSI/SAS/SATA/USB/Fibre Channel/FireWire设备那么就需要该选项。

CONFIG_BLK_DEV_SD=y

使用SCSI/SAS/SATA/PATA/USB/Fibre Channel存储设备。

CONFIG_CHR_DEV_SG=y

通用 SCSI 设备(通常是SCSI光驱),Linux下显示在/dev/sg*设备。

CONFIG_CHR_DEV_SCH=y

SCSI介质转换设备(SCSI Medium Changer device)是一种控制多个SCSI介质的转换器。

CONFIG_SCSI_CONSTANTS=y

当SCSI设备出错时内核将给出详细的出错信息。

CONFIG_SCSI_LOGGING=y

启用SCSI日志(默认并不开启,需要"echo [bitmask] > /proc/sys/dev/scsi/logging_level"),可用于跟踪和捕获SCSI设备的错误;[bitmask]说明可以查看"drivers/scsi/scsi_logging.h"文件。

CONFIG_SCSI_SCAN_ASYNC=y

异步扫描检测SCSI设备,这样可以加快系统的引导速度。

差异点2:

嵌入式Linux系统中U盘挂载

CONFIG_USB=y

主机端(Host-side)USB支持。

CONFIG_USB_EHCI_HCD=y

EHCI(Enhanced Host Controller Interface) usb 2.0的主控制器标准接口。

CONFIG_USB_EHCI_HCD_PLATFORM=y

通用platform设备的EHCI驱动,仅用于嵌入式环境。

CONFIG_USB_OHCI_HCD=y

OHCI(Open Host Controller Interface)是主要用于嵌入式环境的USB1.1(LowSpeed/FullSpeed USB)主机控制器规范。

CONFIG_USB_OHCI_HCD_PLATFORM=y

通用platform设备的OHCI驱动,仅用于嵌入式环境。

CONFIG_USB_STORAGE=y

USB存储设备,USB_STORAGE depends on SCSI。

CONFIG_USB_STORAGE_DATAFAB=y

CONFIG_USB_STORAGE_FREECOM=y

CONFIG_USB_STORAGE_ISD200=y

CONFIG_USB_STORAGE_USBAT=y

CONFIG_USB_STORAGE_SDDR09=y

CONFIG_USB_STORAGE_SDDR55=y

CONFIG_USB_STORAGE_JUMPSHOT=y

CONFIG_USB_STORAGE_ALAUDA=y

CONFIG_USB_STORAGE_ONETOUCH=y

CONFIG_USB_STORAGE_KARMA=y

CONFIG_USB_STORAGE_CYPRESS_ATACB=y

CONFIG_USB_STORAGE_ENE_UB6250=y

以上为不同厂商/型号的驱动程序。

CONFIG_USB_UAS=y

USB Attached SCSI(UAS)大容量存储设备支持。

差异点3:

嵌入式Linux系统中U盘挂载

首先NLS(Native Language Support),也就是本地语言支持,作用: 主要作用在Unicode(这里指的是UTF-16格式)和本地语言字符之间进行相互转换;对于东亚地区的Linux用户来说,他们经常遇到的字符集有以下几种:

CP932 日本语(Shift-JIS,EUC-JP)

CP936 简体中文(CP936(就是GBK),GB2312)

Cp949 朝鲜语(CP949,EUC-KR)

CP950 繁体中文(Big5)

CONFIG_NLS_DEFAULT="utf8"

挂载文件系统时,默认控制台的语言编码格式。

CONFIG_NLS_CODEPAGE_437=y

字符集:cp437支持。

CONFIG_NLS_CODEPAGE_936=y

字符集:cp936支持。

CONFIG_NLS_ASCII=y

字符集:ASCII支持。

CONFIG_NLS_ISO8859_1=y

字符集:ISO8859支持。

CONFIG_NLS_UTF8=y

字符集:UTF8支持。

 

以上对比出来的差异并非都是必选项,可以根据实际情况进行裁剪或者增加,重点还是在于要理解选项的具体含义,才能更好的掌握本节课程的内容。

2 应用

我们可以通过beyond compare把差异化的代码合并到原始配置文件中,然后进行kernel的编译:

cd kernel

make rk3308_linux_defconfig

make rk3308-evb-amic-v10.img

编译完成后,烧录更新内核,准备一个fat32格式的U盘,可以在电脑中格式化成这个格式,然后U盘接入到开发板的USB接口(Host)中,正常情况下可以看到U盘的信息:

输入命令fdisk -l

嵌入式Linux系统中U盘挂载

然后我们需要将U盘挂载后使用,由于现在文件系统只有根文件系统,且配置是只读,我们暂时挂载在内存中:

嵌入式Linux系统中U盘挂载

其中U盘是:/dev/sda1这个设备。

挂载命令:mount -t vfat /dev/sda1 /tmp/udisk/

查看U盘内容:

嵌入式Linux系统中U盘挂载

卸载U盘很简单:umount /tmp/udisk/

注意先切换到其他目录再卸载。

 

==================================================================================================================================

U盘的挂在方法学会了,继续深入学习,keep move!!

如果觉得对您有帮助并想进一步深入学习交流可以扫描以下微信二维码或加入QQ群:928840648

欢迎共同学习成长,有一群爱学习的小伙伴一起勉励!!一起加油!!也可点击

嵌入式Linux系统中U盘挂载

 

笔者基于嵌入式系统框架内容如下整理编辑:

嵌入式Linux系统中U盘挂载