什么是 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就能用。
核心功能亮点
- LED:设置亮度、开关,和 sysfs 模式 1:1 对应;
- SPI:全双工收发,一次 transfer 常见场景都罩得住;
- I2C:多消息事务,轻松读写 EEPROM、传感器;
- 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;}
优缺点
优势:
不足:
总结
如果你正在做树莓派/嵌入式 Linux 开发,想要一个轻量、零依赖、易用的外设I/O库,c-periphery 真心值得一试。它把那些麻烦的 sysfs 和 ioctl 全都藏到函数背后,让你专注在业务逻辑上。秒学上手、快速迭代,就是这么简单。快去下载试试,把硬件控制也变成“写C就行”的快乐体验吧!
项目地址:https/github.com/vsergeev/c-periphery