Linux   发布时间:2022-05-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 为什么在raspberry pi驱动程序中有`gpio_request`而不是`request_region`?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在LDD3一书中,如果一个驱动程序想要控制cpu的引脚,它应该调用request_region()函数来声明端口的使用.

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

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

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

最佳答案

首先,“端口”一词含糊不清,需要背景.端口可以​​指物理连接器(例如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()(假设控制器外部的逻辑是如何控制电源的).

在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`?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: