我是靠谱客的博主 欣慰睫毛膏,最近开发中收集的这篇文章主要介绍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 目录下看到这个文件。
可以将以上挂载命令以及加载模块命令写到一个脚本里面,开机的时候自动执行,会方便很多,明天再整吧,洗洗睡了。

最后

以上就是欣慰睫毛膏为你收集整理的orangepi-4-LTS g_mass_storage 模拟 U盘的全部内容,希望文章能够帮你解决orangepi-4-LTS g_mass_storage 模拟 U盘所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部