您的位置 首页 解答

玩转Linux设备驱动你需求弄懂这些问题

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持3

  Linux是一套免费运用和自在传达的类Unix操作体系,是一个依据POSIX和UNIX的多用户、多使命、支撑多线程和多CPU的操作体系。它能运转首要的UNIX工具软件、应用程序和网络协议。它支撑32位和64位硬件。Linux承继了Unix以网络为中心的规划思维,是一个功用安稳的多用户网络操作体系。

  想要深化了解linux设备驱动,你有必要清晰以下几个问题:

  • 应用程序、库、内核、驱动程序的联系

  • 设备类型

  • 设备文件、主设备号与从设备号

  • 驱动程序与应用程序的差异

  • 用户态与内核态

  • Linux驱动程序功用

  一、应用程序、库、内核、驱动程序的联系

  1) 应用程序调用一系列函数库,经过对文件的操作完结一系列功用。

  应用程序以文件办法拜访各种硬件设备(Linux特有的笼统办法,把悉数的硬件拜访笼统为对文件的读写、设置)

  函数库:

  部分函数无需内核的支撑,由库函数内部经过代码完结,直接完结功用

  部分函数涉及到硬件操作或内核的支撑,由内核完结对应功用,咱们称其为体系调用

  2) 内核处理体系调用,依据设备文件类型、主设备号、从设备号(后边会解说),调用设备驱动程序。

  3) 设备驱动直接与硬件通讯。

  二、设备类型

  硬件是千变万化的,没有八千也有一万了,就像国际上有三种人:男人、女性、女博士相同,linux做了一个很巨大也很困难的分类:把悉数的硬件设备分为三大类:字符设备、块设备、网络设备。

  1) 字符设备:字符(char)设备是个能够像字节省(相似文件)相同被拜访的设备。

  对字符设备宣布读/写恳求时,实践的硬件I/O操作一般紧接着产生;

  字符设备驱动程序一般至少要完结open、close、read和write体系调用。

  比方咱们常见的lcd、触摸屏、键盘、led、串口等等,就像男人是用来干活的相同,他们一般对应详细的硬件都是进行出具的收集、处理、传输。

  2) 块设备:一个块设备驱动程序首要经过传输固定巨细的数据(一般为512或1k)来拜访设备。

  块设备经过buffer cache(内存缓冲区)拜访,能够随机存取,即:任何块都能够读写,不用考虑它在设备的什么地方。

  块设备能够经过它们的设备特别文件拜访,可是更常见的是经过文件体系进行拜访。

  只要一个块设备能够支撑一个装置的文件体系。

  比方咱们常见的电脑硬盘、SD卡、U盘、光盘等,就像女性相同是用来存储信息的。

  3) 网络接口:任何网络业务都经过一个网络接口构成,即一个能够和其他主机交流数据的设备。

  拜访网络接口的办法仍然是给它们分配一个仅有的名字(比方eth0),但这个名字在文件体系中不存在对应的节点。

  内核和网络设备驱动程序间的通讯,彻底不同于内核和字符以及块驱动程序之间的通讯,内核调用一套和数据包传输相关的函数(socket函数)而不是read、write等。

  比方咱们常见的网卡设备、蓝牙设备,就像女博士相同,数量稀疏但又不可或缺。

  linux中悉数的驱动程序终究都能归到这三种设备中,当然他们之间也没有十分严厉的边界,这些都是程序中对他们的差异罢了,比方一个sd卡,咱们也能够把它封装成字符设备去操作也是没有问题的。就像。。。

  三、设备文件、主设备号、从设备号

  有了设备类型的差异,那么应用程序应该怎样拜访详细的硬件设备呢?

  或许说现已确认他是一个男人了,那么怎样从万千国际中差异他与他的不同呢?

  答案是:名字,在linux驱动中也便是设备文件名。

  那么重名怎样办?

  答案是:身份证号,在linux驱动中也便是设备号(主、从)。

  设备文件:

  在linux体系中有一个约定俗成的说法:“悉数皆文件”,应用程序运用设备文件节点拜访对应设备, Linux下的各种硬件设备以文件的办法存放于/dev目录下,能够运用ls /dev 检查Linux把对硬件的操作悉数笼统成对文件的操作(open,read,write,close,…)

  每个设备文件都有其文件特点(c或许b),运用ls /dev -l 的指令检查, 标明其是字符设备或许块设备,网络设备没有在这个文件夹下,用来明其性别(男人、女性)

  主设备号、从设备号

  在设备管理中,除了设备类型外,内核还需要一对被称为主从设备号的参数,才干仅有标识一个设备,相似人的身份证号

  主设备号:

  用于标识驱动程序,相同的主设备号运用相同的驱动程序,例如:S3C2440 有串口、LCD、触摸屏三种设备,他们的主设备号各不相同;

  从设备号:

  用于标识同一驱动程序的不同硬件

  例:PC的IDE设备,主设备号用于标识该硬盘,从设备号用于标识每个分区,2440有三个串口,每个串口的主设备号相同,从设备号用于差异详细归于那一个串口。

  四、驱动程序与应用程序的差异

  应用程序以main开端

  驱动程序没有main,它以一个模块初始化函数作为进口

  应用程序自始至终履行一个使命

  驱动程序完结初始化之后不再运转,等候体系调用

  应用程序能够运用glibc等规范C函数库

  驱动程序不能运用规范C库

  五、用户态与内核态的差异

  驱动程序是内核的一部分,作业在内核态

  应用程序作业在用户态

  数据空间拜拜访题

  无法经过指针直接将二者的数据地址进行传递

  体系供给一系列函数协助完结数据空间转化

  get_user

  put_user

  copy_from_user

  copy_to_user

  六、Linux驱动程序功用

  对设备初始化和开释资源

  把数据从内核传送到硬件和从硬件读取数据

  读取应用程序传送给设备文件的数据和回送应用程序恳求的数据

  检测和处理设备呈现的过错(底层协议)

  用于差异详细设备的实例

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/203248.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部