当前位置:首页>Linux>C-Periphery:让Linux嵌入式接口变得更容易!

C-Periphery:让Linux嵌入式接口变得更容易!

  • 2026-10-08 16:23:56
C-Periphery:让Linux嵌入式接口变得更容易!

什么是 c-periphery

嘿,你还在为操纵Linux下的GPIO、I2C、SPI、PWM、LED这些外设头疼?c-periphery 就是给你当救兵的。它是一个纯C编写的用户态外设I/O库,把原生的Linux sysfs、ioctl、文件操作这些繁琐接口,全都封装成简单易用的函数。写几行C代码,轻松撸动树莓派、BeagleBone、嵌入式板子上的外设,别再手写一大堆文件读写了。

解决了哪些痛点

  • 接口繁琐:原生的 /sys/class/gpio/export/unexport、ioctl、设备节点……光看就想睡着。
  • 错误处理难:要自己抠errno、手动close,代码一多就乱成一锅粥。
  • 可移植性差:不同平台路径、参数不一样,还得啰嗦好多if/else。
  • 依赖臃肿:有些库要依赖glib、boost、python……你只想要个轻量级的C库啊!

c-periphery 把各种接口统一在一套 API 里,重入性好、只依赖 libc + Linux 内核,编译后生成一个静态.a或共享库,直接拿去gcc -lperiphery就能用。

核心功能亮点

  • GPIO:输入/输出、高电平/低电平随你切;
  • LED:设置亮度、开关,和 sysfs 模式 1:1 对应;
  • PWM:频率、占空比、使能全都有;
  • SPI:全双工收发,一次 transfer 常见场景都罩得住;
  • I2C:多消息事务,轻松读写 EEPROM、传感器;
  • MMIO:内存映射寄存器,秒读秒写;
  • Serial:串口 115200、8N1……只管写、读就行。

代码实例

1)GPIO 翻转 LED

#include"gpio.h"intmain(){gpio_t*led=gpio_new();gpio_open(led,"/dev/gpiochip0",17,GPIO_DIR_OUT);// 让 LED 闪三下for(inti=0;i<3;i++){gpio_write(led,true);usleep(300000);gpio_write(led,false);usleep(300000);}gpio_close(led);gpio_free(led);return0;}

2)SPI 与传感器对话

#include#include"spi.h"intmain(){spi_t*spi=spi_new();spi_open(spi,"/dev/spidev0.0",0,500000);uint8_ttx[2]={0x9F,0x00},rx[2];spi_transfer(spi,tx,rx,2);printf("芯片ID: %02X %02X\n",rx[0],rx[1]);spi_close(spi);spi_free(spi);return0;}

优缺点

优势:

  • 极简依赖,只要 libc+Linux;
  • API 设计一致,写 C 的都能秒上手;
  • 静态/共享两种编译方式,灵活集成;
  • 支持交叉编译,ARM/X86 一把梭。

不足:

  • 纯用户态,不支持内核态驱动的高级特性;
  • 对超高性能实时场景略显力不从心;
  • API 层不够“花哨”,功能扩展要自己动手。

总结

如果你正在做树莓派/嵌入式 Linux 开发,想要一个轻量、零依赖、易用的外设I/O库,c-periphery 真心值得一试。它把那些麻烦的 sysfs 和 ioctl 全都藏到函数背后,让你专注在业务逻辑上。秒学上手、快速迭代,就是这么简单。快去下载试试,把硬件控制也变成“写C就行”的快乐体验吧!

项目地址:https/github.com/vsergeev/c-periphery

最新文章

随机文章