安全卸载USB存储驱动的正确顺序是先解除占用、再逆序卸载uas和usb_storage模块。需先umount设备、检查lsblk和lsmod确认状态,用modprobe -r按uas→usb_storage顺序卸载,加载时优先使用modprobe自动处理依赖。

Linux 存储设备驱动的加载与卸载不是简单执行一条命令就能完成的事,核心在于尊重模块依赖关系、解除用户态占用、并按逆序安全清理。标准化流程不追求“一步到位”,而强调可预测、可回退、不破坏系统状态。
先确认设备与驱动当前状态
盲目操作前必须看清现状,避免误卸载正在使用的模块:
- 用 lsblk -o NAME,TRAN,MOUNTPOINT 查看哪些块设备走 USB 通道、是否已挂载
- 用 lsmod | grep -E '(usb_storage|uas|scsi_mod)' 观察模块加载顺序与引用计数(如
usb_storage 66636 1 uas表示被 uas 引用) - 用 fuser -v /mount/point 或 lsof +D /mount/point 检查是否有进程正访问挂载点
卸载前必须解除所有占用
内核不允许卸载被占用或依赖的模块,强行 -f 可能导致 I/O 错误甚至 panic:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 若设备已挂载,先执行 umount /dev/sdX1 或 udisksctl unmount -b /dev/sdX1
- 若需彻底断电(如热拔 U 盘),再执行 udisksctl power-off -b /dev/sdX
- 检查 /sys/bus/usb/drivers/ 下对应 USB 设备是否仍有绑定;必要时可 echo "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind(仅限高级场景)
按依赖逆序卸载内核模块
USB 存储链路典型依赖链为:uas → usb_storage → scsi_mod。卸载必须从最上层开始:
- 先尝试 modprobe -r uas —— 若失败,说明 uas 正被使用(如 lsblk 显示 TRAN=uas),需先停用设备
- 成功后执行 modprobe -r usb_storage —— 它可能被 uas 占用,所以必须等 uas 卸载完
- scsi_mod 通常不建议手动卸载,它是 SCSI 子系统基础模块,多个存储驱动共用;除非明确调试需要且无其他 SCSI 设备在用
加载时优先使用 modprobe,而非 insmod
加载应交由系统自动管理依赖,尤其对 usb_storage 这类有明确依赖链的模块:
- 直接运行 modprobe usb_storage,系统会自动加载 scsi_mod(若未加载)并注册 uas(若硬件支持且未禁用)
- 如需强制禁用 UAS 回退到传统模式,可在加载前写入:echo 'options uas use_uas=0' > /etc/modprobe.d/disable-uas.conf,再 depmod -a && modprobe -r uas usb_storage && modprobe usb_storage
- 避免用 insmod 加载,它不解析依赖,易因缺少 scsi_mod 而报 Unknown symbol in module


















