You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派使用node-usb调用open()遇LIBUSB_ERROR_ACCESS权限问题求助

解决node-usb在树莓派上的LIBUSB_ERROR_ACCESS权限问题

嘿,我之前在树莓派上用node-usb操作USB设备时也踩过这个权限坑,咱们来一步步搞定它:

为什么你之前的chmod命令没用?

你修改的/media/pi/EFD0-AA20是USB设备挂载后的文件系统目录,但node-usb是直接和USB原始设备节点交互的,这些节点在/dev/bus/usb/路径下,和挂载目录的权限完全没关系,所以改挂载目录权限自然不起作用。

解决方案

1. 临时快速修复(重启后失效)

先找到你的USB设备对应的总线和地址:

  • 运行lsusb命令,找到你的SanDisk设备,输出会类似这样:

    Bus 001 Device 005: ID 1921:21891 SanDisk Corp. Ultra Fit
    

    这里的001是总线号,005是设备地址。

  • 给对应的设备节点添加读写权限:

    sudo chmod 666 /dev/bus/usb/001/005
    

    执行完这个命令后,再运行你的node代码应该就能正常打开设备了。

2. 永久解决(推荐)

通过udev规则让系统自动给这个设备设置权限,不用每次手动操作:

  • 创建一个udev规则文件:
    sudo nano /etc/udev/rules.d/50-sandisk-usb.rules
    
  • 在文件里添加以下内容(注意替换成你的VID和PID,就是你代码里的1921和21891):
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1921", ATTRS{idProduct}=="21891", MODE="0666"
    
  • 保存退出后,重新加载udev规则并触发生效:
    sudo udevadm control --reload-rules
    sudo udevadm trigger
    
    以后每次这个USB设备连接到树莓派,系统都会自动给它设置合适的权限,再也不用手动改了。

代码小建议

给你的代码加个错误处理,这样能更清晰地排查问题,也避免程序直接崩溃:

usb.on('attach', function(device) {
  try {
    const sandiskUltrafit = usb.findByIds(1921, 21891);
    if (sandiskUltrafit) {
      sandiskUltrafit.open();
      console.log("设备成功打开!");
    } else {
      console.log("未找到目标USB设备");
    }
  } catch (err) {
    console.error("打开设备失败:", err.message);
  }
});

内容的提问来源于stack exchange,提问作者user9237891

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:48