linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现。

#include

int gpio_request(unsigned gpio, const char *label);

获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port。非空的label指针有助于诊断。主要告诉内核这块地址被占用了。当其他地方调用同一地址的gpio_request就会报告错误,该地址已经被申请。在/proc/mem有地址占用表描述。先申请在访问的好处是避免资源竞争。

void gpio_free(unsigned gpio);

释放 GPIO port 的使用权,由参数 gpio 指定具体 port。

int gpio_direction_input(unsigned gpio);

将 GPIO port(由参数 gpio 指定)设为输入。

int gpio_direction_output(unsigned gpio, int value);

将 GPIO port(由参数 gpio 指定)设为输出,并指定输出电平值(value)。

int gpio_get_value(unsigned gpio);

获得 GPIO port 上的电平值并返回。

void gpio_set_value(unsigned gpio, int value);

设置 GPIO port 上的电平。

int gpio_to_irq(unsigned gpio);

通过获得 gpio port 对应的 irq number。

int gpio_cansleep(unsigned gpio)

这个主要区分是挂载在外部总线上的GPIO控制器,还是内部的GPIO控制器。因为外部总线上的GPIO控制器可以休眠,所以用这个来区分是否是扩展的GPIO,返回1是扩展的GPIO,0的话就是内部的GPIO。

int gpio_get_value_cansleep(unsigned gpio);

void gpio_set_value_cansleep(unsigned gpio, int value);

这些都是对可以休眠扩展的gpio的操作

static inline int gpio_is_valid(int number) 判断GPIO是否有效,有效返回0

int gpio_export(unsigned gpio, booldirection_may_change);

void gpio_unexport();

//在 /sys/class/gpio/下面创建和取消对应的gpio号

int gpio_export_link(struct device *dev, const char *name, unsigned gpio)

//创建到导出GPIO的 sysfs link ,第一个参数是在哪个dev下创建,第二个是参数名字,第三个是gpio编号

时间: 2024-10-07 01:10:55

linux 标准 GPIO 操作的相关文章

Linux应用层直接操作GPIO

Linux应用层直接操作GPIO 在一个老手的指导下,应用层可以直接操作GPIO,具体指设置GPIO的输入输出以及输出电平高或者低.这个大大地提高了灵活性,官方的文档有GPIO Sysfs Interface for Userspace,GPIO Sysfs. 这里我记录一下使用过例子: # RK30_PIN0_PD4 # A0-7 -> 0-7 / B0-7 -> 8-15 / C0-7 -> 16-23 / D0-7 -> 24-31 echo 28 > /sys/cla

linux下GPIO的用户层操作(sysfs)

linux的GPIO通过sysfs为用户提供服务,下面是linux kernel里的说明文档,学习一下. GPIO Sysfs Interface for Userspace ================================== Platforms which use the "gpiolib" implementors framework may choose to configure a sysfs user interface to GPIOs. This is

gpio操作(LS1B)

1.一般gpio_request 封装了mem_request(),起保护作用,最后要调用mem_free之类的,主要是告诉内核这个地址被占用了.当其他地方调用同一地址gpio_request就会报告错误,改地址已被申请.在/proc/mem 可以看到有地址占用表描述. 这种用法的保护前提是大家都遵守先申请在访问,有一个地方没有遵守这个规则,这功能就失效了,就好比进程互斥,必须大家在访问临界资源的时候都先获取锁一样,其中一个没有遵守约定,代码报废: 2.__gpio_set_value 和 gp

Linux 标准目录结构

Linux 标准目录结构 初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd samba user1 user2 bin --- 系统启动时需要的执行文件(二进制) sbin --- 可执行程序的目录,但大多存放涉及系统管理的命令.只有root权限才能执行 proc --- 虚拟,存在linux内核镜像:保存所有内核

linux标准io的copy

---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) { printf("use:mycp file1 file2\n"); return -1; } FILE *src=fopen(argv[1],"r");//打开源文件 if(src==NULL) { printf("no file!\n");

Linux C语言操作MySQL

原文:Linux C语言操作MySQL 1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写,并使用了多种编译器进行测试,保证源码的可移植性. (2) 支持多线程,利用CPU资源,支持多用户. (3) 可以处理拥有上千万条记录的大型数据库. (4)既可以作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为 一个库而嵌入到其他软件中去. 2. MySQL数据库的安装 安装MySQL数

linux 标准i2c接口(一)

一:I2C设备操作方式: 1.  应用程序操作法:i2c的设备的驱动可以直接利用linux内核提供的i2c-dev.c文件提供的ioctl函数接口在应用层实现对i2c设备的读写,但是在应用层使用ioctl函数对应用程序员要求较高,需要自行构建msg结构体,必须了解设备的操作流程,时序之类的. 这方式实现需要用用程序员调用 read, write, ioctl, open, close等linux标准文件接口操作/dev/i2c(X)设备文件.   2. 驱动程序操作法:i2c设备的驱动也可以通过

【转】Linux 标准目录结构

初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd samba user1 user2 bin --- 系统启动时需要的执行文件(二进制) sbin --- 可执行程序的目录,但大多存放涉及系统管理的命令.只有root权限才能执行 proc --- 虚拟,存在linux内核镜像:保存所有内核参数以及系统配置信息 1

Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数

文章转载:http://blog.snsgou.com/post-793.html 1.查看物理CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l1 2.查看逻辑CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "processor"|wc -l4 3.查看CPU是几核(即,核心数) [[em