Linux实用教程Linux设备管理与模块机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n register_blkdev(unsigned int major,const char *name, struct block_device_operations *bdops)
n int unregister_blkdev(unsigned int major, const char * name)
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
基本概念
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
基本概念
PPT文档演模板
•建立设备: •#mknod /dev/dev_name type major_number minor_number
Linux实用教程Linux设备管理与模块 机制
n fs/block_dev.c
static struct { const char *name; struct block_device_operations *bdops;
} blkdevs[MAX_BLKDEV];
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
块设备注册
n fs/block_dev.c
•字符设备的注册与管理
fs/devices.c • struct device_struct { • const char * name; • struct file_operations * fops; • }; • static struct device_struct chrdevs[MAX_CHRDEV]; • 注册与注销函数: • int register_chrdev(unsigned int major, const char * name,
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
(1) llseek(file, offset, whence):修改文件的读写指针。
(2) read(file, buf, count, offset):从设备文件的offset 处开始读出count个 字节,然后增加*offset的值。
Linux实用教程Linux设 备管理与模块机制
PPT文档演模板
2020/11/2
Linux实用教程Linux设备管理与模块 机制
基本概念
n 字符设备、块设备、网络设备
字符设备以字节为单位进行数据处理,通常只允许按顺序访问 块设备将数据按可寻址的块为单位进行处理,可以随机访问,利用缓冲技术 网络设备是一类特殊的设备,每块网卡有名字但没有设备文件与之对应 查看系统中的设备:/Fra Baidu bibliotekroc/devices
VFS中的文件
n include/linux/fs.h
struct file { …… struct file_operations *f_op;
}; struct file_operations {
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(*ioctl) (struct inode *,struct file *,unsigned int,unsigned long); int(*mmap) (struct file *,struct vm_area_struct *); int(*open) (struct inode *,struct file *); int(*release) (struct inode *,struct file *); int(*fsync) (struct file *,struct dentry *,int datasync); int(*fasync) (int,struct file *,int); …… };
(6) open(inode, file):打开并初始化设备。
(7) release(inode, file):关闭设备并释放资源。
(8) fsync(file, dentry):实现内存与设备之间的同步通信。
(9) fasync(file, on):实现内存与设备之间的异步通信。
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
n 主设备号和次设备号
major number:相同的设备使用相同的驱动程序 minor number:用来区分具体设备的实例 查看设备及其类型“ls -l /dev”
n 设备文件系统devfs
/dev目录过于庞大,很多设备文件没有对应系统中的设备 devfs根据系统中的实际设备构建设备文件,并按目录存放,如/dev/disk, /dev/pts
struct file_operations *fops) • int unregister_chrdev(unsigned int major, const char * name); • 注:major即设备的主设备号,注册后就是访问数组
chrdevs的索引(下标)。
PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
(3) write(file, buf, count, offset):从设备文件的offset处写入count个字节, 然后增加*offset的值。
(4) ioctl(inode, file, cmd, arg):向一个硬件设备发命令,对设备进行控 制。
(5) mmap(file, vma):将设备空间映射到进程地址空间。
•PCI设备(驱动实现见word文档)
✓Linux内核启动时会对所有PCI设备进行扫描、登录和分配资源等初始化
操作,建立起系统中所有PCI设备的拓扑结构
✓此后当内核欲初始化某设备时,调用module_init加载该设备的驱动程

PPT文档演模板
Linux实用教程Linux设备管理与模块 机制
块设备
相关文档
最新文档