资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
设备管理与模块机制,基本概念 传统方式的设备注册与管理 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,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); ;,Linux Device struct * fops; ; static struct device_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 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结构中的成员变量之外,其他函数都是采用所有块设备通用的操作函数(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); 编译模块 # 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/linux-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 & Module,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:32: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 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,谢谢大家,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号