linux下写驱动控制gpio时,两种方法的区别?

时间:2021-05-14 22:13:20
linux下写驱动控制gpio时,见过两种方法:

1. 用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio

2. 用gpio_request 和 gpio_set_value函数来控制gpio引脚

请问:这两种方法有什么区别,分别适用什么场合?

6 个解决方案

#1


1 第一种方式需要知道IO的寄存器地址。把物理地址转换成虚拟地址后,直接对地址操作。 一般在批量GPIO寄存器操作时使用顺。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,

个人理解。

#2


都行,推荐使用后者,后者进行了封装,确保你每次只对一个gpio操作,而不会影响到别的gpio

#3


前者是比较底层的控制,在进行读写操作时,需要注意相应的bit位,而后者是封装好的接口,只需要将控制的GPIO ID传入即可。

#4


看你的目的,一般用后一种比较好。 前者过于底层。

#5


uboot里面操作gpio类似前者,内核里面多用后者。前者需要对照芯片参数对应各个位来进行操作。后者更简单

#6


建议尽可能用后者,这是linux推荐。

#1


1 第一种方式需要知道IO的寄存器地址。把物理地址转换成虚拟地址后,直接对地址操作。 一般在批量GPIO寄存器操作时使用顺。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,

个人理解。

#2


都行,推荐使用后者,后者进行了封装,确保你每次只对一个gpio操作,而不会影响到别的gpio

#3


前者是比较底层的控制,在进行读写操作时,需要注意相应的bit位,而后者是封装好的接口,只需要将控制的GPIO ID传入即可。

#4


看你的目的,一般用后一种比较好。 前者过于底层。

#5


uboot里面操作gpio类似前者,内核里面多用后者。前者需要对照芯片参数对应各个位来进行操作。后者更简单

#6


建议尽可能用后者,这是linux推荐。