论文研究-Linux下的PCIE设备驱动设计与实现 .pdf

所需积分/C币:18 2019-08-17 522KB .pdf
评分

Linux下的PCIE设备驱动设计与实现,王学东,崔琪楣,以高效性和灵活性而著称的linux开源操作系统正在获得更多人的青睐,它对外设类型的广泛支持使得其驱动程序的开发成为了一个热点讨�
国武技论文在线 Struct ceva Struct kobject kobi;/*内嵌的 kobject对象*/ Struct mcdule* owner;/*所届模决*/ SLrucl Hile oper aliurIs"ups;/文件操作结构体/ Struct ist head list Dey t dev;/设备号*/ Unsigned int count;+ 图 结构体的定义 结构体中包含了个重要的成员文件数据结构 该结构体定义了字 符设备驱动提供给虚拟文件系统的接口,其中的每个字段都必须指向驱动程序中实现的特定 操作。通过这些接口,上层的应用程序可以像操作文件一样操作外设。 数据 结构简化定义如下, Struct file operations Struct module* owner;/*拥有该缙构的模块指针* Ssize t (read)(struct file char user*, size t, loff t");+ /从设备中同步读取数据* Ssize t( write)(struct file const char user size_t, loff_t*)+ 向设备屮发送数据 Loft t(, Iseek) struct file*loft;int);/*修改文件当前的读写位置* Int open)struct inode, struct file;+ Int(*release)(struct Inode", struc. fille): I 结构体定义 字符设备驱动的另一个重要的结构体是 结构体,结构与用户空间的 没有任何关联,它是一个内核结构,不出现在用户程序中。结构代表一个打开的文件, 它由内核使用数时创建的,并传递给操作这个文件的函数,直到文件关闭 数 据结构定义如下, Struct fil Mode tf mode;/*文件模式*/ Lcff tf_pos;/*文件当前卖与位置*/ Unsigned int t flags;/*文仁标识* truct file_ operations*f_op;/*与文件相关的操作*/ void* private data;/*指向已分配效据的指针*/ Struct dentry* f_entry;/文件对应的目录项结构* 图 结构体定义 国武技论文在线 设备驱动的注册与注销 任何一个设备要被识别,首先要分给它设备号。设备号的分配有两种方法:静态分配和 动态分配。静态分配使用 中的函数 ,使用这个函数提前必 须明确知道所需要的设备号,如果要注册的设各号已经被占用,该函数将返冋失败。如果并 不熟知系统到底已经占用那些设备号,那么使用这个函数将公显得麻烦。动态分配设备号的 方法可以避免这个麻烦,内核使用 函数动态为设备分配一个合法的设 备号。无论是静态分配还是动态分配,设备号的注销都将使用 在获得」设备号之后,我们可以使用这个设备号注册设备。首先,内核为我们提供了 个这样的函数, 该函数用」初始化结构体,同时将结构体与 结构体连接。其 具体过程可以简化如下 初始化结构体,置 建立 结构体与结构体之间的连接 内核使用函数 将设备结构 的信息告诉内核。要注意,这个函数如果执行成功,则意味着我们的设备已经准备好了,可 以进行操作了,所以,在驱动程序还没有完全准备好处理设备的操作之前,最好不要调用 这个函数 设备驱动文件的操作接口 在为设备分配了设备号以后,我们就可以在 下查到为设备新分配的设备号, 并且可以用此设备号注册设备。即使我们成功了注册∫设备,也在相应的位置(一般为 目录下)看到了设备文件,由于我们没有为设备文件实现其接口的操作函数,我们还无法操 作文件。因此,在注册设各之前,我们要根据实际设备所要实现的功能去完成其对应文件 的接囗函数。以下将介绍设备文件的歌常见的接口函数的功能。 和 方法 方法为驱动程序提供初始化能力,⊥要是对首次打开的设备进行初始化,这里的 初始化不同于之前介绍的驱动注册的初始化 方法完成以下工作, ()检査设备是否就绪以及相关硬件问题 ()若设备是首次打廾,对其进行初始化 ()如有必要,更新指针。 ()分配并填写 中的数据结构。 方法原型就是上文图 数据结构中的方法。 方法的作用正好与方法相反,只体如下, ()释放由分配的,保存在 中的所有内容。 ()在最后一次关闭操作时关闭文件。 方法原型见上文图 数据结构中 方法 和 方法 和方法功能是相似的,只是其中的数据流的方向是相反的。 方法是将 国武技论文在线 数据从内核空间拷贝到用户程序空间 方法与之相反。两个凼数的参数也相同的,包 括一个文件指针 个用户空间的缓冲区和一个请求传输的数据长度参数。和 方法的原型依然可以参见上文图中的方法原型,他们能够进行数据的整段拷贝的实现核心 是使用了以下两个内核函数, 这两个函数必须是可重入的,因为当内核进程访问用户空间的缓冲区页面时,所要求的地址 此时可能不在内存中,那么进程将进入睡眠状态直到页面被交换回来。此外这两个函数还将 检査用户空间的指针是否有效,若指针无效将不进行数据拷贝。一个典型的实现见图。 ssize_t dev_ read(struct file *file, char *buf, size-t countp loff_t *ppos j struct file Buffer BuFfer f count (in the drier Cin the f flags or libc) os copy to user Kernel space rspace (swappable) 图 方法的实现过程 方法的返回值并不一直是我们所请求的数据字节数,有若干情况如下 ()如果返回值等于我们请求的字节数,那么说明完成了预期的功能。 ()如果返回值小于,但是整数,说明只有部分数据成功传送。 ()返回,则达到文件结尾,表明已经没有数据可读了。 ()返回负数,说明出现了错误,该值充当错误码,指明了具体发生了什么样的错误。 方法与方法类似,不予详细说明。 数据结构 中还有很多其他的操作,它们都是对应具体设备而实现成具体 的功能,这些接口函数或法,保证了操作系统能够很好的和外设进行请求与应答,也保证 了外设能够正常实现其功能。 设备驱动 设备驱动由两部分构成:内核的设各驱动和总线上所载设备本身的驱 动。 设备驱动是由内核实现的,它在安装内核后已经实现好了,这部分不需要我 们去实现,也很难实现。所谓 外设驱动开发是指 总线所载的外设本身驱动的 开发。 体系结构及其工作原理是很庞大的内容,本文只是就其字符设备驱动开发的流 程给予归纳总结 众所周知,设备有三种地址空间: 寻址空间,存储空间和其配置空间。 可以访问所有的空间,其中空间和存储空间是由设各驱动程序访问,配置空 国武技论文在线 间由内核完成初始化代码使用。 设备驱动中重要的数据结构 在设备驱动实现的工程中有两个重要的数据结构是必不可少的,它们是 和 数据结构 这个数据结构为我们提供了进入內核驱动的入口函数,也就是上文所说的由内核 完成的设备驱动,就像 数据结构一样,在设计字符设备驱动的过程中要 注意实现这些接口方法。 数据结构的定义如图。 Struct pci driver Struct ist head noder Char *namae Const struct pci device id* id table;/*不能为NUL,以便 probe函数调用* nt* probe)( struct pci dev"dev, const struct pci device_id*id;/*探测设备*/ void(* remove) struct pci dev*dev;/*设备移出* nt(* resume) sTruct pci dev*dev);/*设音就绪* nt↑ suspend)( struct pci dev*dev,u32sate);/说备挂起+ 图 数据结构定义 数据结构 这个数据结构描述了设备几乎所有的硬件信息,包括厂商,设备以及各种 资源。该数据结构的定义如图所示 Struct pci dev struct list head global list Struct list head bus list: Struct pci bus*bus;/*pCE,总线的 pci bus结构*/ Unsigned int devon;/*本PCE设备的设备功能号“ Unsigned short vendor;/*PCE设备的厂商号* Unsigned short device;/*PCHE设备的设备号*/ Struct pci driver * driver; oid *driver data:+ 图 数据结构 设备驱动的构成 其本质是·种总线,它支持不同的具体设备,包括字符设各,网络设备,虚拟设 备等。前文已经介绍过设备驱动包括两部分:驱动和设备本身的驱动。 结构体为我们提供了进入驱动程序的接口,在驱动中我们需要完成这些接口的 国武技论文在线 具体操作 字符设备驱动的川发过程与前文介绍的字符驱动川发过程并没有本质的区 别,驱动开发人员仍然需要为设备分配具体的设备号,根据得到的设备号完成对 结构体的注册与注销,初始化,然后实现文件操作结构中的各种方法。与普通字符设备驱动 不同点是我们还需要对 结构体完成注册与注销 设备驱动的注册与注销 设备驱动程序对 的注册与注销使用以下两个函数, 设备本身的驱动程序的注册与注销与字符驱动的注册与注销并无差异。对于 设备的初始化,我们使用 结构体中的方氵 方法还负责将硬件的探测 工作并保存配置信息。 设备驱动的方法接口 设备驱动程序有两组方法接口,一组是由 提供的访问 内部驱动的 方法接口,另一组是驱动程序必备的文件操作接口 。对丁文件操作接口,其 实现原理与字符设备一钕,卜面介绍重要的 结构体中方法接口。 方法:当核心有个它认为驱动程序需要控制的 结构体吋,就 会调用该函数。该方法主要为了探测设备,并做初始化,保存配置信息。 方法:当 结构体从系统中移除,或者驱动程序正在从内核中卸 载时 核心调用该方法。主要作用是移除字符设备,注销设备类,释放资源。 () 驱动程序的名字。在内核中所有的驱动中,它是唯一的。 :它是一个指向当前驱动所能处理的设备的列表。 设备的配置空间 设备至少包含字节的配置空间,前字节是标准化的,而其余的与设备相关 图给出了必备的字节配置空间 0x00x10 x40x50x60x7 0x0/endor Dcvivcc Command status Revisi ID ass od ache La-ene leader ID R BIST ID Line Timer Ty BASE SE BiSE 三ASE dress 1 CardBy Subsystem Adress 盘dess5 CISpointsr 矿 erdos Ii Device II Ox:0 Base Adre IRQ Reserved RQMin-Gnt Max_Lat e可 red reg I Reg 设备必各的字节的配置空间 在上图的配置空间中,可以使用 和 个奇存器来确定某 制造商的设备,使用 和 米区分米自同一厂商的不 同设备。 内核提供了充足的访问设备配置空间的函数,以下两组函数分别从标志的设 国武技论文在线 各读写个、两个或四个字节配置空间的信息。 中断 外设驱动的中断很容易实现,因为在核引导阶段已经为每个设备分 配了个唯的中断号,它被保存在配置空间奇存器( )中,我们 只要使用一个读取配置空间的方法函数,就可以获得这个中断号。例如 错误欠理 驱动的安装及测试 驱动程序开发需要搭建相应的驱动开发工具,为使其能正常工作还需要安装相应的内 核头文件,以下步骤介纽了在内核为版本下的 操作系统的驱动环境搭建方法。 设备驱动的开发工具安装 安装完成后对其进行相关设置 () () 内核头文件的安装 下使用命令 命令查看系统版本,本文使用的是 ()使用 可以查看内核使用的源中有哪些版本的头文件 ()安装头文件: 安装完成后可以查看目录 下是否有已安装的头文件 ()如果以上步骤有任何失败的情况,可以上网查看相关源并拷贝到 中,使用命令 更新后重新尝试 测试结果 在设计好驱动源文件以及 文件后,可以在下使用一个简单的命令生 成内核模块,是以结尾的文件。使用以下命令来查看驱动安装的情况, 模块名称:将驱动加载到内核。 () 模块名称:将驱动从内核卸线 () 查看已装载的驱动节点的主设备号和次设备号 :参看主板识别到的所有及设备。 国武技论文在线 本文中使用的驱动例程的模块名称为,外设接冂采用的是 系列 的硬核,图展示了加载模块后使用 命令后得到的结果,其中主设备 号为的设备即为本文所使用的模块,其名称为图是在命令以及 命令下得到的结果 文件(F)编(日)查看)终端T)帮助H Cq09q desktop: - S cqgqq desktop: -s clear ev/console ev/ptm 设备的设备号 a00 qq@qq-desktop 又体)编组(日有0)终固助计H) ≤ ATA IDE Controller Ller rev 03) A TechnoLogies, Inc, devi Semiconductor Co, Ltd. RTL111! 8IECB PCI Express Gigabit Ethcrnct controLLer (rcv 92) 9qeqq-desktop: -s lspci I grep xil; nx Corporation Device 4250( rev 02) cqrqq-desktop:-s囗 图 下的 设备 结论 作为一种通用的总线接凵标准,它在目前的计算机系统中得到了非常丿泛的应用 国武技论文在线 并且在高速大容量的数据吋代,其驱动的川发受到更广泛的关注。作为·种优越的廾 源的做操系统,它对外设的支持可谓空前的广泛与灵活。驱动作为软件与硬件之间的 桥梁,其应用与发展对技术的进步与完善有着不可替代的作用 下的驱动程序 的开发始终具有重大意义,其发展前景也是无可估量的。本文首先阐述了下字符驱动 发的基本步骤和要素,并以驱动为例介绍了它的基本组成和文件结构,最后给出了在 下的测试结果。 参考文献 焦文喆,翟正军,任岚昆基于 的佟像数据呆集卡以及驱动设计国外电」测量技术, 北京:中国电力出版社, 王齐《 体系结构导读》北京:机械工业出版社 宋宝华 设备驱动开发详解北京:人民邮电出版社,

...展开详情
立即下载 最低0.43元/次 学生认证VIP会员7折
举报 举报 收藏 收藏
分享
731KB
论文研究-Linux下内核态-用户态高效易用的数据交互方法研究 .pdf

Linux下内核态-用户态高效易用的数据交互方法研究,徐明昆, 胡勇刚,Linux操作系统是一款单内核操作系统,它将各子系统包含在内核中,并为所有进程提供服务。为了保护子系统的安全,Linux将进程空间划分为��

2019-08-16 立即下载
219KB
论文研究-Linux下临界区检测算法研究 .pdf

Linux下临界区检测算法研究,王传瑞,肖涛,在Linux运行环境下,为了保证实时任务的截止期,一种新的临界区检测调度算法被提出,该算法通过实时任务的可调度性判断,重新安排�

2019-08-14 立即下载
503KB
论文研究-Linux下GSI代理实现 .pdf

Linux下GSI代理实现,尹影影,肖宜,网格安全是网格技术的核心问题。目前有很多业界人士研究网格安全中的关键技术——用户代理。本文在Linux操作系统(Redhat9.0)下,采�

2019-08-17 立即下载
529KB
论文研究-基于ARM-Linux的Qt/Embedded的研究与实现 .pdf

基于ARM-Linux的Qt/Embedded的研究与实现,郑阳吉,,本文研究了Qt的特点、发展历程等,在此基础上以一个简单的实例阐述了Qt的开发过程。研究了Qt在嵌入式领域的工具Qt/Embedded,包括硬件�

2019-08-15 立即下载
284KB
论文研究-Linux内核配置系统分析 .pdf

Linux内核配置系统分析,张官兴,,Linux作为一款优秀的开源操作系统被广泛的应用到各个领域,同时也吸引了越来越多的操作系统爱好者。但是,由于操作系统本身的规模�

2019-08-25 立即下载
522KB
论文研究-Linux下的PCIE设备驱动设计与实现 .pdf

Linux下的PCIE设备驱动设计与实现,王学东,崔琪楣,以高效性和灵活性而著称的linux开源操作系统正在获得更多人的青睐,它对外设类型的广泛支持使得其驱动程序的开发成为了一个热点讨�

2019-08-17 立即下载
210KB
论文研究-Linux千兆网卡驱动的设计 .pdf

Linux千兆网卡驱动的设计,易正利,刘元安,随着Internet和通信技术的飞速发展,网络带宽增长速度迅猛,这对计算机接入高速网络的网络接口提出了越来越高的要求。本文旨在针对�

2019-08-20 立即下载
338KB
论文研究-Linux实时性改进方法延迟加锁技术的研究与改进 .pdf

Linux实时性改进方法延迟加锁技术的研究与改进,王鹏,滕至阳,针对当前的Linux系统在实时性方面存在的不足,在一种有效的改进方案:延迟加锁技术的基础上,提出了一些改进。如加入了锁分解技术�

2019-08-15 立即下载
365KB
论文研究-Linux环境下I2C总线通信方式研究及应用 .pdf

Linux环境下I2C总线通信方式研究及应用,王旭阳,李文生,I2C总线是飞利浦公司开发的一种高性能串行总线。本文介绍了I2C总线的基本工作原理和通信方式,分析了在Linux内核中I2C总线驱动程序结�

2019-08-16 立即下载
271KB
论文研究-LINUX操作系统在ARM9上的移植研究与实现 .pdf

LINUX操作系统在ARM9上的移植研究与实现,刘欣,,嵌入式系统中,在操作系统的基础上编写应用软件可以使开发人员缩短开发周期,降低开发成本,提高开发效率。本文讨论了基于ARM9的��

2019-08-16 立即下载
340KB
论文研究-Linux USB HID技术在数据采集中的研究和应用 .pdf

Linux USB HID技术在数据采集中的研究和应用,罗亮,,USB HID(Human Interface Device)设备即人机交互设备,是指满足USB HID规范的一类USB设备。这类设备应用广泛,如鼠标,键盘都是USB HID设备。��

2019-08-15 立即下载
206KB
论文研究-Linux帧缓冲设备驱动原理和测试 .pdf

Linux帧缓冲设备驱动原理和测试,刘冬,,本文介绍了Linux内核的帧缓冲驱动原理,分析了帧缓冲驱动的基本数据结构和基本函数。数据结构的作用在于存放与显示设备相关的参数�

2019-08-15 立即下载
497KB
论文研究-Linux下基于Nutch的集群搜索平台的研究与实现 .pdf

Linux下基于Nutch的集群搜索平台的研究与实现,鱼健榕,,随着开源计算框架Hadoop的广泛应用,基于Hadoop框架之上的集群应用越来越多。本文描述了在Hadoop平台之上,利用开源软件Nutch搭建分布式�

2019-08-15 立即下载
414KB
论文研究-Linux系统上AODV协议实现的分析 .pdf

Linux系统上AODV协议实现的分析,齐朝霞,,无线Ad hoc 网络是一种不需要基础设施的自组织和自管理网络,网络中所有的节点同时具有终端和路由器的功能。因此无线自组网的一个重�

2019-08-18 立即下载
378KB
论文研究-Linux下P2P流量控制系统的设计与实现 .pdf

Linux下P2P流量控制系统的设计与实现,李彬,张淼,本文设计和实现了基于Linux下的P2P流量控制系统。文章先介绍了P2P技术的应用及其带来的问题,提出P2P流量控制的必要性。然后分析了P2P�

2019-08-16 立即下载
237KB
论文研究-LINUX平台下基于EPOLL的FTP服务器设计与实现 .pdf

LINUX平台下基于EPOLL的FTP服务器设计与实现,王亚昌,,网络服务器通常采用多进程、多线程并发机制或者是基于select/poll的I/O复用模型实现,传统的FTP服务器大都使用前者。本文针对Linux 2.6内�

2019-08-19 立即下载
294KB
论文研究-Linux下搭建移动IP平台的设计与实现 .pdf

Linux下搭建移动IP平台的设计与实现,郭跃华,,随着通信技术和internet的飞速发展,internet为移动主机提供服务成为众多用户迫切的需要。而随着下一代internet协议ipv6的提出,在ipv6网络�

2019-08-16 立即下载
381KB
论文研究-嵌入式Linux的网络通信研究 .pdf

嵌入式Linux的网络通信研究,岳鹏,阙大顺,在阐述了嵌入式系统、TCP/IP协议以及以S3C2410A为核心的嵌入式网络通信系统组成的基础上,详细分析了在Linux操作系统下网络通信的软件��

2019-08-15 立即下载
img

关注 私信 TA的资源

上传资源赚积分,得勋章
相关内容推荐