在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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。