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. 修改设备树
    路径: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

在这里插入图片描述
可以看到 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

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

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

在这里插入图片描述

  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

建立一个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

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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值