gpio子系统API详解

网友投稿 285 2024-01-25

gpio 子系统 APIgpio 子系统中操作一个 GPIO 需要如下几步:复制1、of_find_compatible_node 2、of_get_named_gpio 3、gpio_request 4、控制gpio(gpio_direction_input、gpio_direction_output……) 5、gpio_free

1)of_find_compatible_node 函数在设备树中根据 device_type 和 compatible 这两个属性查找指定的节点,此处是为了获取在设备树中设置的 GPIO 的节点句柄如果其他地方有获得句柄,那么可以直接使用这个句柄。

2) of_get_named_gpio ,获取所设置的 gpio number3) gpio_request ,请求这个 gpio 如果其他地方请求了这个 gpio,还没有释放,那么我们会请求不到4)请求到这个 gpio 以后,我们就可以对它进行操作,比如获取到它的值,设置它的值。

5)使用完以后,释放这个 gpio。原理图:

博主手里有一个 正点原子 imx6ull 开发板,查原理图,发现蜂鸣器直连的 GPIO 是 GPIO5_1我把此 IO 口拉低,蜂鸣器就会响在设备树中增加如下代码(imx6ull-alientek-emmc.dts)。

复制test:test { compatible = "Jason_hello"; hello = ; }; 设置 GPIO 为 GPIO5_1,高电平有效,但实际上第三个

参数我没有使用gpio.c复制#include#include#include#include

#include#includestaticint __init mypinctrl_init(void){ int gpionum =

0; int ret = 0; structdevice_node *node =NULL; node = of_find_compatible_node(NULL,NULL,"Jason_hello"

); if(!node){ printk("get node errorn"); return ret; } gpionum = of_get_named_gpio(node,"hello"

,0); if(gpionum < 0){ printk("get gpionum errorn"); return ret; } ret = gpio_request(gpionum,

"hello"); if(ret){ printk("gpio_request errorn"); return ret; } printk("gpio(%d) value = %dn"

,gpionum,ret); ret = gpio_get_value(gpionum); printk("gpio(%d) value = %dn",gpionum,ret);

gpio_direction_output(gpionum,0); // 设置 gpio 输出低电平 ret = gpio_get_value(gpionum); printk("gpio(%d) value = %dn"

,gpionum,ret); return0; } staticvoid __exit mypinctrl_exit(void){ printk("%sn",__func__); } module_init

(mypinctrl_init); module_exit(mypinctrl_exit); MODULE_LICENSE("GPL"); Makefile复制KERNELDIR := /home/book/

linux/tool/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek CURRENT_PATH := $(shell pwd) obj-m := gpio.o

build: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules clean:$(MAKE) -C

$(KERNELDIR) M=$(CURRENT_PATH) clean 在 Linux 内核源码根目录中输入 make dtbs,编译一份设备树,下载进开发板在 kernel/drivers/misc/ 中新建文件夹,命名为 mygpio,里面放置 gpio.c 和 Makefile。

然后输入 make 编译出 gpio.ko然后拷贝进板子,insmod 上去,可以发现蜂鸣器有响

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云 API 对话机器人 CBS 的魅力—要是有 AI,我要做“李白”- 5 分钟开发作诗机器人
下一篇:OpenAI正式推出ChatGPT和Whisper的开发者API
相关文章

 发表评论

暂时没有评论,来抢沙发吧~