[求助] LicheePi 4A 移植 wiringX 通用模式出现段错误 (Segmentation Fault),怀疑是 GPIO 480 索引越界导致

大家好,我在 LicheePi 4A (Revy OS) 上尝试移植并使用 wiringX 库控制 GPIO 时遇到了问题,想请教一下各位大佬。

环境信息:

  • 硬件: LicheePi 4A (16GB)

  • 系统: Revy OS (基于 Debian)

  • 工具链: RuyiSDK

操作步骤: 我下载了 wiringX 源码,手动修复了部分构建脚本错误(注释了不兼容的平台代码),成功编译并安装了库。 因为 LicheePi 4A 的 GPIO 在 Sysfs 中的起始编号是 480,所以我使用 generic 模式编写了如下测试代码:

C

#include <unistd.h>
#include <wiringx.h>
#include <stdio.h>

int main() {
    // 1. 初始化 WiringX (使用 generic 模式以避免段错误)
    // Generic 模式通过 Linux Sysfs 接口控制,兼容性最强
    if(wiringXSetup("generic", NULL) == -1) {
        wiringXGC();
        printf("WiringX 初始化失败!\n");
        return -1;
    }

    // 2. 定义要操作的引脚
    // LicheePi 4A 的 GPIO 控制器起始引脚号为 480
    int PIN_LED = 480; 

    if(wiringXValidGPIO(PIN_LED) != 0) {
        printf("无效的 GPIO 引脚号: %d\n", PIN_LED);
        return -1;
    }

    // 3. 设置引脚模式为输出
    pinMode(PIN_LED, PINMODE_OUTPUT);

    printf("开始运行 Blink 测试 (按 Ctrl+C 退出)...\n");

    while(1) {
        printf("LED 亮 (Pin %d)\n", PIN_LED);
        digitalWrite(PIN_LED, HIGH); // 输出高电平 (3.3V)
        sleep(1);                    // 等待 1 秒
        
        printf("LED 灭 (Pin %d)\n", PIN_LED);
        digitalWrite(PIN_LED, LOW);  // 输出低电平 (0V)
        sleep(1);                    // 等待 1 秒
    }
    return 0;
}

报错现象: 运行编译后的程序(已给 sudo 权限),直接提示: Segmentation fault

我的分析(求证): 我排查后怀疑是 GPIO 编号过大 导致的。 LicheePi 4A 的 GPIO 编号是从 480 开始的。我推测 wiringXgeneric 模式在内部实现时,可能维护了一个静态数组来管理引脚状态。如果这个数组的大小是针对树莓派等传统板子设计的(例如大小只有 64 或 128),那么当我传入 480 作为索引时,就会发生数组越界访问,从而导致段错误。

请问大家是否有遇到过类似情况?在这个平台上使用 wiringX 是否必须修改源码中的数组大小定义?

非常感谢!

wiringXSetup 需要指定一个平台吧, Generic 没有指定任何平台。

看 wiringx 的仓库,似乎没有荔枝派 4A 的支持。