《设备管理与模块机制--传统方式的设备注册与管理(ppt27页)》由会员分享,可在线阅读,更多相关《设备管理与模块机制--传统方式的设备注册与管理(ppt27页)(28页珍藏版)》请在金锄头文库上搜索。
1、设备管理与模块机制,基本概念 传统方式的设备注册与管理 devfs注册与管理 块设备的请求队列 网络设备 模块机制,Linux Device ; struct 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,unsi
2、gned 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); ;,Linux Device struct * fops; ; static struct devic
3、e_struct chrdevsMAX_CHRDEV; 注册与注销函数: int register_chrdev(unsigned int major, const char * name, struct *fops) int unregister_chrdev(unsigned int major, const char * name); 注:major即设备的主设备号,注册后就是访问数组chrdevs的索引(下标)。,字符设备的注册与管理,Linux Device struct block_device_operations *bdops; blkdevsMAX_BLKDEV;,Linux
4、 Device int (*release) (struct inode *, struct file *); int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); int (*check_media_change) (kdev_t); int (*revalidate) (kdev_t); struct module *owner; ;,Linux Device 除了open、release等函数利用了设备注册时提供的block_device_operations结构中的成员变量之外,其他函数都是采用所有
5、块设备通用的操作函数(def_blk_fops),块设备的缺省操作def_blk_fops,Linux Device ,块设备的缺省操作def_blk_fops,Linux Device queue_proc *queue; void *data; ; struct blk_dev_struct blk_devMAX_BLKDEV;,Linux Device /读写队列 request_fn_proc *request_fn; ,Linux Device return 0; void cleanup_module(void) printk(Goodbye cruel worldn); 编译模块
6、 # gcc c hello.c DMODULE D_KERNEL_ -DLINUX -Wall O2 -I/usr/src/linux-2.4/include 安装、卸载模块 # insmod hello.o Hello world # rmmod hello Goodbye cruel world,Linux Device & Module,模块设计注意事项,模块设计与应用程序设计 模块是装入内核的,运行时CPU处于核心态 应用程序运行时CPU处于用户态 编译模块 设计应用程序使用的include文件:/usr/include 设计内核模块使用的include文件:/usr/src/lin
7、ux-2.4/include 两者如果不一致,在编译内核模块时要用-I指明include路径 设计的模块可以调用Linux内核及其他模块已经输出(exported)的函数,不能利用标准C提供的库函数如printf #more /proc/ksyms或,Linux Device & Module,模块调试,printk 利用/proc文件系统或ioctl; ksyms 使用调试器 gdb kdebug 远程调试,Linux Device & Module,/proc/下文件、目录的意义,Linux Device & Module,SGI公司OSS项目的kgdb,Linux Device & Mo
8、dule,1、有时候读书是一种巧妙地避开思考的方法。20.9.2720.9.27Sunday, September 27, 2020 2、阅读一切好书如同和过去最杰出的人谈话。18:32:4318:32:4318:329/27/2020 6:32:43 PM 3、越是没有本领的就越加自命不凡。20.9.2718:32:4318:32Sep-2027-Sep-20 4、越是无能的人,越喜欢挑剔别人的错儿。18:32:4318:32:4318:32Sunday, September 27, 2020 5、知人者智,自知者明。胜人者有力,自胜者强。20.9.2720.9.2718:32:4318:3
9、2:43September 27, 2020 6、意志坚强的人能把世界放在手中像泥块一样任意揉捏。2020年9月27日星期日下午6时32分43秒18:32:4320.9.27 7、最具挑战性的挑战莫过于提升自我。2020年9月下午6时32分20.9.2718:32September 27, 2020 8、业余生活要有意义,不要越轨。2020年9月27日星期日6时32分43秒18:32:4327 September 2020 9、一个人即使已登上顶峰,也仍要自强不息。下午6时32分43秒下午6时32分18:32:4320.9.27 10、你要做多大的事情,就该承受多大的压力。9/27/2020
10、6:32:43 PM18:32:432020/9/27 11、自己要先看得起自己,别人才会看得起你。9/27/2020 6:32 PM9/27/2020 6:32 PM20.9.2720.9.27 12、这一秒不放弃,下一秒就会有希望。27-Sep-2027 September 202020.9.27 13、无论才能知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。Sunday, September 27, 202027-Sep-2020.9.27 14、我只是自己不放过自己而已,现在我不会再逼自己眷恋了。20.9.2718:32:4327 September 202018:32,谢谢大家,