The Road to Linux Kernel - GPIO Subsystem - Legacy GPIO Interfaces(1)

本文探讨了在Linux驱动开发中,特别是GPIO模块的初始化过程。通过对比传统复杂的手动初始化方法,如使用gpio-legacy.c接口,文章深入介绍了如何利用设备树进行配置,并提出了一种简化初始化流程的方法。此外,还提供了内核在线文档和相关源码的参考,以便读者进一步了解GPIO接口的具体使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPIO使用初探

刚接触linux驱动中gpio方面的时候,常用的是gpio-legacy.c里面的接口,初始化gpio就像下面这样, 然后就可以调用get/set gpio的接口了。
这时候就发现,初始化一个gpio,居然这么麻烦,要是通过dts进行配置,更麻烦了,就像下面这样。
而如果要同时通过设备树读取,初始化几个gpio,更麻烦,首先调用of_property_read_u32_array,然后对读取的值进行判断,再调用下面这些接口,或者调用gpio_request_array,一个初始化gpio的操作,需要几十行代码。有没有更简单的方法呢?

if (of_property_read_u32(np, propname, &gpio)) {

return;
}
if (!gpio_is_valid(gpio)) {

return;
}
if (gpio_request(gpio, label)) {

return;
}
if ( gpio_direction_input(gpio) {

gpio_free(gpio);
return;
}
irq = gpio_to_irq(gpio)
if (irq < 0) {

return;
}
if (request_threaded_irq(irq, handler, thread_fn, irqflags, devname, dev_id)) {

return;
}

关于上面这些接口的使用方法,可以参考kernel在线文档, 或者kernel代码目录下的Documentation/driver-api/gpio/legacy.rst,更详细的信息,可以查看drivers/gpio/gpiolib-legacy.c的源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值