linux – 为什么在raspberry pi驱动程序中有`gpio_request`而不是`request_region`?

linux – 为什么在raspberry pi驱动程序中有`gpio_request`而不是`request_region`?,第1张

概述在LDD3一书中,如果一个驱动程序想要控制CPU的引脚,它应该调用request_region()函数来声明端口的使用. 但是,当我想在我的Raspberry Pi上实现一个简单的驱动程序模块时,我在this example中发现端口请求是由gpio_request()函数实现的. 为什么以及何时需要使用gpio_request()而不是request_region()?而且,这两个功能的不同之处 在LDD3一书中,如果一个驱动程序想要控制cpu的引脚,它应该调用request_region()函数来声明端口的使用.

但是,当我想在我的RaspBerry Pi上实现一个简单的驱动程序模块时,我在this example中发现端口请求是由gpio_request()函数实现的.

为什么以及何时需要使用gpio_request()而不是request_region()?而且,这两个功能的不同之处是什么.

顺便说一下:我逐页搜索了LDD3,但我找不到关于GPIO的任何线索……为什么没有任何介绍GPIO?是因为2.6内核版本?

解决方法

In the book LDD3,if one driver want to control the pins of cpu,it should call request_region() function to declare the usage of the ports.

首先,“端口”一词含糊不清,需要背景.端口可以​​指物理连接器(例如USB端口)或逻辑连接(例如TCP端口).

您对request_region()的理解存在缺陷.该例程用于管理I / O地址空间.您的问题标记为raspBerry-p1,它使用ARM处理器并且没有可管理的I / O地址空间. ARM处理器使用内存映射设备寄存器.您可以在设备驱动程序中使用request_mem_region()来获取该外设寄存器块的存储器地址.

每个GPIO由一个或多个控制寄存器中的位位置控制.这些寄存器将由整个GPIO子系统处理. (还有一个用于多路复用引脚的低层(更靠近HW)引脚控制驱动器,即可以分配给外围设备或用作GPIO的引脚.)

GPIO(或引脚控制)子系统的驱动程序应对SoC的GPIO控制寄存器的存储器地址执行request_mem_region(). gpio_request()将管理从属于寄存器管理的单个引脚.

请注意,request_mem_region()和gpio_request()的使用在设备驱动程序中不是互斥的.例如,USB控制器的驱动程序将request_mem_region()其控制寄存器的存储器地址.对于控制USB连接器电源的引脚,可能还需要gpio_request()(假设控制器外部的逻辑是如何控制电源的).

why there is no any introductions to GPIO? Is it because of the 2.6 kernel version?

在linux中使用GPIO的约定出现在2007年的documentation / gpio.h中,版本为2.6.22.通用(即标准化而非平台特定)GPIO支持几年后出现在linux内核中,版本为2.6.3x(?).在此之前(甚至之后),每个平台(例如SoC制造商)都有自己的一套用于访问(并可能管理)GPIO的例程.

LDD3声称是2.6.10内核的最新版本.该书也可能是以x86为中心的(因为linux有x86起源),而x86处理器通常没有GPIO.

总结

以上是内存溢出为你收集整理的linux – 为什么在raspberry pi驱动程序中有`gpio_request`而不是`request_region`?全部内容,希望文章能够帮你解决linux – 为什么在raspberry pi驱动程序中有`gpio_request`而不是`request_region`?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1049848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存