Open fat-wang opened 2 years ago
我自己确实也有这个问题,但没有这些日志。
个人怀疑是冲击电流的原因。暂时没去研究这个问题。
BTW, 你的连接线有断开vcc吗
连接线有断开VCC。并且测试了没断开VCC的USB线,也存在问题。 这个问题在1.0和1.3主板上都存在。 另外我测试了3.10.107内核(来自odroid-c的ubuntu镜像), 没有这个问题, 多次插拔一切正常。但它在1.0主板上似乎不能通过dtb控制usb模式为otg。 3.10.107内核多次插拔工作正常的日志为(每次插拔都会有): [ 1223.852531] USB RESET [ 1224.028630] g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage
看起来需要强制开启device模式,不然不能自动识别。
echo device > /sys/class/usb_role/c9040000.usb-role-switch/role
我也遇到了,哪怕是模拟HID键鼠,拔掉再插,也是必然死机。不过我这不影响,我的需求就是插上不动。20块玩客云+18块的usb采集卡,成本最低的pi kvm。
测试了大佬https://github.com/hzyitc/pikvm-onecloud这个包。 问题解决了一半。 插拔不再死机,但模拟的设备插拔后不能正确识别。 这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
测试了大佬https://github.com/hzyitc/pikvm-onecloud 这个包。问题解决了一半。 插拔不再死机,但模拟的设备插拔后不能正确识别。 这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
你用的那个版本?1.0还是1.3? 我刷的这个包,断开会导致 玩客云重启。因为重启太慢,用到是能用,但是跟不上bios界面。
测试了大佬https://github.com/hzyitc/pikvm-onecloud 这个包。问题解决了一半。 插拔不再死机,但模拟的设备插拔后不能正确识别。 这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
你用的那个版本?1.0还是1.3? 我刷的这个包,断开会导致 玩客云重启。因为重启太慢,用到是能用,但是跟不上bios界面。
我用1.0主板测试的. 我只试了g_mass_storage. 断开重启问题你可以再看下armbian中hzyitc提交的关于USB以及PWM相关的补丁, 和pikvm-onecloud的补丁结合下重编译内核试试.
测试了大佬https://github.com/hzyitc/pikvm-onecloud 这个包。问题解决了一半。 插拔不再死机,但模拟的设备插拔后不能正确识别。 这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
你用的那个版本?1.0还是1.3? 我刷的这个包,断开会导致 玩客云重启。因为重启太慢,用到是能用,但是跟不上bios界面。
我用1.0主板测试的. 我只试了g_mass_storage. 断开重启问题你可以再看下armbian中hzyitc提交的关于USB以及PWM相关的补丁, 和pikvm-onecloud的补丁结合下重编译内核试试.
看来是
pikvm-onecloud 在1.0无效,1.3重启
armbian-onecloud 在1.0、1.3都死机无任何日志
使用作者旧版Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.xz 在旧版主板和主板otg功能正常(pikvm所需的otg功能可以正常使用,没有拔插重启现象),不过需手动在dtb处开启。
Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.
是这个吗?Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.xz
Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.
是这个吗?Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.xz
是的,它需要在dtb开启OTG功能,新旧版本主板使用此系统模拟键鼠和U盘都是正常的,我使用此镜像近乎完美的运行了pikvm(在B站上发布pikvm相关教程,网友反馈正常)
5.10.x的内核确实没问题。完美~
Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.
是这个吗?Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.xz
是的,它需要在dtb开启OTG功能,新旧版本主板使用此系统模拟键鼠和U盘都是正常的,我使用此镜像近乎完美的运行了pikvm(在B站上发布pikvm相关教程,网友反馈正常)
请问dtb改哪里呢?
Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.
是这个吗?Armbian_22.11.0-trunk_Onecloud_jammy_legacy_5.10.149.burn.img.xz
是的,它需要在dtb开启OTG功能,新旧版本主板使用此系统模拟键鼠和U盘都是正常的,我使用此镜像近乎完美的运行了pikvm(在B站上发布pikvm相关教程,网友反馈正常)
请问dtb改哪里呢?
测试了大佬 https://github.com/hzyitc/pikvm-onecloud 这个包。
问题解决了一半。
插拔不再死机,但模拟的设备插拔后不能正确识别。
这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
我有个大胆的想法。把这个包 https://github.com/hzyitc/pikvm-onecloud 的boot分区,从5.18换成5.10。毕竟都是jammy,应该兼容。这样工作量最小。刷完后,替换boot分区几个文件而已。
测试了大佬 https://github.com/hzyitc/pikvm-onecloud 这个包。 问题解决了一半。 插拔不再死机,但模拟的设备插拔后不能正确识别。 这已经是个很大的进步了,至少现在我可以通过SSH控制重启来恢复设备。
我有个大胆的想法。把这个包 https://github.com/hzyitc/pikvm-onecloud 的boot分区,从5.18换成5.10。毕竟都是jammy,应该兼容。这样工作量最小。刷完后,替换boot分区几个文件而已。
意义何在?想要5.10内核不同的系统?releases中搜5.10,armbian/ubuntu、线刷的/U盘的、不同版本的镜像 任君挑选~ 如果是已有系统不想重刷, 那你要替换 /boot/zImage /boot/uInitrd /boot/dtb /lib/modules/
提交此问题的otg修复补丁 描述:猜测是玩客云不支持时钟门方式省电,此功能从5.15内核第一次引入并沿用至今,所以自5.15内核开始出现otg拔插死机问题。 适用分支:5.15内核及以上版本 测试环境:在6.6.15和6.7内核上测试otg拔插正常
--
drivers/usb/dwc2/core_intr.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
index 158ede753..cf261581c 100644
--- a/drivers/usb/dwc2/core_intr.c
+++ b/drivers/usb/dwc2/core_intr.c
@@ -524,12 +524,12 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg)
case DWC2_POWER_DOWN_PARAM_NONE:
/*
* If neither hibernation nor partial power down are supported,
* clock gating is used to save power.
*/
- if (!hsotg->params.no_clock_gating)
- dwc2_gadget_enter_clock_gating(hsotg);
+ if (!hsotg->params.no_clock_gating) ;
+ //dwc2_gadget_enter_clock_gating(hsotg);
}
/*
* Change to L2 (suspend) state before releasing
* spinlock
--
提交此问题的otg修复补丁 描述:猜测是玩客云不支持时钟门方式省电,此功能从5.15内核第一次引入并沿用至今,所以自5.15内核开始出现otg拔插死机问题。 适用分支:5.15内核及以上版本 测试环境:在6.6.15和6.7内核上测试otg拔插正常
-- drivers/usb/dwc2/core_intr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c index 158ede753..cf261581c 100644 --- a/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c @@ -524,12 +524,12 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg) case DWC2_POWER_DOWN_PARAM_NONE: /* * If neither hibernation nor partial power down are supported, * clock gating is used to save power. */ - if (!hsotg->params.no_clock_gating) - dwc2_gadget_enter_clock_gating(hsotg); + if (!hsotg->params.no_clock_gating) ; + //dwc2_gadget_enter_clock_gating(hsotg); } /* * Change to L2 (suspend) state before releasing * spinlock --
GJ,看起来可以通过no_clock_gating
直接控制,有没有尝试过直接修改该参数?
提交此问题的otg修复补丁 描述:猜测是玩客云不支持时钟门方式省电,此功能从5.15内核第一次引入并沿用至今,所以自5.15内核开始出现otg拔插死机问题。 适用分支:5.15内核及以上版本 测试环境:在6.6.15和6.7内核上测试otg拔插正常
-- drivers/usb/dwc2/core_intr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c index 158ede753..cf261581c 100644 --- a/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c @@ -524,12 +524,12 @@ static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg) case DWC2_POWER_DOWN_PARAM_NONE: /* * If neither hibernation nor partial power down are supported, * clock gating is used to save power. */ - if (!hsotg->params.no_clock_gating) - dwc2_gadget_enter_clock_gating(hsotg); + if (!hsotg->params.no_clock_gating) ; + //dwc2_gadget_enter_clock_gating(hsotg); } /* * Change to L2 (suspend) state before releasing * spinlock --
GJ,看起来可以通过
no_clock_gating
直接控制,有没有尝试过直接修改该参数?
以前的测试结果:向dwc2驱动的meson8b配置添加p->no_clock_gating = true;
后仍内核失联假死,但多次拔插后otg设备可用(即内核失联时otg虚拟设备仍正常工作,不会提示未知设备)。再在dwc2_set_param_power_down函数添加hsotg->params.power_down = 0;
后工作正常。但出现了副作用:windows识别otg虚拟设备非常慢,接近半分钟。
而注释dwc2_gadget_enter_clock_gating(hsotg);
不会带来副作用,不会影响otg虚拟设备识别速度。
以前的测试结果:向dwc2驱动的meson8b配置添加
p->no_clock_gating = true;
后仍内核失联假死,但多次拔插后otg设备可用(即内核失联时otg虚拟设备仍正常工作,不会提示未知设备)。再在dwc2_set_param_power_down函数添加hsotg->params.power_down = 0;
后工作正常。但出现了副作用:windows识别otg虚拟设备非常慢,接近半分钟。而注释
dwc2_gadget_enter_clock_gating(hsotg);
不会带来副作用,不会影响otg虚拟设备识别速度。
行,等我有空测试下
在使用玩客云OTG模拟U盘过程中发现,从电脑拔掉公对公USB然后再插,玩客云100%会死机。 TTL和SSH都会无响应,网络过一会儿会断开。 TTL中最后的日志为: [ 299.371333] dwc2 c9040000.usb: dwc2_hsotg_ep_stop_xfr: timeout GINTSTS.GOUTNAKEFF [ 299.373543] dwc2 c9040000.usb: dwc2_hsotg_ep_stop_xfr: timeout DOEPCTL.EPDisable
网上搜发现 https://bugzilla.kernel.org/show_bug.cgi?id=209555 和我的问题类似。尝试修改了对应位置并重编译内核,但对玩客云并没什么用。
请问大佬有解决办法吗?