树莓派、龙芯智龙这类mini开发板上的Linux系统,通常都提供了像Arduino同样操做引脚电路的功能,统称GPIO接口(General-purpose input/output,通用目的输入输出)。但与Arduino不一样,使用上涉及稍复杂的Linux内核概念。不一样于Arduino直接将物理硬件暴露给用户的形式(直接进行编程和操做,并烧写芯片),Linux系统必须经过一个叫“驱动”的程序将物理硬件进行封装,而后把其包装好的接口按照linux文件系统的方式,提供给用户进行操做,用户操做硬件的时候必须经过这个文件系统进行输入输出,也就是所谓的“用户态编程”。总结起来就是3种方式:html
(用户态编程,此时龙芯智龙V2上的LED对应的GPIO口为51号)linux
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(void){ FILE *p=NULL; int i=0; int port=51; p = fopen("/sys/class/gpio/export","w"); fprintf(p,"%d",port); fclose(p); p = fopen("/sys/class/gpio/gpio51/direction","w"); fprintf(p,"out"); fclose(p); for(i=0;i<100;i++){ p = fopen("/sys/class/gpio/gpio51/value","w"); fprintf(p,"%d",1); sleep(1); fclose(p); p = fopen("/sys/class/gpio/gpio51/value","w"); fprintf(p,"%d",0); sleep(1); fclose(p); } p = fopen("/sys/class/gpio/unexport","w"); fprintf(p,"%d",port); fclose(p); return 0; }
在VMware虚拟机安装的Kylin Ubuntu上经过交叉编译工具进行编译:编程
mipsel-linux-gcc led51.c -o led51_mips
将编译好的led51_mips可执行文件考到u盘,经过u盘考到智龙主板上,远程连接智龙并进入智龙的linux系统,输入./led51_mips运行该可执行文件,能够看到智龙主板上5颗led灯在不停地闪烁,说明程序成功。bash
(用户态编程,此时龙芯智龙V2上的S3按键对应的GPIO口为92号):工具
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(void){ FILE *p=NULL; char i[100]={0,}; p = fopen("/sys/class/gpio/export","w"); fprintf(p,"%d",92); fclose(p); p = fopen("/sys/class/gpio/gpio92/direction","w"); fprintf(p,"in"); //配置成输入 fclose(p); while(1){ //以只读方式打开 p = fopen("/sys/class/gpio/gpio92/value","r"); //使文件读写定位到0位置 fseek(p , 0 , 0); #if 0 //将文件内容输出到存储器i中,注意要以字符串的方式,不然会出错 fscanf(p,"%s",i); #else //从文件中读出数据到存储器i中 fread(i , 1, 1 ,p); #endif //以字符的方式将读到的值打印出 printf("key = %c \r\n",i[0]); sleep(1); //注意这里必需要关闭,而后再次读时再从新打开,这样只面的内容才会更新 fclose(p); } return 0; }
在VMware虚拟机安装的Kylin Ubuntu上经过交叉编译工具进行编译:ui
mipsel-linux-gcc button92.c -o button92_mips
将编译好的button92_mips可执行文件考到u盘,经过u盘考到智龙主板上,远程连接智龙并进入智龙的linux系统,输入./button92_mips运行该可执行文件,能够看到程序在不断地打印按钮的状态,咱们按下智龙主板上的按键,就会看到按钮的状态会在一、0之间变化,说明程序成功了。spa
参考:操作系统