官方有VisionFive.gpio,尝试下移植libgpiod到开发板。
一、安装GPIO库
1.1、下载源码
执行命令:
root@starfive:~
root@starfive:~
root@starfive:~
root@starfive:~
root@starfive:~
root@starfive:~
1.2、安装
root@starfive:~/libgpiod-2.0
root@starfive:~/libgpiod-2.0
root@starfive:~/libgpiod-2.0
安装完成后,生成的文件

二、测试
2.1、gpio.c
#include<stdio.h>
#include<unistd.h>
#include<gpiod.h>
#define PIN_IO2_46 46
#define PIN_IO2_44 44
#define PIN_IO2_61 61
#define PIN_IO2_63 63
#define PIN_IO2_42 42
int main()
{
struct gpiod_chip *gchip;
struct gpiod_line_info *glinein, *glineout;
struct gpiod_line_settings *gline_settings_in, *gline_settings_out;
struct gpiod_line_config *gline_config_in, *gline_config_out;
struct gpiod_request_config *gline_request_config_in, *gline_request_config_out;
struct gpiod_line_request *gline_request_in, *gline_request_out;
int offset_in[1] = {PIN_IO2_42};
int offset_out[4] = {PIN_IO2_44, PIN_IO2_46, PIN_IO2_61, PIN_IO2_63};
int value;
if ((gchip=gpiod_chip_open("/dev/gpiochip0")) == NULL)
{
perror("gpiod_chip_open");
return 1;
}
gline_settings_in = gpiod_line_settings_new();
if ((value=gpiod_line_settings_set_direction(gline_settings_in, GPIOD_LINE_DIRECTION_INPUT)) != 0)
{
perror("gpiod_line_settings_set_direction");
}
gline_config_in = gpiod_line_config_new();
value=gpiod_line_config_add_line_settings(gline_config_in, offset_in, 1, gline_settings_in);
gline_request_config_in = gpiod_request_config_new();
gline_request_in = gpiod_chip_request_lines(gchip, gline_request_config_in, gline_config_in);
gline_settings_out = gpiod_line_settings_new();
if (gpiod_line_settings_set_direction(gline_settings_out, GPIOD_LINE_DIRECTION_OUTPUT) != 0)
{
perror("gpiod_line_settings_set_direction");
}
gline_config_out = gpiod_line_config_new();
gpiod_line_config_add_line_settings(gline_config_out, offset_out, 4, gline_settings_out);
gline_request_config_out = gpiod_request_config_new();
gline_request_out = gpiod_chip_request_lines(gchip, gline_request_config_out, gline_config_out);
value=gpiod_line_request_set_value(gline_request_out, PIN_IO2_46, 0);
value=gpiod_line_request_set_value(gline_request_out, PIN_IO2_44, 1);
value=gpiod_line_request_set_value(gline_request_out, PIN_IO2_61, 0);
value=gpiod_line_request_set_value(gline_request_out, PIN_IO2_63, 1);
sleep(1);
for (int i = 0; i < 50; i++) {
gpiod_line_request_set_value(gline_request_out, PIN_IO2_46, 1);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_44, 0);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_61, 1);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_63, 0);
sleep(1);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_46, 0);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_44, 1);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_61, 0);
gpiod_line_request_set_value(gline_request_out, PIN_IO2_63, 1);
sleep(1);
}
gpiod_chip_close(gchip);
return 0;
}
2.2、编译代码
在gpio.c所在的目录下编译
命令:
root@starfive:~# gcc -I/root/starfive/mylib_local/include -L/root/starfive/mylib_local/lib -o gpio gpio.c -lgpiod
2.3、设置路径
root@starfive:~# export LD_LIBRARY_PATH=/root/starfive/mylib_local/lib:$LD_LIBRARY_PATH
root@starfive:~# export PATH=/root/starfive/mylib_local/bin:$PATH
三、运行结果
运行命令:
root@starfive:~# ./gpio