- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chap6-1 Linux设备管理课件
背景知识: Linux设备管理;主要内容;概述;设备管理总体结构示意;输入输出系统层次结构;驱动程序基础——I/O空间;驱动程序基础——命名空间;驱动程序基础——内存分配;驱动程序基础——设备分类;驱动程序基础——设备号;驱动程序基础——中断vs轮询;驱动程序基础——DMA方式;驱动程序基础——睡眠唤醒机制;驱动程序基础——设备文件;驱动程序基础——file_operations;read()和write()struct inode *inode:指向代表要访问的设备的特殊文件的指针。sturct file *file:指向该设备的文件结构的指针。
Char *buf:一个读写的字符缓冲区。位于用户空间内存中,可以用get_fs*(),put_fs*()和memcpy*fs()访问。
Int count:缓冲区中读或写的字符的计数。它是buf的大小,也是知道怎样到达buf的末尾的手段,因为buf是没有保证以NULL结尾的。 ;Select()struct inode *inode:指向该设备的inode结构的指针。
Struct file *file:指向设备的文件结构的指针。
Int sel_type:可以执行的选择类型
SEL_IN read
SEL_OUT write
SEL_EX exception
Select_table *wait
? 如果设备没有准备好,调用select_wait(),并且返回0。
如果设备准备好,返回1。
;ioctl()函数:处理ioctl调用。
结构:首先差错检查,然后用一个大的switch语句来处理所有可能的ioct。
参数:
Struct inode *inode
Struct file *file
Unsigned int cmd :ioctl命令。一般用于做case语句的switch参数。
Unsigned int arg 这是此命令的参数,由用户定义。
返回:
出错返回-error。
其他情况下返回由用户定义。;mmap()函数
Struct inode *inode
Struct file *file
Unsigned long addr 需要映射进入的主存开始地址。
Size_t len 需要映射的存储空间长度。
Int prot 下面中的一个:
PROT_READ 可以读的区域。
PROT_WRITE 可写的区域
PROT_EXEC 可执行的区域
PROT_NONE 不可访问的区域
Unsigned long off 需要映射的文件偏移地址。这个地址将被映射到addr。 ; open()和release()函数
Struct inode *inode 指向此设备的inode结构的指针。
Struct file *file 指向此设备的文件结构的指针。
Open()在设备特殊文件打开时调用。是用来保证一致性的策略???制。 Release()只在进程关闭它打开的最后一个文件描述子的时候调用? ;init()函数内核第一次启动时调用: 在正确的位置调用init(): 字符设备drivers/char/mem.c中的chr_dev_init() 把file_operation注册到VFS中: 对于字符设备register_chrdev()
打印关于设备的信息,并且报告找到的硬件 printk() ;中断处理;辅助函数——请求调度;辅助函数——定时器管理;辅助函数——中断管理;辅助函数——端口读写;辅助函数——内存管理设备号;辅助函数——设备的注册和注销;辅助函数——内存空间转换;辅助函数——缓冲区管理;辅助函数——其他;模块编程基础;模块之间的函数调用
内核可以使用其它模块或内核的函数,也可以export一些函数供其他模块或内核使用。
模块栈:如果模块A使用了模块B的函数,那么B必须在A之前加载,否则加载A的命令不成功。
模块可以使用的函数:
自身定义;
其他module提供;
内核提供
命令ksyms –a:列出已经加载的模块的函数或变量。
Symbol table:记录module导出的函数或变量。
所有声明为global的函数或变量都意味着被导出,可以被其他模块使用。;模块编程基础——常用命令;模块基础——装入;模块基础——装入;模块基础——卸载;内核模块必须有两个函数:
i
您可能关注的文档
- book7 unit 4 Language points in Reading课件.ppt
- British Food and Drink Culture课件.ppt
- BRITISH LITERATURE 1课件.ppt
- Brief Introduction to Genetic Algorithm课件.ppt
- BSAFC4_PPT_ch04课件.ppt
- British Literature)课件.ppt
- British_economoy课件.ppt
- Bulk Cargo Terminals V1课件.ppt
- British judicial system课件.ppt
- BUCK 电源工作原理课件.ppt
文档评论(0)