当前位置: 代码迷 >> 综合 >> yocto linux 添加usb storage 功能
  详细解决方案

yocto linux 添加usb storage 功能

热度:79   发布时间:2024-01-24 05:31:37.0

linux的usb storage,原生系统默认是没有的,需要自己配置。那就需要配置usb的gadget功能。在kernel的config开关中需要保证

这些开关打开

CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_MXC=y
CONFIG_USB_STORAGE=y
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_USB_MXS_PHY=y
CONFIG_USB_GADGET=y
CONFIG_USB_MASS_STORAGE=y

顺便说一下gadget,Gadget 框架提出了一套标准API, 在底层, USB 设备控制器 (USB Device Controller, UDC) 驱动则实现这一套 API, 不同的 UDC (通常是 SOC 的一部分) 需要不同的驱动, 甚至基于同样的 UDC 的不同板子也需要进行代码修改。这一层我们可以称之为平台相关层。
有了gadget功能,我们就可以将我们的主板配置为U盘,鼠标,键盘等usb接口功能了。

?  Gadget Zero, 类似于 dummyhcd, 该驱动用于测试 udc 驱动。它会帮助您通过 USB-IF 测试。

?  Ethernet over USB, 该驱动模拟以太网网口,它支持多种运行方式:

?   CDC Ethernet: usb 规范规定的 CommunicationsDevice Class “Ethernet Model” protocol。

?  CDC Subset: 对硬件要求最低的一种方式,主要是 Linux 主机支持该方式。

?  RNDIS: 微软公司对 CDCEthernet 的变种实现。

?   File-backed Storage Gadget最常见的 U 盘功能实现。

?  Serial Gadget 实现,包括:

?   Generic Serial 实现(只需要Bulk-in/Bulk-out端点+ep0)

?  CDC ACM 规范实现。

?    Gadget Filesystem, 将 GadgetAPI 接口暴露给应用层,以便在应用层实现user modedriver。

?  MIDI: 暴露ALSA接口,提供 recording 以及 playback 功能。

添加完上述开关之后,需要配置一些属性了,包括VID PID等信息,以及空间配置,这个可以通过如下的shell脚本打包实现:

 #!/bin/sh

#set -xv
set -e
mount -t configfs none /sys/kernel/config/
cd /sys/kernel/config/usb_gadget/
mkdir g2
cd g2/ 

echo "0xABCD" >idVendor 
echo "0x1017" >idProduct  
cat idVendor 
cat idProduct

mkdir strings/0x409/
echo "012345678ABCDEF"        >strings/0x409/serialnumber 
echo "Dragon"                             >strings/0x409/manufacturer 
echo "DragonMSC"                     >strings/0x409/product 

mkdir functions/mass_storage.usb0
echo /dev/mmcblk1p1 >functions/mass_storage.usb0/lun.0/file 

mkdir configs/c.1
mkdir configs/c.1/strings/0x409/

echo "abc" > configs/c.1/strings/0x409/configuration 
cat configs/c.1/strings/0x409/configuration 
ln -s functions/mass_storage.usb0/ configs/c.1/

ls /sys/class/udc/
echo ci_hdrc.0 >UDC

echo !!!!!!!!!!!!!!!!!!
echo !!!!!OK!!!!!!!!!!!
echo !!!!!!!!!!!!!!!!!!