记一次RK3568搭建NAS BUG:开发板插上 USB 移动硬盘没反应

项目场景:

在使用嵌入式 Linux 开发板RK3568搭建NAS时,我们经常会外接各种 USB 存储设备。通常情况下,插上 U 盘或硬盘,敲一行 lsblk 就能直接挂载使用。但最近,我遇到了一个极其顽固的问题:系统明明通过 lsusb 认出了硬盘盒,但在 lsblk 里就是死活刷不出磁盘节点(如 /dev/sda)。


问题描述

硬件环境与初始症状

  • 操作系统:Ubuntu 20.04 (内核版本 5.10.160)
  • 外接设备:搭载 JMicron JMS583 主控的 M.2 NVMe 转 USB 硬盘盒(一块机械硬盘)

症状表现:

执行 lsblk:只能看到板载的 eMMC (mmcblk0, mmcblk1),完全没有 /dev/sda。

执行 lsusb:设备赫然在列,显示 Bus 001 Device 002: ID 152d:0583 JMicron Technology...,甚至在详细信息中显示已经成功以 USB 2.0 高速模式握手。

硬件层认出来了,块设备层却没认出来。


排查过程:

第一阶段:排查供电与协议冲突

由于我使用单独电源给这个SATA转USB磁盘供电,所以排除是电源问题;

然后,检查UAS 协议不匹配问题。JMicron JMS583 主控在 Linux 下的 UAS协议兼容性臭名昭著。在 USB 2.0 环境下,极易出现响应超时,导致内核不断重置设备。随后,尝试通过 sudo modprobe usb-storage quirks=152d:0583:u (这个152d:0583是lsusb获取)命令临时屏蔽 UAS 协议。

但是系统无情报错:FATAL: Module usb-storage not found...这意味着我的系统内核并没有将 USB 存储驱动编译成可动态加载的 .ko 模块。

第二阶段:绕过 Udev 机制:通过 new_id 强制重定向驱动

我开始怀疑是USB存储驱动有问题,然后通过ls /sys/bus/usb/drivers发现usb-storage 和 uas 都在列表里!这说明驱动并没有被阉割,而是被静态编译在了内核中。

真正原因是:系统底层虽然有 usb-storage 驱动,但它拒绝自动去接管这个新插入的 JMicron 硬盘盒。

所以我通过下面指令强行让usb-storage 驱动接管152d:0583存储设备

bash 复制代码
# 将设备 ID 强行写入 usb-storage 的接管列表中
echo "152d 0583" | sudo tee /sys/bus/usb/drivers/usb-storage/new_id

最终解决方案:

  1. 编辑 /etc/rc.local 文件:
bash 复制代码
sudo nano /etc/rc.local

在文件末尾的 exit 0 上一行,添加以下内容:

bash 复制代码
echo "152d 0583" > /sys/bus/usb/drivers/usb-storage/new_id

这个152d 0583换成自己的设备

相关推荐
鬼手点金5 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
小玮看世界1 天前
【Bug 报告】腾讯元宝 Windows 客户端 v2.88.1 新建对话卡死、界面残留与输入框乱码
bug
衣舞晨风2 天前
一次升级引出两个BUG:API7 AI 网关流式 500 与低流量 CPU 打满排查
网关·ai·bug·异常排查
小此方6 天前
「插曲:Git」企业规范篇:DevOps开发模型、Git Flow五类分支设计与测试/预发布/生产环境Bug修复及Hotfix紧急发布流程
git·bug·devops
中文英文-我选中文8 天前
FreeRTOS 玄学Bug:调换任务创建顺序,程序时而正常、时而死机(栈溢出内存踩踏深度复盘)
bug
Keven_118 天前
BUG:UVA116
算法·bug·图论
鬼手点金8 天前
opencode-隐私优先配置
服务器·前端·javascript·bug·openclaw
itmigrate9 天前
异步请求竞态,藏在页面渲染里的隐形bug
bug
今夕资源网10 天前
OmniVoice 今夕整合包 本地语音TTS断网可用 修复了一些BUG 优化生成速度 极速秒生成
bug·语音克隆·omnivoice·断网可用·本地语音tts·语音tts
烧烧的酒0.o15 天前
Codex桌面版更新后不能使用最新模型问题-排查修复总结
chatgpt·bug