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

Flutter libserialport在Mac上遇SerialPortError: Resource busy(errno=16)求助

解决Mac上flutter_libserialport报SerialPortError Resource busy (errno=16)的问题

针对你遇到的Mac上Flutter串口库无法读写但Python可正常访问、代码在其他Mac正常运行的情况,以下是几个针对性的排查和解决步骤:

  • 检查并终止占用串口的进程
    用lsof命令定位占用目标串口的进程:

    lsof /dev/tty.usbserial-XXXX  # 替换为你的实际串口路径
    

    输出结果中找到PID列对应的进程ID,执行kill -9 <PID>强制终止该进程。常见原因是之前的Flutter调试进程未完全退出,或者其他串口工具残留进程占用了端口。

  • 重置串口设备权限
    Mac上串口设备的权限配置可能导致Flutter进程无法访问,即使Python可以:

    1. 先物理拔插串口设备,让系统重新识别
    2. 临时修改设备权限(重启后会失效):
      sudo chmod 666 /dev/tty.usbserial-XXXX
      
    3. 永久解决:查看串口设备的所属组(执行ls -l /dev/tty.usbserial-XXXX,看group列),将当前用户加入该组:
      sudo dscl . append /Groups/<组名> GroupMembership <你的用户名>
      
      常见的组名是uucp或wheel,根据实际输出调整。
  • 清理Flutter和库的本地缓存
    本地构建缓存损坏可能导致异常,执行以下步骤重置:

    flutter clean
    rm -rf .dart_tool
    flutter pub get
    

    之后重新运行项目,看是否恢复正常。

  • 排查串口驱动冲突
    如果是USB转串口设备(如CH340、PL2303芯片),旧版驱动可能和libserialport的底层调用冲突:

    1. 卸载当前的串口驱动(比如CH340驱动可通过官方卸载工具移除)
    2. 下载并安装对应芯片的最新官方驱动,重启Mac后再测试。
  • 验证原生libserialport的可用性
    写一个极简的C程序测试原生libserialport是否能访问串口,排除Flutter绑定层的问题:

    #include <libserialport.h>
    
    int main() {
        struct sp_port *port;
        enum sp_return result = sp_get_port_by_name("/dev/tty.usbserial-XXXX", &port);
        if (result != SP_OK) return 1;
        result = sp_open(port, SP_MODE_READ_WRITE);
        if (result == SP_ERR_BUSY) {
            printf("Port busy\n");
        } else if (result == SP_OK) {
            printf("Port opened successfully\n");
            sp_close(port);
        }
        sp_free_port(port);
        return 0;
    }
    

    编译运行(需要先安装libserialport:brew install libserialport),如果原生程序也报资源忙,说明问题出在系统或库本身;如果正常,则尝试更新flutter_libserialport到最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20