root@RK3562-Tronlong:-# usbdevice restart starting /usr/bin/usbdevice restart, log saved to /var/log/usbdevice.1og 4566.442117] android_work: did not send uevent (0 0 0000000000000000) 4566.561023 Mass storage Function,version:2009/09/11 4566.561035 LUN:removable file:(no medium) root@RK3562-Tronlong:-# [ 4566.746814] android_work: did not send uevent (0 0 0000000000000000)
时间: 2025-04-04 19:12:51 浏览: 39
### 解决方案分析
在解决USB设备重启后未发送`uevent`的问题时,可以从以下几个方面入手:
#### 1. **理解UEVENT机制**
UEVENT是Linux内核中的事件通知机制,用于向用户空间报告硬件状态的变化。当USB设备连接或断开时,内核会通过`kobject_uevent_env()`函数触发相应的事件[^1]。
如果观察到日志中有`did not send uevent`的信息,则可能是因为某些条件不满足而导致事件未能被正确广播。例如,在引用中提到的日志显示:
```
[ 156.914379] android_work: did not send uevent (0 0 00000000d923ca9b)
```
#### 2. **检查Kernel配置**
确保内核支持必要的USB功能模块以及Gadget框架。对于Tronlong平台上的Mass Storage功能,需确认以下几点:
- 是否启用了`CONFIG_USB_GADGETFS`及相关选项。
- `CONFIG_ANDROID_WORK`是否已启用以支持Android特定的工作队列逻辑[^2]。
#### 3. **验证LUN可移除属性**
对于Mass Storage功能而言,LUN(Logical Unit Number)的定义至关重要。如果目标文件系统不可用或者不存在介质,则可能导致无法正常初始化并广播事件。以下是常见的排查方法:
- 检查`removable`标志是否设置为true。
- 使用命令查看当前挂载情况:
```bash
cat /sys/class/android_usb/f_mass_storage/lun*/file
```
若返回为空字符串表示无有效存储路径绑定给该LUN[^4]。
#### 4. **调试OTG角色切换**
当涉及OTG场景下的Host与Device互转操作时,可能会因为驱动加载顺序不当引起异常行为。参考相关笔记指出存在quirks匹配现象影响具体表现形式[^5]:
```
[ 1374.958064] usb-storage 3-1:1.0: Quirks match for vid 058f pid 6387: 20
```
---
### 排查步骤建议
针对上述问题提供一些通用性的指导方向如下所示:
#### 日志深入解析
进一步收集完整的kernel log以便定位确切失败原因所在位置;重点关注类似下面这些关键字片段:
```plaintext
usbcore: registered new interface driver ...
usb-storage: probe of ... complete
```
#### 修改启动参数
尝试调整grub引导菜单项加入额外debug flags来获取更详尽内部运作细节:
```diff
splash quiet -> debug ignore_loglevel earlyprintk=ttyS0,115200n8
```
#### 测试不同固件版本兼容性
有时厂商定制化改动较多容易引发跨代际间协作障碍故而可以考虑回退至稳定分支重新测试一遍整个流程看能否规避掉此类状况发生几率。
---
### 提供一段示范代码辅助实现自动化检测脚本编写工作
为了方便后续维护人员快速重现相同环境设定从而加速诊断效率现给出Python版简易工具样例仅供参考学习之用:
```python
import os
def check_luns():
base_path = "/sys/class/android_usb/f_mass_storage/"
luns_info = []
try:
entries = os.listdir(base_path)
for entry in entries:
if 'lun' in entry and os.path.isdir(os.path.join(base_path, entry)):
lun_file = os.path.join(base_path, entry, "file")
with open(lun_file, 'r') as f:
content = f.read().strip()
is_removable = True if "removable" in content else False
luns_info.append({
"name": entry,
"path": content,
"is_removable": is_removable
})
except Exception as e:
print(f"Error occurred while checking LUNs: {e}")
return luns_info
if __name__ == "__main__":
results = check_luns()
if results:
print("Detected LUN Information:")
for res in results:
print(f"LUN Name: {res['name']}, Path: {res['path']}, Removable: {'Yes' if res['is_removable'] else 'No'}")
else:
print("No valid LUN information found.")
```
---
###
阅读全文
相关推荐


















