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

设备驱动,到底驱动了哪个硬件设备?

    来源: 互联网  发布时间:2016-08-11

    本文导语:  做了一个简单的linux驱动程序 demo, 在/dev下用mknod命令声明了设备节点:mknod c 254 0 /dev/demo 主次设备号分别是254 和0 。主设备号是人为定义的,因为查看了一下/drivers/proc下 没有用到254的 ,编写了驱动程序 并在其中regi...

做了一个简单的linux驱动程序 demo, 在/dev下用mknod命令声明了设备节点:mknod c 254 0 /dev/demo 主次设备号分别是254 和0 。主设备号是人为定义的,因为查看了一下/drivers/proc下 没有用到254的 ,编写了驱动程序 并在其中register_chrdev()中将主次设备号 和file_operations 都关联进去了,写了一个应用程序,open了/dev/demo ,write了几个数据,使用这个驱动程序,完成了对这几个数据的一些变换(如 倒序排列),并又 read回来,屏幕上现实出来了。
问题是,在我创建设备节点的时候 我到底 用的是的 哪个真实的物理设备呢? 我只是随机找到了一个没有用到的主设备号 并将它和 设备文件节点关联起来了 那设备文件节点 又该怎么和 真实的物理 设备关联呢? 也就是  这个 主次设备号 254 0 到底指的是哪个物理设备呢? 请高手指点迷津~ 谢谢

|
驱动哪个设备取决于你的驱动程序内部,跟主设备号没有直接关系。主设备号注册的作用是告诉内核当用户级程序访问这个节点时,用你的驱动而不是别的驱动与设备打交道。

从楼主的描述来看,你的驱动程序没有与真实的硬件打交道。所以不能驱动任何设备,只是一个虚拟设备而已。也可以说是用户级程序“被骗了”。

这种驱动程序是有意义的。比如虚拟网卡、虚拟磁盘之类的。

|
跟硬件打交道,其实是在和寄存器打交道。
说白了,写驱动就是设置一堆寄存器。

设备节点可以被看作是kernel space和user space的一个接口。
在Linux中所有的设备都是一个文件,这样简化了用户空间的编程。

像字符设备,可以有类似文件的open/close/read/write,还有ioctl。
但是底层到底干了什么,就要看你在file_operations里的接口是如何
实现的。换句话说,你可以在驱动里不对任何硬件操作。但这不不影响
驱动的工作机制。事实上,如何你看LDD这本书就会发现,很多例子
都是实现工作的原理,并不是与硬件真的打交道的。

|
问题是,在我创建设备节点的时候 我到底 用的是的 哪个真实的物理设备呢?
答:一般字符设备和块设备的驱动程序会注册设备文件到/dev/目录下,但是一些虚拟设备和网卡驱动程序并不需要注册设备文件。所以,编写设备驱动程序,需要查说硬件的data sheet,data sheet描述了硬件细节,像寄存器的地址,作用,是否可读写,中断号等。参考:LDD书。

我只是随机找到了一个没有用到的主设备号 并将它和 设备文件节点关联起来了 那设备文件节点 又该怎么和 真实的物理 设备关联呢? 也就是 这个主次设备号 254 0 到底指的是哪个物理设备呢? 
答:参考:http://blog.csdn.net/unbutun/archive/2009/01/08/3732343.aspx,和内核源码。当应用程序用fopen()等标准API去访问时,内核会做处理好一切。当然我们访问网卡,应用程序是创建socket,而不用fopen()API。

|
在我创建设备节点的时候 我到底 用的是的 哪个真实的物理设备呢?
 我只是随机找到了一个没有用到的主设备号 并将它和 设备文件节点关联起来了 那设备文件节点 又该怎么和 真实的物理 设备关联呢? 也就是 这个 主次设备号 254 0 到底指的是哪个物理设备呢?

你随机找到了一个没有用到的主设备号?? 你找个其他的号试试。
主设备号代表的是驱动
次设备号则标识了驱动下特定的设备
你在编写驱动的时候register_chrdev()中将主次设备号 和file_operations 都关联进去
这里是重点,也就是说你的主次设备号要与register_chrdev()时的对应,否则是不行的

    
 
 

您可能感兴趣的文章:

  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • 字符设备驱动,混杂设备驱动,总线、设备、驱动模型、平台驱动
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • -------------- 请问大家,做好一个PCI设备驱动了,如何做个应用程序来使用这个驱动呢??
  • 有谁能告诉我USB设备驱动和USB gadget驱动究竟有什么不同么?
  • 各位设备驱动开发的朋友,请问,linux设备驱动开发和网络编程开发哪一样工资比较高呀?
  • 想试着编写简单驱动玩,但是手头上没有什么好驱动的设备,大家支招
  • 关于Linux 2.6平台下,自定义的USB HID设备是系统提供驱动程序还是需要自己完成驱动程序?
  • 请教用户空间编写设备驱动
  • 关于platform平台设备驱动操作的问题
  • 字符型设备驱动生成的块设备
  • linux USB从口设备驱动问题
  • 内核模块和设备驱动的区别?
  • 请教Linux设备驱动的具体应用(基于PC)
  • linux上的USB从设备驱动!
  • 怎么向arm开发板上移植linux设备驱动上的helloworld驱动模块
  • 请教!linux设备驱动
  • linux设备驱动开发
  • 设备驱动的Hello.ko 的驱动加载问题
  • Linux设备驱动程序开发
  • 跪求linux下usb音视频设备驱动
  • 关于设备操作的一点迷惑:计算机如何知道驱动程序要操作的设备正好是指定的设备?
  • Linux下写了一个字符设备驱动,找不到设备文件在哪个目录
  • linux 启动的时候 可以检查出很多设备 并给设备配以驱动程序
  • tty设备驱动问题--为什么设备会把接收到的数据又发送出去?详细见内
  • linux设备驱动程序 usb-skeleton这个程序,能不能用具体的usb设备测试它的读写功能啊??
  • 关于:设备驱动的提问
  • 关于字符设备驱动读写的问题,求助
  • 字符设备驱动简单问题
  • Linux字符设备驱动疑难问题--printf打印信息发到字符设备write函数中
  • 关于字符设备驱动的一点疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在LINUX下编网络设备驱动到底用什么工具比较好?
  • 字符设备驱动程序编写中,被读写的数据到底应该定义在什么地方?
  • 怎么向arm开发板上移植linux设备驱动上的helloworld驱动模块 iis7站长之家
  • 怎么学习Linux 设备驱动程序开发?
  • 关于linux设备驱动的第一个例子
  • linux块设备驱动开发的问题
  • 【求教】《精通linux设备驱动开发》这本书怎么样?
  • linux设备驱动执行完__init之后就执行__devinit吗
  • 求<Linux设备驱动>(第二版)的电子书
  • 请高人推荐几本关于linux设备驱动的好书。。
  • 在OpenSolaris下写设备驱动
  • 哪有《Linux设备驱动开发技术及应用》PDF下载啊
  • 自己对linux设备驱动开发的迷惑
  • Virtual: 我上哪去找Linux下设备驱动的开发资料?(100分,给分时再换论坛)
  • linux 下简单的字符设备驱动
  • Solaris下手动加载网卡设备驱动
  • Linux设备驱动开发专业论坛--www.linuxdriver.cn开通散分(100)
  • 内核自动匹配设备驱动的过程或者方式
  • 求《LINUX设备驱动开发详解》电子版
  • 请教:Solaris10下如何让字符设备驱动在开机自动启动呢?在线等...
  • linux简单字符设备驱动的一点疑问,麻烦前辈进来指点一二!
  • 设备驱动


  • 站内导航:


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

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

    浙ICP备11055608号-3