您尚未登录。

楼主 # 2022-03-21 09:27:23

bigbat
会员
注册时间: 2022-01-30
已发帖子: 71
积分: 21

licheepi USB串口终于搞定

前前后后弄了有20多次的实验,终于把f1c100s的两种linux gadget 串口驱动搞定了。下面就对这次的过程做个总结:
参考的贴子主要有
http://trac.gateworks.com/wiki/linux/OTG
https://whycan.com/t_2401.html
https://whycan.com/t_6242.html
用的linux版本是主线,http://nano.lichee.pro/build_sys/kernel.html 以及配置文件。
linux的gadget驱动有两个版本,原生驱动和configfs驱动,主要区别是原生驱动不灵活,而且组合固定,configfs比较灵活,组合任意。原生的驱动带g_头,configfs带usb_f头,但是原生驱动也有优势,就是可以编译成内核驱动,只要一开机上电就可以使用
比如:可以将console配置成USB串口。configfs驱动都是动态加载的,这个就需要开机脚本的。
1、不管使用什么驱动,都要修改ccu-suniv.c文件,补丁内容如下:
jiangming1399 说:
花了一点时间对Icenowy的patch和chong的patch进行了比较,结果发现chong的patch包基本上就是在Icenowy的基础上更改了下面的这个文件:


--- ../linux/drivers/clk/sunxi-ng/ccu-suniv.c    2019-01-15 22:48:18.824587965 +0800
+++ drivers/clk/sunxi-ng/ccu-suniv.c    2019-01-23 09:05:17.959348454 +0800
@@ -238,7 +238,7 @@
/* The BSP header file has a CIR_CFG, but no mod clock uses this definition */

static SUNXI_CCU_GATE(usb_phy0_clk,    "usb-phy0",    "osc24M",
-              0x0cc, BIT(8), 0);
+              0x0cc, BIT(1), 0);

static SUNXI_CCU_GATE(dram_ve_clk,    "dram-ve",    "pll-ddr",
              0x100, BIT(0), 0);
理论上将上面这个patch应用到Icenowy的4.14内核中,USB应该也就能跑了。
2、原生的内核驱动是和configfs驱动冲突的,但是原生驱动和动态加载的不冲突。对照whycan的帖子,根据需要修改配置文件,请参考相关的贴子
3、如果是原生驱动选择后,烧写到系统,上电就可以使用,如果是动态加载就要使用开机脚本了。
4、如果是原生动态的需要手动加载。
就是这里有个坑,加载g_serial时:
# modprobe g_serial
modprobe: module g_serial not found in modules.dep
可以有两种情况
一、没有选择对应的驱动。
二、没有在rootfs文件系统中安装模块。
5、configfs驱动安装贴子配置,参考 http://trac.gateworks.com/wiki/linux/OTG

# mount configfs
mount -t configfs none /sys/kernel/config
# load libcomposite module
modprobe libcomposite
# create a gadget
mkdir /sys/kernel/config/usb_gadget/g1
# cd to its configfs node
cd /sys/kernel/config/usb_gadget/g1
# configure it (vid/pid can be anything if USB Class is used for driver compat)
echo 0xabcd > idVendor
echo 0x1234 > idProduct
# configure its serial/mfg/product
mkdir strings/0x409
echo myserial > strings/0x409/serialnumber
echo mymfg > strings/0x409/manufacturer
echo myproduct > strings/0x409/product
# create a config
mkdir configs/c.1
# configure it with attributes if needed
echo 120 > configs/c.1/MaxPower
# ensure function is loaded
modprobe usb_f_acm
# create the function (name must match a usb_f_<name> module such as 'acm')
mkdir functions/acm.0
# associate function with config
ln -s functions/acm.0 configs/c.1
# enable gadget by binding it to a UDC from /sys/class/udc
echo 0000:01:00.0 > UDC
# to unbind it: echo "" UDC; sleep 1; rm -rf /sys/kernel/config/usb_gadget/g1

大坑:echo 0000:01:00.0 > UDC
总是出错,主要是理解 echo <udc name> > UDC出问题。
<udc name>中的内容是你用 ls /sys/class/udc/ 列出的文件名称,列出什么文件名称,只要加载该名称的文件,usb就驱动了!!!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn