加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2020-12-31 06:32:08 所属栏目:Linux 来源:网络整理
导读:在LDD3一书中,如果一个驱动程序想要控制CPU的引脚,它应该调用request_region()函数来声明端口的使用. 但是,当我想在我的Raspberry Pi上实现一个简单的驱动程序模块时,我在this example中发现端口请求是由gpio_request()函数实现的. 为什么以及何时需要使用gp

在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.

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读