使用F1C200S从零制作掌机之USB从机

news2024/11/15 4:21:32

OTG做从机,实现使用RNIDS功能访问网络,实现模拟成U盘PC可访问。

最后实现OTG的软件主从切换。

一、RNDIS

设备树的otg模式先设置为:peripheral

&usb_otg {
        dr_mode = "peripheral"; /* otg host peripheral */
        status = "okay";
};

配置设备树

 Device Drivers  --->
     [*] USB support  --->
        <*> Inventra Highspeed Dual Role Controller
                MUSB Mode Selection (Dual Role mode)  --->  (这里要配置为Dual Role mode)
                *** Platform Glue Layer ***
            <*> Allwinner (sunxi)
                *** MUSB DMA mode ***
            [ ] Disable DMA (always use PIO)

        USB Physical Layer drivers  --->
            <*> NOP USB Transceiver Driver
        <*>   USB Gadget Support  --->
            <*>   USB Gadget functions configurable through configfs
            [*]     Ethernet Control Model (CDC ECM)
            [*]     Ethernet Control Model (CDC ECM) subset
            [*]     RNDIS
            [*]     Ethernet Emulation Model (EEM)
            [*]     Function filesystem (FunctionFS)
            	USB Gadget precomposed configurations  --->
            		<*> Ethernet Gadget (with CDC Ethernet support)
            		[*]   RNDIS support
            		<*> CDC Composite Device (Ethernet and ACM)

编译之后得到:

g_ether.ko

加载驱动:

root@wang-virtual-machine:~# insmod /lib/modules/5.4.99/g_ether.ko
[   92.595156] using random self ethernet address
[   92.600049] using random host ethernet address
[   92.606687] usb0: HOST MAC 22:4d:ac:16:33:5e
[   92.611525] usb0: MAC 56:52:9c:6c:93:2b
[   92.615966] using random self ethernet address
[   92.620822] using random host ethernet address
[   92.625927] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[   92.633205] g_ether gadget: g_ether ready

重新插拔usb识别到端口,需要改驱动。下载kindle_rndis.inf_amd64-v1.0.0.1.zip

  1. Download & Unzip attachment kindle_rndis.inf_amd64-v1.0.0.1.zip
  2. R-click “5-runasadmin_register-CA-cer.cmd” and “Run as administrator”*
  3. In Device Manager, expand “Ports (COM & LPT)”, R-click “Serial USB device (COM3)” > Update Driver Software…
  4. Browse for my computer for driver software > Select extract folder

第4步选择的是下载的文件夹。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

驱动已正常。

image-20240710210600120

回到板子。执行

ifconfig usb0 up
ifconfig usb0 192.168.31.100

image-20240710210719319

然后pc这边来到 控制面板 --> 网络和Internet --> 网络连接,亦可直接搜索查看网络连接

image-20240710210841983

开发板与PC可互相ping通。

image-20240710211127372

共享pc网络给板子

image-20240710212349547

pc中选中一个有效的网络连接, 然后右键属性 - 共享,勾选允许其他网络用户通过此计算机的Internet连接来连接,选择usb网卡

vmware的虚拟机的网卡会有冲突,先禁用网卡解决,后期把虚拟机的网段改了。。

然后回到板子,执行

root@wang-virtual-machine:~# udhcpc -i usb0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.137.199
udhcpc: lease of 192.168.137.199 obtained, lease time 604800
root@wang-virtual-machine:~#
root@wang-virtual-machine:~#
root@wang-virtual-machine:~#
root@wang-virtual-machine:~# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 8  bytes 824 (824.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 824 (824.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.137.199  netmask 255.255.255.0  broadcast 192.168.137.255
        ether 56:52:9c:6c:93:2b  txqueuelen 1000  (Ethernet)
        RX packets 2692  bytes 230931 (225.5 KiB)
        RX errors 0  dropped 1062  overruns 0  frame 0
        TX packets 61  bytes 21142 (20.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@wang-virtual-machine:~# ping www.baidu.com
ping: socket: Address family not supported by protocol
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=52 time=73.8 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=52 time=16.3 ms
^C64 bytes from 39.156.66.14: icmp_seq=4 ttl=52 time=11.6 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3171ms
rtt min/avg/max/mdev = 11.561/33.889/73.757/28.258 ms

自启动脚本,添加/etc/init.d/S51usbifup,增加755权限,脚本如下,

#!/bin/sh
#
# usbifup        Starts usb gadget rndis.
#

umask 077

start() {
        printf "Starting USB Gadget RNDIS: "
        modprobe g_ether
        ifconfig usb0 up
        udhcpc -i usb0
        echo "OK"
}
stop() {
        printf "Stopping USB Gadget RNDIS: "
        rmmod g_ether
        echo "OK"
}
restart() {
        stop
        start
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        restart
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

https://blog.csdn.net/GJF712/article/details/126574807

https://blog.csdn.net/wangzhen209/article/details/39344703

详细步骤参考:https://www.cnblogs.com/hfwz/p/16053528.html

二、模拟U盘

设备树

image-20240710172310989

需要的驱动文件

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

我这里将libcomposite和usb_f_mass_storage编译进内核。

编译结果:

  CC [M]  drivers/input/touchscreen/goodix.mod.o
  LD [M]  drivers/input/touchscreen/goodix.ko
  CC [M]  drivers/media/i2c/ov2640.mod.o
  LD [M]  drivers/media/i2c/ov2640.ko
  CC [M]  drivers/media/i2c/ov5640.mod.o
  LD [M]  drivers/media/i2c/ov5640.ko
  CC [M]  drivers/staging/rtl8188eu/r8188eu.mod.o
  LD [M]  drivers/staging/rtl8188eu/r8188eu.ko
  CC [M]  drivers/usb/gadget/legacy/g_cdc.mod.o
  LD [M]  drivers/usb/gadget/legacy/g_cdc.ko
  CC [M]  drivers/usb/gadget/legacy/g_ether.mod.o
  LD [M]  drivers/usb/gadget/legacy/g_ether.ko
  CC [M]  drivers/usb/gadget/legacy/g_mass_storage.mod.o
  LD [M]  drivers/usb/gadget/legacy/g_mass_storage.ko

只需要g_mass_storage.ko,重新拷贝内核和设备树后,执行

insmod g_mass_storage.ko file=/dev/mmcblk0p2 removable=1
PC端没法查看,因为文件系统格式为ext4

创建fat32文件系统测试

apt-get install dosfstools
内核增加回环设备驱动。最后有给出设置的位置。

mkdir /usbfile
dd if=/dev/zero of=/usbfile/udisk.img bs=1k count=32768
mkfs.vfat /usbfile/udisk.img
sudo losetup /dev/loop7 /usbfile/udisk.img
sudo mount /dev/loop7 /usbfile/files
在/usbfile/files下即可操作文件系统了
sudo /lib/modules/5.4.99/insmod g_mass_storage.ko file=/dev/loop7 removable=1
在CP机下也可操作文件系统了

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

losetup -a
losetup -l

参考:

https://blog.csdn.net/stevenqian/article/details/127224086

https://blog.csdn.net/weixin_39902545/article/details/116842999

https://blog.csdn.net/zounan909/article/details/82775362?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14-82775362-blog-123422949.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14-82775362-blog-123422949.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=24

https://blog.csdn.net/weixin_39836530/article/details/116842996

https://blog.csdn.net/zhuguanlin121/article/details/129846018

http://wiki.lcmaker.com/index.php?title=LC-PI-200S

三、虚拟串口

没有调试。

四、软件主从切换

设备树的otg模式先设置为:otg

&usb_otg {
        dr_mode = "otg"; /* otg host peripheral */
        status = "okay";
};
echo host > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
echo peripheral > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
cat /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode

接入USB再切换。

接入遥控接收器:

root@wangpi:/usbfile/files/a#echo host > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
[  495.164369] phy phy-1c13400.phy.0: Changing dr_mode to 1form/soc/1c13000.usb/musb-hdrc.1.auto/mode
root@wangpi:/usbfile/files/a# [  495.822510] usb 1-1: new full-speed USB device number 2 using musb-hdrc
[  496.034270] input: Controller as /devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.0/0003:0079:181C.0001/input/input1
[  496.050486] hid-generic 0003:0079:181C.0001: input: USB HID v1.11 Gamepad [Controller] on usb-musb-hdrc.1.auto-1/input0
[  496.095969] input: Controller System Control as /devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.1/0003:0079:181C.0002/input/input2
[  496.173860] input: Controller Consumer Control as /devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.1/0003:0079:181C.0002/input/input3
[  496.197874] hid-generic 0003:0079:181C.0002: input: USB HID v1.11 Device [Controller] on usb-musb-hdrc.1.auto-1/input1

USB线接入PC:

root@wangpi:~# echo peripheral > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
root@wangpi:~# sudo insmod g^Cass_storage.ko  file=/dev/loop7 removable=1
root@wangpi:~#
root@wangpi:~#
root@wangpi:~#
root@wangpi:~# cd /lib/modules/5.4.99/
root@wangpi:/lib/modules/5.4.99#
root@wangpi:/lib/modules/5.4.99# ls
8188eu.ko  g_cdc.ko  g_ether.ko  g_mass_storage.ko  rtl8188eufw.bin
root@wangpi:/lib/modules/5.4.99#
root@wangpi:/lib/modules/5.4.99#
root@wangpi:/lib/modules/5.4.99#                                                                                 sudo insmod g_mass_storage.ko  file=/dev/loop7 removable=1
[  384.593174] Mass Storage Function, version: 2009/09/11ge.ko  file=/dev/loop7 removable=1
[  384.598824] LUN: removable file: (no medium)
[  384.604042] LUN: removable file: /dev/loop7
[  384.608624] Number of LUNs=1
[  384.615341] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
[  384.623161] g_mass_storage gadget: userspace failed to provide iSerialNumber
[  384.630822] g_mass_storage gadget: g_mass_storage ready
[  384.637180] phy phy-1c13400.phy.0: Changing dr_mode to 2

五、其他

问题:

sudo: unable to resolve host wang-virtual-machine: Temporary failure in name resolution

修改 /etc/hostname 为 wangpi
修改 /etc/hosts 在localhost后面添加一个自己的用户名如wangpi

问题:

增加回环设备驱动看看能不能解决mount的问题。

image-20240712100729673

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue+uniapp的超市购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Android Studio启动报错:The emulator process for AVD Pixel_5_API_30 has terminated

Android Studio启动AVD报错&#xff1a; The emulator process for AVD Pixel_5_API_30 has terminated. 原因&#xff1a;安装时使用自定义安装后&#xff0c;修改了默认安装目录。 而avd文件默认在 C:\Users\用户名\.android 目录下。所以导致打开AVD时报错。 解决方法&am…

WIFI连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 1 实现功能…

数据结构——考研笔记(二)线性表的定义和线性表之顺序表

文章目录 二、线性表2.1 定义、基本操作2.1.1 知识总览2.1.2 线性表的定义2.1.3 线性表的基本操作2.1.4 知识回顾与重要考点 2.2 顺序表2.2.1 知识总览2.2.2 顺序表的定义2.2.3 顺序表的实现——静态分配2.2.4 顺序表的实现——动态分配2.2.5 知识回顾与重要考点2.2.6 顺序表的…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

Perl语言之数组

Perl数组可以存储多个标量&#xff0c;并且标量数据类型可以不同。   数组变量以开头。访问与定义格式如下&#xff1a; #! /usr/bin/perl arr("asdfasd",2,23.56,a); print "输出所有:arr\n"; print "arr[0]$arr[0]\n"; #输出指定下标 print…

Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用

目录 开始 Prometheus 介绍 基本原理 组件介绍 下文部署组件的工作方式 Prometheus 生态安装&#xff08;Mac&#xff09; 安装 prometheus 安装 grafana 安装 node_exporter Prometheus 生态安装&#xff08;Docker&#xff09; 安装 prometheus 安装 Grafana 安装…

excel 百分位函数 学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…

FFmpeg开发环境搭建

FFmpeg是音视频开发必备的库&#xff0c;也是唯一的库。本文主要讲解在ubuntu22和macOS14环境下的编译安装。 为什么要自己编译呢&#xff1f;其中一个很重要的原因就是ffmpeg在编译时可以加入很多插件&#xff0c;这种特定的库网络上可能找不到编译好的版本&#xff0c;另外如…

快速使用BRTR公式出具的大模型Prompt提示语

Role:文章模仿大师 Background: 你是一位文章模仿大师&#xff0c;擅长分析文章风格并进行模仿创作。老板常让你学习他人文章后进行模仿创作。 Attention: 请专注在文章模仿任务上&#xff0c;提供高质量的输出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

元器件基础学习笔记——磁珠

一、磁珠的作用及构造 1.1 磁珠的作用 磁珠是一种用于抑制高频噪声的被动电子组件&#xff0c;通常由铁氧体材料制成&#xff0c;这种材料具有高电阻率和高磁导率&#xff0c;使其能够在高频下有效地将干扰信号以热能的形式消耗掉。在电路设计中&#xff0c;磁珠被广泛用于信号…

【计算机毕业设计】003基于weixin小程序教学辅助

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【RabbitMQ】一文详解消息可靠性

目录&#xff1a; 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件&#xff0c;广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信&#xff0c;提供了高度的灵活性和可伸缩性。然而&#xff0c;这种通…

JavaScript进阶(三)---声明函数、调用函数、匿名函数、箭头函数、构造函数,自执行函数

目录 1. 声明函数&#xff1a; 2. 调用函数 3. 匿名函数 4. 箭头函数 箭头函数this使用案例&#xff1a; 5. 构造函数 构造函数的特点&#xff1a; 构造函数与普通函数的区别&#xff1a; 注意事项&#xff1a; 6.自执行函数 JavaScript是一种广泛使用的编程语言&…

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(二)

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数&#xff08;二&#xff09; 0. 引言1. 关于m_geodesic2. 关于mygrid_sand23. 结语 0. 引言 通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍&#xff0c;已经能够满足基本的绘图需求&#xff0c;本节…

Linux vim文本编辑器

Vim&#xff08;Vi IMproved&#xff09;是一个高度可配置的文本编辑器&#xff0c;它是Vi编辑器的增强版本&#xff0c;广泛用于程序开发和系统管理。Vim不仅保留了Vi的所有功能&#xff0c;还增加了许多新特性&#xff0c;使其更加强大和灵活。 Vim操作模式 普通模式&#xf…

下载安装nodejs npm jarn笔记

下载安装nodejs npm jarn笔记 下载 Node.js安装Node.js修改node全局路径安装yarn 下载 Node.js 下载Node.js 安装Node.js 双击下载的下来的.msi文件运行并安装一直点next。安装路径可以是默认也可自定义。安装完成后Node.js和npm就安装完成了 命令行输入&#xff1a; nod…

企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP

文章目录 需求实验修改dhcp虚拟机配置文件测试PC获取IP查看user-bind 需求 (vmware虚拟机充当DHCP服务器)所有IP全部保留&#xff0c;只为已知mac分配固定IP 实验 前期配置&#xff1a; https://blog.csdn.net/xzzteach/article/details/140406092 后续配置均在以上配置的前…

【学术会议征稿】第三届智能电网与能源系统国际学术会议

第三届智能电网与能源系统国际学术会议 2024 3rd International Conference on Smart Grid and Energy Systems 第三届智能电网与能源系统国际学术会议&#xff08;SGES 2024&#xff09;将于2024年10月25日-27日在郑州召开。 智能电网可以优化能源布局&#xff0c;让现有能源…

推荐一款uniapp拖动验证码插件

插件地址&#xff1a;易盾验证码 - DCloud 插件市场 具体使用方式访问插件地址自行获取