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

为何使用libgpiod会导致OpenWRT系统文件系统损坏?

问题排查与解决方案:OpenWRT下libgpiod使用后根目录生成大量随机文件

核心问题分析

根目录出现的随机文件名类似控制台输出,大概率是内核/工具的输出被错误重定向或写入到根目录,结合it87芯片特性,可能和GPIO驱动与串口console的冲突、工具调用逻辑错误、内核配置异常有关。

排查步骤

  • 检查随机文件内容
    先查看文件内容定位来源:

    cat /<random-file-name>
    

    如果内容是内核printk日志或gpiod工具的输出,可进一步锁定问题源头。

  • 定位关联进程
    用lsof查看文件是否被进程占用:

    lsof /<random-file-name>
    

    确认是gpiod工具本身、内核驱动还是其他脚本进程导致。

  • 检查内核配置
    提取当前内核配置并检查关键项:

    zcat /proc/config.gz > config.txt
    

    重点确认:

    • CONFIG_GPIO_IT87:确保it87 GPIO驱动已启用(=y或=m)
    • CONFIG_GPIOLIB_CHARDIR=y:确保GPIO字符设备支持开启
    • CONFIG_SERIAL_8250_IT87:如果启用,可能和GPIO共享硬件资源导致冲突
    • CONFIG_PRINTK:确认printk输出未被错误定向
  • 排查gpiod工具调用逻辑
    检查定时任务、init脚本中调用gpioget/gpioset的命令,是否存在错误的重定向(比如gpioget ... > $undefined_var,变量为空时会在根目录生成文件)。

  • 手动验证工具行为
    直接执行gpiod工具,观察是否生成文件:

    gpioget gpiochip0 0
    

    若手动执行也出现问题,说明是工具或驱动层面的bug;若仅脚本执行时出现,排查脚本逻辑。

可能的解决方案

  • 禁用it87串口驱动
    it87芯片的串口功能可能与GPIO驱动冲突,导致console输出被错误写入根目录。在OpenWRT内核配置中禁用CONFIG_SERIAL_8250_IT87,重新编译内核。

  • 修正脚本重定向逻辑
    若脚本中存在错误的输出重定向,将输出定向到指定日志文件或/dev/null,例如:

    gpioget gpiochip0 0 >> /var/log/gpio.log 2>&1
    
  • 调整内核console参数
    编辑/boot/cmdline.txt,确保console参数仅指向正确的设备(比如串口ttyS0或虚拟控制台tty0),移除多余的console配置,避免输出被错误路由。

  • 升级libgpiod版本
    OpenWRT自带的libgpiod可能存在兼容性bug,尝试升级到最新稳定版,重新编译libgpiod包后替换原版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:50:36