Linux设备驱动程序第三版学习(12)- 与硬件通信

继续往下学习第九章的内容。从这一章开始才接触到了一些实际的硬件设备,硬件是我的强项啊,呵呵。加油!

 

一、I/O端口和I/O内存

   在学习这部分之前,需要先明确一个概念:side effect。明确这个概念有助于理解内存操作和IO寄存器操作的不同。LDD3中将这个词翻译成了“边际效应”,对此我持保留意见,至少我当时学习的时候就被这个词搞得一头雾水(我本身是搞硬件的,自认为对寄存器还是很了解的,这里完全被这个词搞晕,我勒个去以为是什么高级的东东)。LDD2中将此翻译成“副作用”,这至少比“边际效应”更容易理解一些,但是“副作用”本身多指一件事物不好的方面的影响,不太符合国人的习惯。所以这里我想把它叫做“侧面影响”或者“连带效应”(一家之言,也未必准确),相对于对寄存器值本身的变化的“正面影响”或“表面效应”。 这里我姑且叫他“连带效应”吧。不同于普通内存没有连带效应,对寄存器的操作所产生的连带效应可能是多方面的。一个例子是:对于S3C2440的时钟控制寄存器CLKCON的操作,不仅仅是变化了寄存器本身的值(表面效应),更重要的是每一位都控制了相应外设的时钟使能(连带效应)。另外一个例子:同样对于S3C2440,CLKSLOW寄存器中MPLL_OFF位置1(表面效应)可以Turn off PLL(连带效应),但同时必须要SLOW_BIT位置1才可以实现(表面效应),此时对SLOW_BIT位的操作限制了对MPLL_OFF位操作的结果(连带效应)。这是在同一寄存器不同位的情况,同样的,在不同寄存器之间也会有这样的影响,对一个寄存器的操作能否去的预期的效果取决于另一个寄存器的状态。可以看出,连带效应才是我们进行寄存器操作的目的。这样我们就容易理解为什么对寄存器的操作顺序如此重要。

   编译器工作时往往会对程序进行优化,这种优化可能会改变内存或者寄存器的访问顺序,如果发生这样的情况,IO操作就会出现问题。所以Linux提供了4个宏来确保操作的执行顺序。我们可以在需要严格执行顺序的地方插入这些宏。具体如下:

关于这些宏的具体应用参考本博客转载的一篇文章“内核同步机制-优化屏障和内存屏障”。

 

二、使用I/O端口

   驱动程序中使用一些函数来进行I/O端口的分配和操作。具体如下(linux 2.6.32):

   分配相关的函数:

 

下面详细看一下__request_region的实现,定义在kernel/resource.c中。

 

 

 下面看一下__release_region的实现:

 

   操作I/O端口的函数:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux设备驱动程序第三版》是一本经典的技术书籍,由Jonathan Corbet、Alessandro Rubini和Greg Kroah-Hartman合著。这本书深入讲解了Linux内核中设备驱动开发的方方面面,旨在帮助开发人员理解和掌握Linux设备驱动编程的技术细节和实践技巧。 作者们首先介绍了Linux设备驱动的基本概念和原理,并详细讲解了设备驱动模型、字符设备驱动、块设备驱动以及网络设备驱动等不同类型的驱动编写方法。书中详细讨论了设备文件操作、设备注册、设备通信、中断处理、设备初始化和驱动调试等关键问题。通过大量的示例代码和实战案例,帮助读者深入理解和应用所学知识。 宋宝华,作为知名的电子工程师和计算机科学家,对Linux设备驱动开发领域做出了重要贡献。他在多个Linux设备驱动项目中担任核心开发人员和架构师角色,专注于Linux内核关键技术的研究和创新。宋宝华著有多本Linux领域的经典著作,并在国内外学术会议和期刊上发表了大量关于Linux设备驱动和嵌入式系统方面的论文。 通过深入研究《Linux设备驱动程序第三版》这本书,读者可以收获丰富的Linux设备驱动开发知识,并能够借鉴宋宝华等杰出专家的经验和智慧。这本书对于那些希望深入了解Linux内核设备驱动工作原理和方法的开发人员来说,无疑是一本不可多得的参考书籍。无论是初学者还是有一定经验的开发者,都能从这本书中获得实用而宝贵的知识,提升自己在Linux设备驱动开发领域的技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值