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可以:- 先物理拔插串口设备,让系统重新识别
- 临时修改设备权限(重启后会失效):
sudo chmod 666 /dev/tty.usbserial-XXXX - 永久解决:查看串口设备的所属组(执行
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的底层调用冲突:- 卸载当前的串口驱动(比如CH340驱动可通过官方卸载工具移除)
- 下载并安装对应芯片的最新官方驱动,重启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
相关产品推荐
相关产品推荐

