• orangepi-4-LTS g_mass_storage 模拟 U盘


    内核版本:官方提供的 linux 5.10.43
    实现功能:通过 gadget 配置,将开发板模拟成U盘,通过板子上的Type-C接口与PC传输数据

    前言:在网上找了好多教程都大同小异,大都没有提到要修改设备树,然而这个板子,官方的设备树默认没有绑定,还是在QQ群大神的指导下完成了配置,感谢!

    进入正题

    1. 关闭源码更新功能
      orangepi-bulid 编译系统编译 linux 内核源码时首先会将 linux 内核源码和 github服务器的 linux 内核源码进行同步, 所以如果想修改 linux 内核的源码, 首先需要关闭源码的更新功能(需要完整编译过一次 linux 内核源码后才能关闭这个功能, 否则会提示找不到 linux 内核的源码)
      在 orangepi-build/userpatches/config-default.conf 中,修改
     IGNORE_UPDATES="yes"
    
    • 1
    1. 修改设备树
      路径:orangepi-build/kernel/orange-pi-5.10-rk3399/arch/arm64/boot/dts/rockchip/rk3399-orangepi-4-lts.dts
      在这里插入图片描述
      注意,不要改到 &usbdrd_dwc3_1,3_1 对应的是开发板上的 usb3.0 host 接口

    2. 编译镜像文件
      进入 menuconfig
      在这里插入图片描述在这里插入图片描述

    3. 配置 gadget
      参考以下配置
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      USB Type-C Support 里面我勾了这几个,不过还没试过不够行不行
      在这里插入图片描述

    4. 启动,以下所有操作均在开发板上执行
      编译好之后用 Orangepi-build/output/images/Orangepi4-lts_3.0.8_ubuntu_focal_server_linux5.10.43下的
      Orangepi4-lts_3.0.8_ubuntu_focal_server_linux5.10.43.img
      启动

    5. 验证设备树
      先看下修改的设备树有没有生效,执行

    cat /sys/firmware/devicetree/base/usb@fe800000/usb@fe800000/dr_mode
    
    • 1

    在这里插入图片描述
    可以看到 usb@fe800000 的 dr_mode 已经是 peripheral 了,注意如果是 usb@fe900000 的 dr_mode 变成 peripheral,那就是设备树中修改到了 &usbdrd_dwc3_1,一定要改到 &usbdrd_dwc3_0

    1. 查看模块
      在开发板的 /lib/modules/5.10.43/kernel/drivers/usb/gadget 目录下可以看到这几个模块
      在这里插入图片描述
      一切准备就绪。

    2. 切换到 otg 模式
      先看看 /sys/devices/platform/ff770000.syscon/ff770000.syscon:usb2-phy@e450/otg_mode

    cat /sys/devices/platform/ff770000.syscon/ff770000.syscon:usb2-phy@e450/otg_mode
    
    • 1

    在这里插入图片描述
    如果不是 otg 或者 peripheral 的话,修改为 otg 或者 peripheral

    echo peripheral > /sys/devices/platform/ff770000.syscon/ff770000.syscon\:usb2-phy@e450/otg_mode
    
    • 1

    在这里插入图片描述

    1. 建立镜像模拟U盘
     dd if=/dev/zero of=udisk.img bs=1M count=1024
     mkfs.vfat udisk.img
     losetup /dev/loop0 udisk.img
     mkdir udisk_mount_point
     mount /dev/loop0 udisk_mount_point
    
    • 1
    • 2
    • 3
    • 4
    • 5

    建立一个1GB的镜像文件,用于模拟U盘
    将镜像只作为vfat的文件系统,PC可以访问
    将镜像与 loop0 连接
    建立U盘镜像文件的挂载点,相当于 udisk_mount_point 这个文件夹就是 U 盘的存储路径
    挂载 udisk_mount_point

    1. 加载 gadget 模块
    modprobe gadgetfs.ko
    modprobe libcomposite.ko
    modprobe usb_f_mass_storage.ko
    modprobe g_mass_storage.ko file=/dev/loop0 stall=0 removable=1
    
    • 1
    • 2
    • 3
    • 4

    一顿操作之后,通过开发板的 Typec 接口连接到 PC,在 PC 上会看到新的可移动设备,试着在里边新建一个文件,可以在 udisk_mount_point 目录下看到这个文件。
    可以将以上挂载命令以及加载模块命令写到一个脚本里面,开机的时候自动执行,会方便很多,明天再整吧,洗洗睡了。

  • 相关阅读:
    视频文件采用哪种格式占的空间最小
    neo4j load csv 配置和使用
    实践练习六(必选):查看 OceanBase 执行计划
    数值分析笔记(二)函数插值
    Langchain Chain - RouterChain 根据输入相关性进行路由的路由链
    ChatGPT在智能外呼机器人领域的应用
    动态规划 拿小球简单版(爱思创)
    RK3568平台 sys虚拟文件系统添加节点
    计算机设计大赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python
    使用python玩转二维码!速学速用!⛵
  • 原文地址:https://blog.csdn.net/weixin_42255916/article/details/127698224