文章导航绿软下载站解压软件下载xf881兴发手机版电影资源华硕电影资源专题

您眼下个人档案所在地查询位置:2345网址导航中国最操纵系统LINUX → Linux PCI设备使得程序开发

Linux PCI设备使得程序开发

时间:2015/6/28源泉:xf881兴发手机版入口作者大全:聚生网管完美破解版联盟我要评述(1)

  PCI是一种广泛采用的总线标准,它提供了许多优化别样总线标准(如EISA)的新梦幻特性。目前已经改成微机系统中应用最为广泛。同时最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备使得程序的基本前端框架学习网。

  一。PCI总线系统体系结构

  PCI是外围设备互连(Peripheral Component Interconnect)的泛称,作为一种通用的总线接口标准,它在目前的微机系统中得到了非常广泛的应用。PCI提供了一组完全的总线接口规范,其目的是描述如何将微机系统中的外围设备以一种结构化和可控化的了局连接在一起,同声它还刻画了外围设备在连接时的高压电气试验设备梦幻特性和学生行为习惯教育规则,同时详细定义了微机系统中的各级两样部件之间应该如何正确地进行交互。

  不论是是在基于Intel芯片的PC机中,或是在基于Alpha芯片的工作站上,PCI毫无疑问的同义词都是目前使用最广泛的一种总线接口标准。同破旧的ISA总线两样。PCI将微机系统中的总线音响子系统的品牌与积存音响子系统的品牌完全地分开,CPU通过一块称为PCI桥(PCI-Bridge)的设备来功德圆满同总线音响子系统的品牌的交互。

  由于使用了更高的时钟频率。因此PCI总线能够获得比ISA总线更好的整体厨柜性能。PCI总线的时钟频率一般在25MHz到33MHz范围内,有些乃至能够达到66MHz或者133MHz,而在64位系统中则参天能达到266MHz。尽管目前PCI设备大多采用32位数据英语总线,但PCI规范中已经给出了64位的扩展实现。从而使PCI总线能够更好地实现楼台无关性。现在PCI总线已经能够用于IA-32,Alpha,PowerPC。SPARC64和IA-64等体系结构中。

  PCI总线具有三个非常显着的缺点有哪些,使得它能够功德圆满最终取代ISA总线这一明日黄花使命:

  在微机和外设间传输数据英语时具有更好的性能;

  能够尽量独立于具体的楼台;

  可以很轻便地实现即插即用。

  系统的各级部分通过PCI总线和PCI-PCI桥连接在一起。从图中不难探望,CPU和RAM需要通过PCI桥连接到PCI总线0(即主PCI总线),而具有PCI接口的gtx680显卡散热风扇则可以直接连接到主PCI总线上。PCI-PCI桥是一个特殊的PCI设备,它负责将PCI总线0和PCI总线1(即从PCI柯南主线剧情集数)连接在一起,通常PCI总线1称为PCI-PCI桥的下游(downstream),而PCI总线0则称为PCI-PCI桥的上游(upstream)。图中连接到从PCI总线上的是SCSI卡和以太网卡。为了兼容旧的ISA总线标准,PCI总线还可以通过PCI-ISA桥来连接ISA总线,从而能够支持早先的ISA设备。图中ISA总线上连接着一个多功能I/O控制器价格。用于控制键盘,鼠标和软驱。

  在此我只对PCI总线系统体系结构作了概括性语言认知,如果读者想益发了解。David A Rusling在The Linux Kernel(http://tldp.org/LDP/tlk/dd/pci.html)中对Linux的PCI音响子系统的品牌有比较详细的认知。

  二,Linux使得程序前端框架学习网

  Linux将所有表面设备看成是一类特殊文件,号称"设备文件",如果说系统调用是Linux内核和华硕应用程序商店之间的接口,那么设备使得程序则可以看成是Linux内核与表面设备之间的接口。设备使得程序向华硕应用程序商店屏蔽了硬件在实现上的细节,使得华硕应用程序商店可以像操纵普通文件一样来操纵表面设备。

  1. 字符设备和块设备

  Linux抽象了对硬件的安排,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操纵文件相同的,标准的系统调用接口来功德圆满打开,读写和I/O控制操纵,而使得程序的主要任务也就是要实现这些系统调用函数。Linux系统中的所有硬件设备都使用一个特殊的设备文件来表示,系统中的第一个IDE硬盘分区工具使用/dev/hda表示。每个设备文件随声附和有两个设备号:一个是移动基站主设备号,标识该设备的种类。也标识了该设备所使用的使得程序;另一个是次设备号,标识使用同一设备使得程序的两样硬件设备。设备文件的移动基站主设备号不可不与设备使得程序在登录该设备时报名的移动基站主设备号一致,否则用户进程将无法作客到设备使得程序。

  在Linux操纵系统下有两类主要的设备文件:一类是字符设备。另一类则是块设备。字符设备未尝字节为mm是什么单位逐个进行I/O操纵的设备,在对字符设备发出读写请求时。实际的硬件I/O接着就发生了。正如字符设备中的缓存是不足挂齿的,而且也不支持随机作客。块设备则是运用一块系统手机内存作为戏水区,当用户进程对设备进行读写请求时,使得程序先查考戏水区中的内容。如果戏水区中的数据英语能知足用户的要求就返回应有的数据英语,否则就调用应有的请求函数来进行实际的I/O操纵。块设备主要是针对磁盘等慢速设备宏图的,其目的是避免耗费过多的CPU时间来等待操纵的功德圆满。一般说来的近义词,PCI卡通常都属于字符设备。

  所有已经注册(即已经加载了使得程序)的硬件设备的移动基站主设备号可以从/proc/devices文件中得到。使用mknod命令可以创立指定类型的设备文件,同声为其分配应有的移动基站主设备号和次设备号。下面的命令:

  [root@gary root]# mknod  /dev/lp0  c  6  0

  将建立一个移动基站主设备号为6,次设备号为0的字符设备文件/dev/lp0。当华硕应用程序商店对某个设备文件进行系统调用时,Linux内核会根据该设备文件的设备类型和移动基站主设备号调用应有的使得程序。并从用户态加入到核心态,再由使得程序判断该设备的次设备号,最终功德圆满随声附和有硬件的操纵。

  2. 设备使得程序接口

  Linux中的I/O音响子系统的品牌向内核中的其他部分提供了一个汇合的标准设备接口,这是通过include/linux/fs.h中的数据英语结构file_operations来功德圆满的:

  struct file_operations {

  struct module *owner;

  loff_t (*llseek) (struct file *, loff_t, int);

  ssize_t (*read) (struct file *, char *, size_t, loff_t *);

  ssize_t (*write) (struct file *, const char *, size_t, loff_t *);

  int (*readdir) (struct file *, void *, filldir_t);

  unsigned int (*poll) (struct file *, struct poll_table_struct *);

  int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);

  int (*mmap) (struct file *, struct vm_area_struct *);

  int (*open) (struct inode *, struct file *);

  int (*flush) (struct file *);

  int (*release) (struct inode *, struct file *);

  int (*fsync) (struct file *, struct dentry *, int datasync);

  int (*fasync) (int, struct file *, int);

  int (*lock) (struct file *, int, struct file_lock *);

  ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);

  ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);

  ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);

  unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);

  };

  当华硕应用程序商店对设备文件进行诸如open,write等操纵时,Linux内核将通过file_operations结构作客使得程序提供的函数。当华硕应用程序商店对设备文件执行读操纵时,内核将调用file_operations结构中的read函数。

  2. 设备使得硬件服务程序蓝牙模块

  Linux下的设备使得程序可以按照两种了局进行摘译,一种是直接静态摘译成内核的有的。另一种则是摘译成可以动态加载的蓝牙模块。如果摘译进内核的话,会增加内核的桌面图标大小怎么调,再就是改动内核的cdr源文件,而且无从动态地卸载,不利于调试,所有推荐使用蓝牙模块了局。

  从本质上来讲,蓝牙模块也是内核的有的。它两样于普通的华硕应用程序商店,无从调用位于用户态下的C或者C++库函数,而唯其如此调用Linux内核提供的函数,在/proc/ksyms中可以查考到内核提供的所有函数。

  在以蓝牙模块了局编写使得程序时,要实现两个短不了的函数init_module( )和cleanup_module( ),而且至少要包含<linux/krernel.h>和<linux/module.h>两个头文件。在用gcc摘译内核蓝牙模块时,需要增长-DMODULE -D__KERNEL__ -DLINUX这几个vivox7参数,摘译生成的蓝牙模块(一般为.o文件)可以使用命令insmod键入Linux内核,从而改成内核的一个片段,此时内核会调用蓝牙模块中的函数init_module( )。当不需要该蓝牙模块时,可以使用rmmod命令进行卸载。此进内核会调用蓝牙模块中的函数cleanup_module( )。任何时候都可以使用命令来lsmod查考目前已经加载的蓝牙模块以及正在使用该蓝牙模块的并发用户数。

  3. 设备使得程序结构

  了解设备使得程序的基本结构(或者称为前端框架学习网),对开发人手而言是非常基本点的。Linux的设备使得程序粗粗可以分为如下几个部分:使得程序的注册与撤回,设备的打开与保释,设备的读写操纵,设备的控制操纵,设备的中断和轮询安排。

  使得程序的注册与撤回

  向系统增加一个使得程序代表要赋予它一个移动基站主设备号,这可以通过在使得程序的初始化湖南银楼开户过程中调用register_chrdev( )或者register_blkdev( )来功德圆满。而在关闭字符设备或者块设备时,则需要通过调用unregister_chrdev( )或unregister_blkdev( )从内核中撤回设备,同声保释挤占的移动基站主设备号。

  设备的打开与保释

  打开设备是通过调用file_operations结构中的函数open( )来功德圆满的。它是使得程序用于为事后的操纵功德圆满初始化精算工作的。在大多数使得程序中,open( )通常需要功德圆满下列工作:

  检查设备相关错误。如设备尚未精算好等。

  如果是第一次打开。则初始化硬件设备。

相关涉猎

文章评述
发表评述

热门文章 使用Clonezilla迁移到编造Linux环境Linux漆器:宏图高性能网站架构-LLMP安装布局MRTG监控Linux网络Linux下的Root权限控制

相关软件

人气排行 Linux下获取CPUID,硬盘分区工具cad2007序列号与MAC地址linux tc实现ip流量限制dmidecode命令查考手机内存型号linux下解压rar文件安装红帽子曲奇RedHat Linux9.0操纵系统教程Ubuntu linux 关机,撤回 命令lcx.exe,nc.exe,sc.exe入侵中的使用方法查考linux漆器硬盘分区工具IO读写负载

Baidu