当前位置:  技术问答>linux和unix

关于linux块设备驱动程序的两个问题

    来源: 互联网  发布时间:2017-02-15

    本文导语:  我们都知道,写linux块设备驱动的本质大部分都是对寄存器读写(这是我假设,有待确认) 我想问的是: 1. 我们如何知道这些寄存器的地址的?是谁告诉的。 2. 应用程序如何对这个块设备进行读写,是通过ioctl还是...

我们都知道,写linux块设备驱动的本质大部分都是对寄存器读写(这是我假设,有待确认)
我想问的是:
1. 我们如何知道这些寄存器的地址的?是谁告诉的。
2. 应用程序如何对这个块设备进行读写,是通过ioctl还是其他方法?
谢谢。/

|
1、别的问题不论 单说对存储设备的读写操作寄存器 要注意这个问题本身是有问题的。大多数情况下不可能直接读写具体的存储设备的“寄存器”。

目前常见的存储设备,ide硬盘 sata硬盘 u盘  sd卡 cf卡 norfalsh nandflash
都有各自的规范和标准,如何操作这些存储设备或者发送专用的存储操作命令,lz可以找到对应的规范手册慢慢研读
注意,这些标准和规范仅限于存储设备和存储设备的硬件控制器之间

存储设备的硬件控制器离具体的存储设备还隔了一层。即使是驱动程序,也无法直接操作具体的存储设备,例如你可以给通过ide控制器的寄存器给硬盘发ide命令,但不能直接操作硬盘。可以通过usb主控器给u盘发scsi命令,但不能直接操作u盘。只能读写硬件控制器的寄存器

这些硬件控制器的制造商会提供datasheet,描述这个总线控制器的寄存器每一位的意义。但一般不会告诉你如何访问这些寄存器。

如何访问具体的存储设备的硬件控制器的寄存器,就看这个存储设备的主控器的上一级(向cpu方向)直接物理连接是什么总线
例如ide控制器 sata控制器 usb控制器,在x86上往往是挂在南北桥扩出来的pci总线上,此时需要lz按照pci设备驱动的惯例,读取pci配置空间,pci_iomap,然后就能操作这些寄存器了
但是在嵌入式cpu如arm powerpc上,ide控制器 sata控制器 usb控制器 falsh控制器,大多直接接在soc的前端总线上,此时这些控制器的地址都是soc能直接寻址的,你能在soc的datasheet上直接找到这些存储控制器的物理地址,ioremap之后就能读写


再啰嗦一句,上面这一段就引出一个容易被忽视但很重要的问题----就是物理总线的主控制器端和这条物理总线的设备端,各自都有驱动程序。pci有pci主控器驱动和pci设备驱动 usb也一样 i2c也一样
一般总线控制器的驱动是这个控制器芯片的厂商提供,甚至都加入了主线内核,一般就容易被忽视。
总线控制器的驱动提供这条总线上的探测、读写、映射、dma等操作的封装接口。至于总线那头具体的设备,例如不同厂商的硬盘和u盘,这些设备的驱动属于设备端驱动。设备端驱动要调用总线控制器驱动提供的接口才能操作设备。

对于存储设备,有一个好玩的现象,就是设备端驱动几乎一样,但是控制器的驱动却多种多样。
norfalsh nandflash ,它们的设备驱动几乎是通用的,而具体的flash控制器的驱动各不相同的。
硬盘 u盘的驱动大多是一样,usb总线控制器的驱动各不相同。


喝咖啡了太兴奋 写了一堆 

|
1. 我们如何知道这些寄存器的地址的?是谁告诉的。

    写逻机程序时,寄存器的地址来源于CPU数据手册。在LINUX下,一般的CPU的厂商都写好有相应的头文件,自己查一下,直接调用即可。

2. 应用程序如何对这个块设备进行读写,是通过ioctl还是其他方法?

     对字符车陂或者是块设备进行读写,最好都是按照LINUX或原厂商的驱动程序架构来写。ioctl是重点内容。一般的至少包含下述几个模块:
 file_operations,open,init,ioctl,exit,
 module_init,module_exit,MODULE_LICENSE

|

学习了

    
 
 

您可能感兴趣的文章:

  • linux初学者一简单问题!在线送分!linux设备驱动程序一书的第一个程序.
  • Linux的设备驱动程序,用LINUX下的什么开发工具呢?`
  • 关于Linux 2.6平台下,自定义的USB HID设备是系统提供驱动程序还是需要自己完成驱动程序?
  • 各位大虾,帮小弟一下,刚学linux,怎么在linux下安装硬件的驱动程序
  • Linux下有哪些可视化软件开发Linux下的应用软件和驱动程序
  • 谁有LINUX设备驱动程序第三版的程序代码,发我一份,非常的感谢!
  • 笔记本里的主板、显卡、鼠标、显示器,没有for Linux的驱动程序,能否安装Linux?
  • 请问哪里有Ymh724的驱动程序for Linux,我的Linux是BluePoint2.0
  • 烦恼:看不懂“Linux设备驱动程序(第二版)”!
  • linux驱动程序是怎样通过内核和应用程序通信,还有是怎样和硬件通信,跪求求解,谢谢高手留言。
  • 在哪里可以下载OREILLY的linux设备驱动程序一书的程序源代码?在线送分!
  • Linux的驱动程序构架怎么看不懂?请进来指点
  • 请问,我要装LINUX,但我没有在LINUX下所有机器的驱动程序怎么办?全都是WIN9X和WIN2000的.
  • 请教关于linux开发驱动程序的方向
  • 在Linux下作设备驱动程序应如何入手
  • linux和windows的驱动程序是一样的吗??
  • Linux下的NTFS驱动程序 NTFS-3G
  • linux设备驱动程序看完后,该看什么?
  • 机器上直接装 linux 驱动程序哪里可以找到
  • 有好多关于《linux设备驱动程序第三版》的问题,哪里问合适呢?
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • 我机器上安装了linux和win2000两个系统,请问如何在两个系统之间切换。
  • linux字符模式下怎样可以运行两个任务(开两个终端)
  • 谁有linux?帮我用在linux运行两个文件好吗?
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux里面有 klogd与syslogd两个命令吗
  • 怎样让linux8.0认两个cpu
  • 分别有两个linux系统的两个硬盘接在一台机器上,由其中一个硬盘启动,有问题,大家来看看
  • 下面两个linux有什么区别?
  • 如何让vm下的两个linux实现网络连接(主机不联网)
  • linux7可以设置两个网关吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • Linux环境下,“PC机的驱动”与“嵌入式驱动”有什么区别?
  • linux驱动 单片机驱动
  • linux:怎么在驱动中调用IIC驱动?
  • linux下一个驱动怎么调用另一个驱动
  • redhat linux 9 与WNI xp共存一硬盘,显卡为 ATI RADEON 9600 可linux给出的驱动却是Vesa 的,我从驱动列表里选择了ATI RADEON 9600可是
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • Linux 9.0+865G,只能上到640×480,Intel官方站点的最新驱动安装失败,那位有驱动?
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • Linux源代码中ata驱动为什么要调用pci驱动的代码
  • 请教有关linux驱动开发,按关机键关机时,驱动应作哪些结束工作?
  • 小弟之前学过wince驱动,想入们linux驱动
  • 请问, linux 驱动中, IO 口变化了,驱动如何通知应用程序?
  • 官方都只发布Windows驱动,无原理图,如何自已为它写Linux驱动?提供点手段思路
  • 关于LINUX下1024*768显示问题,是不是因为没有驱动显卡才不能设置,如果是的话应该怎么驱动
  • linux的驱动 和 android的驱动 有区别吗?
  • 我的笔机本装的是redhat7.2,从网上下了个显卡驱动(xxx.o的文件),请问怎样安装这个驱动?(我以拷到linux盘下)?
  • linux 2.6.15 中被编译为模块的驱动test.ko,应该放在什么路径下才能使得在需要该驱动时,由内核自动加载?谢谢
  • 请问做好的驱动,发布给用户的时候,用户必须要在各自的Linux中重新编译驱动源码才能使用吗?
  • 各位设备驱动开发的朋友,请问,linux设备驱动开发和网络编程开发哪一样工资比较高呀?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • secureCRT下Linux终端汉字乱码解决方法
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • 各位大虾,帮小弟一下,刚学linux,怎么在linux下安装硬件的驱动程序 iis7站长之家
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3