在上一步的Linux编译中,配置文件默认启用了USB Gadget,并指定了一个名为 CDC Composite Device (Ethernet and ACM)。这个默认的配置文件会创建一个USB复合设备,这个复合设备同时有着ACM(虚拟串口)和ECM(网络共享)的功能。一切听起来是那么的美好,以至于似乎直接上电插上USB口就能识别到设备了。

然而,要是真的有这么顺利就好了。插上设备后,设备管理器中会多出一个 CDC Composite Device 设备。首先遇到的问题就是,没有驱动。这个的解决方案其实非常的简单,只需使用Zadig为这个设备安装一个串口驱动。串口驱动安装完成后,你就可以发现设备管理器中多出了一个串口。这时候,你就可以使用你的串口连接软件进行连接了。

真的有这么简单吗?你连接上之后就会发现,并不能输入任何的文字,也不会有任何的反应。这个情况是因为我们没有在inittab中使能这个终端。我们只需编辑/etc/inittab文件,添加一行ttyGS0::respawn:/bin/getty -L ttyGS0 57600 vt100即可启用这个终端。

接下来是网络共享的问题。之前我们提到过,这个默认的配置文件启用的是一个复合设备,然而我们在这里并没有看到其他的设备。看到这里,你应该猜到是什么问题了吧——没错,是Windows没有正确识别这个复合设备。根据这里的提示,我们需要手动编写一个脚本,让其手工配置USB Gadget的各项参数。这个脚本可以在这里找到,不过需要修改一下一开始的部分。首先是去掉modprobe的部分,这个驱动在内核中已经自动加载了。然后是手动挂载ConfigFS,使用mount none /config -t configfs
可以将configFS挂载到/config目录。这个脚本编辑完毕后,可以在/etc/init.d/里面放一个起动脚本,让其开机自动启动。

脚本部分写完之后,需要到编译的地方修改一些编译参数。具体是取消预配置”USB Gadget precomposed configurations”,然后启用”USB Gadget functions configurable through configfs”,并按需启用下面的子项目(例如CDC ACM、RNDIS等)。

重新编译并放入配置脚本后,就可以在设备管理器中看到两个设备了。RNDIS设备又是没有驱动,不过这次可以安装“网络适配器-Microsoft-远程NDIS兼容设备”来使其工作。


1 条评论

荔枝派nano的SPI-Flash系统编译创建全过程 – LotLab · 2019 年 2 月 22 日 上午 9:52

[…] 转到 Device Driver -> USB support -> USB Gadget support,勾上 Usb gadget functions configurable through configfs,和上面的Serial gadget console support,以及下面的CDC ACM、CDC ECM、RNDIS、FunctionFS,再取消USB Gadget precomposed configurations的勾选。(具体原因和操作方法可以看我前面的文章) […]

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注