首页 理论教育深入了解Linux内核GPIO管理框架

深入了解Linux内核GPIO管理框架

【摘要】:2GPIO内部管理框架GPIO框架的重要数据结构就是gpio_chip,详细内容如下:系统中可以有多个gpio_chip,而每个gpio_chip管理一组GPIO,其中base表示相应的gpio_chip管理的系统中的起始GPIO号,一共管理ngpio个GPIO。内核将所有的GPIO组成数组,每个GPIO用gpio_desc进行描述,具体的结构如下:其中的chip表示该GPIO由哪个gpio_chip进行管理。其中,flags表示该GPIO是否被请求、输入输出状态等与GPIO功能相关的状态及属性。从整体上来说GPIO框架还是简单直接的。

关于GPIO管理,Linux内核提供了GPIO lib来实现具体的GPIO服务,提供了统一的接口供其他模块使用,基本的框架如图4-49所示。

978-7-111-49426-3-Chapter04-274.jpg

图4-49 Linux内核GPIO框架

从图4-49可见,各种设备模块都可以访问使用GPIO,相应的需要通过GPIO lib和Linux内核中断处理子系统进行操作。而真正的GPIO芯片的实现是通过GPIO chip提供的接口来实现的。

1ᤫ外部使用GPIO的操作接口

GPIO lib提供的功能接口如下:

978-7-111-49426-3-Chapter04-275.jpg

978-7-111-49426-3-Chapter04-276.jpg

这些接口的名字都很好理解,相应的都会调用GPIO chip的接口函数。

2ᤫGPIO内部管理框架

GPIO框架的重要数据结构就是gpio_chip,详细内容如下:

978-7-111-49426-3-Chapter04-277.jpg

978-7-111-49426-3-Chapter04-278.jpg

系统中可以有多个gpio_chip,而每个gpio_chip管理一组GPIO,其中base表示相应的gpio_chip管理的系统中的起始GPIO号,一共管理ngpio个GPIO。(www.chuimin.cn)

内核将所有的GPIO组成数组,每个GPIO用gpio_desc进行描述,具体的结构如下:

978-7-111-49426-3-Chapter04-279.jpg

其中的chip表示该GPIO由哪个gpio_chip进行管理。其中,flags表示该GPIO是否被请求、输入输出状态等与GPIO功能相关的状态及属性。

GPIO框架中还需要对gpio_chip进行管理,主要是将实际的物理GPIO的管理实体gpio_chip和逻辑层的gpio_desc进行绑定,相应绑定的GPIO号是在gpio_chip的base至base+ng-pio之间。对之前gpio_request申请的,只有在绑定gpio_chip之后才能申请成功,继而对GPIO进行正确的操作。

具体的gpio_chip管理接口如下:

978-7-111-49426-3-Chapter04-280.jpg

3ᤫGPIO的sysfs接口

针对应用程序对GPIO操作的需求,GPIO库将GPIO开放到sysfs文件系统中,这样可以在用户层对GPIO进行相应的操作。在用户层进行操作的好处是,可以直接进行开发而不是通过驱动程序进行,另外从软件版权考虑可以将不同的版权更好的隔离避免彼此的污染。相应的接口如下:

978-7-111-49426-3-Chapter04-281.jpg

开放到sysfs的GPIO有如下的操作接口:

978-7-111-49426-3-Chapter04-282.jpg

以上是GPIO框架抽象层的实现,体系结构具体的实现主要就是实现并注册结构体gpio_chip及相关的操作。从整体上来说GPIO框架还是简单直接的。