利用USB OTG把ARM板(瑞芯微RK3399+Linux)模拟为U盘

本文介绍了如何在RK3399板的Linux系统中利用USBOTG功能将其配置为U盘,包括内核驱动配置、模拟U盘过程以及不同USB版本对速度的影响。作者还提及了其他USB应用的可能性,如键盘鼠标模拟和远程控制。
摘要由CSDN通过智能技术生成

   现在大量的ARM CPU芯片都可以支持USB OTG2.0/3.0接口,该接口往往工作为USB Host,用于连接USB设备,同时用该OTG接口用于烧写镜像和固件。不过该接口也可以在Linux下作为USB设备工作,此时ARM板卡可以通过该OTG,将ARM板本身配置为键盘、鼠标,甚至是U盘,将OTG口通过USB线与PC机相连,直接在ARM板和PC机之间进行数据传送。下面以RK3399板为例,看看如何将RK3399板的Linux系统上配置为U盘工作。

一、Linux配置和编译
1.1 内核驱动配置
通过make menuconfig将OTG口配置为DRD(Dual Role Mode),同时使能Gadget和Mass Storage。详细如下描述。

  Device Drivers  ---> 
    [*] USB support  ---> 
        <*>   DesignWare USB2 DRD Core Support
                DWC2 Mode Selection (Dual Role mode)  --->

        <*>   USB Gadget Support  ---> 
                 --- USB Gadget Support
                  (500) Maximum VBUS Power usage (2-500 mA)
                  (2)   Number of storage pipeline buffers
                  <M>   USB Gadget Drivers
                  <M>   USB functions configurable through configfs
                  [*]   Mass storage
                  <M>   Gadget Filesyste
                  < >   Function Filesystem
                  <M>     Mass Storage Gadget 

1.2 编译和生成模块
以上配置保存后,make kernel编译执行后,会生成以下几个关键的内核模块。

        drivers/usb/gadget/libcomposite.ko
        drivers/usb/gadget/legacy/gadgetfs.ko
        drivers/usb/gadget/legacy/g_mass_storage.ko
        drivers/usb/gadget/function/usb_f_mass_storage.ko

二、ARM板Linux系统上U盘模拟
2.1 建立镜像模拟U盘
dd if=/dev/zero of=udisk.img bs=1M count=1600

// 建立一个1.6GB的镜像文件,用于模拟U盘

mkfs.vfat udisk.img

// 将镜像只作为vfat的文件系统,PC可以访问。此处如果不格式化,PC找到U盘后会提示格式化

mkdir /opt/udisk

// 建立U盘镜像文件的挂载点

2.2 Linux下模拟U盘的建立
//将U盘镜像与loop7建立连接,udisk.img放的位置会决定速度
sudo losetup /dev/loop7 udisk.img

//加载gadget和mass storage的模块,并将udisk.img镜像文件模拟为U盘

sudo insmod gadgetfs.ko
sudo insmod libcomposite.ko
sudo insmod usb_f_mass_storage.ko
sudo mount /dev/loop7 /opt/udisk     //挂载U盘
sudo insmod g_mass_storage.ko  file=/dev/loop7 removable=1

如果插着USB线,随着“sudo insmod g_mass_storage.ko  file=/dev/loop7 removable=1”的执行,就可以听到PC电脑“叮咚”的声音,PC机找到了U盘,表示U盘创建成功!

2.3 测试
接下来就可以在PC机上像操作正常U盘一样读写数据了,同时可以在RK3399板的Linux系统下/opt/udisk看到PC机上拷贝到U盘中的内容。

如果镜像文件udisk.img是放在eMMC上,采用USB2.0的线,U盘的写速度大概有3MB左右,稍微有些慢。如果RK3399板卡的内存比较大,可以将udisk.img部署在内存文件系统上,测试速度约32MB左右。

sudo mount -t tmpfs tmpfs /mnt/tmp

上面命令可以建立内存文件系统,只需要将上面的命令序列中的文件udisk.img放到/mnt/tmp下就可以。采用USB 3.0的线的速度,后续测试后在评论中再更新。

注:如果PC机拷贝到U盘中的文件,在ARM的Linux下看不见内容,重新mount一下就可以看到了。如果ARM的Linux下拷贝到udisk里面的内容在PC机上看不到,需要插拔一下USB线就可以看到了。

有什么疑问或者建议,欢迎大家一起探讨。

特别是U盘的速度和性能方面的,如通过速度如何通过OTG口测试USB口是2.0还是3.0等等。

也可以通过USB OTG同时模拟键盘和鼠标,通过一根网线实现远程控制对方的主机。也可以一起探讨更多的USB应用。
————————————————
版权声明:本文为CSDN博主「鸣睿家多宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/stevenqian/article/details/127224086

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,可以通过配置和编译内核驱动来实现USB模拟U盘的功能。首先,需要加载相关的内核模块,例如drivers/usb/gadget/libcomposite.ko、drivers/usb/gadget/legacy/gadgetfs.ko、drivers/usb/gadget/legacy/g_mass_storage.ko和drivers/usb/gadget/function/usb_f_mass_storage.ko等模块。 接下来,需要在ARMLinux系统上进行配置和编译。现在大量的ARM CPU芯片都可以支持USB OTG2.0/3.0接口,该接口可以工作为USB Host,也可以作为USB设备工作。通过配置OTG接口,可以将ARM配置为U盘,实现ARM与PC机之间的数据传输。以RK3399为例,可以通过执行适当的命令来将RK3399Linux系统配置为U盘工作。 具体操作步骤如下: 1. 配置和编译内核驱动,确保相关的内核模块被加载。 2. 插入USB线,并执行“sudo insmod g_mass_storage.ko file=/dev/loop7 removable=1”命令。 3. 此时,PC机会发出“叮咚”的声音,表示PC机已经找到了U盘,表示U盘创建成功。 通过以上步骤,就可以在Linux系统上实现USB模拟U盘的功能。通过配置和编译内核驱动,以及正确地插入USB线和执行相应的命令,可以使ARMLinux系统被识别为U盘,从而实现与PC机之间的数据传输。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [利用USB OTGARM瑞芯微RK3399+Linux)模拟为U盘](https://blog.csdn.net/stevenqian/article/details/127224086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值