资源描述:
《设备管理与模块机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、设备管理与模块机制基本概念传统方式的设备注册与管理devfs注册与管理块设备的请求队列网络设备模块机制LinuxDevice&Module基本概念字符设备、块设备、网络设备字符设备以字节为单位进行数据处理,通常只允许按顺序访问块设备将数据按可寻址的块为单位进行处理,可以随机访问,利用缓冲技术网络设备是一类特殊的设备,每块网卡有名字但没有设备文件与之对应查看系统中的设备:/proc/devices主设备号和次设备号majornumber:相同的设备使用相同的驱动程序minornumber:用来区分具体设备的实例查看设备及其类型“ls-
2、l/dev”设备文件系统devfs/dev目录过于庞大,很多设备文件没有对应系统中的设备devfs根据系统中的实际设备构建设备文件,并按目录存放,如/dev/disk,/dev/ptsLinuxDevice&Module基本概念LinuxDevice&Module基本概念建立设备:#mknod/dev/dev_nametypemajor_numberminor_numberLinuxDevice&ModuleVFS中的文件include/linux/fs.hstructfile{……structfile_operations*f_o
3、p;};structfile_operations{loff_t(*llseek)(structfile*,loff_t,int);ssize_t(*read)(structfile*,char*,size_t,loff_t*);ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);int(*mmap)(structfile*,structvm_area
4、_struct*);int(*open)(structinode*,structfile*);int(*release)(structinode*,structfile*);int(*fsync)(structfile*,structdentry*,intdatasync);int(*fasync)(int,structfile*,int);……};LinuxDevice&Module(1)llseek(file,offset,whence):修改文件的读写指针。(2)read(file,buf,count,offset):从设备文
5、件的offset处开始读出count个字节,然后增加*offset的值。(3)write(file,buf,count,offset):从设备文件的offset处写入count个字节,然后增加*offset的值。(4)ioctl(inode,file,cmd,arg):向一个硬件设备发命令,对设备进行控制。(5)mmap(file,vma):将设备空间映射到进程地址空间。(6)open(inode,file):打开并初始化设备。(7)release(inode,file):关闭设备并释放资源。(8)fsync(file,dentry
6、):实现内存与设备之间的同步通信。(9)fasync(file,on):实现内存与设备之间的异步通信。LinuxDevice&Modulefs/devices.cstructdevice_struct{constchar*name;structfile_operations*fops;};staticstructdevice_structchrdevs[MAX_CHRDEV];注册与注销函数:intregister_chrdev(unsignedintmajor,constchar*name,structfile_operation
7、s*fops)intunregister_chrdev(unsignedintmajor,constchar*name);注:major即设备的主设备号,注册后就是访问数组chrdevs的索引(下标)。字符设备的注册与管理LinuxDevice&ModulePCI设备(驱动实现见word文档)Linux内核启动时会对所有PCI设备进行扫描、登录和分配资源等初始化操作,建立起系统中所有PCI设备的拓扑结构此后当内核欲初始化某设备时,调用module_init加载该设备的驱动程序LinuxDevice&Module块设备fs/block
8、_dev.cstaticstruct{constchar*name;structblock_device_operations*bdops;}blkdevs[MAX_BLKDEV];LinuxDevice&Module块设备注册fs/