Linux设备驱动程序原理及框架内核模块入门篇.pptVIP

Linux设备驱动程序原理及框架内核模块入门篇.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux设备驱动程序原理及框架内核模块入门篇

课程内容 内核模块 内核模块 课程内容 内核模块 内核模块 内核模块 内核模块 内核模块 课程内容 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 课程内容 内核模块 内核模块 内核模块 内核模块 内核模块 课程内容 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 内核模块 代码讲解 宏 __init和__exit #define __init __attribute__ ((__section__ (.init.text))) #define __exit __attribute__ ((__section__(.exit.text))) 通过__init,会把函数中的代码放到.init.text段中,系统启动完成后会释放此空间。因为,被__init修饰的代码只在启动时执行一次,以后不会被用到。 代码讲解 函数 printk #define KERN_EMERG 0 /* system is unusable*/ #define KERN_ALERT 1 /* action must be taken immediately*/ #define KERN_CRIT 2 /* critical conditions*/ #define KERN_ERR 3 /* error conditions*/ #define KERN_WARNING 4 /* warning conditions*/ #define KERN_NOTICE 5 /* normal but significant condition*/ #define KERN_INFO 6 /* informational*/ #define KERN_DEBUG 7 /* debug-level messages*/ makefile ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif clean: @rm *.o *.ko *.mod.c -f makefile 目标文件定义 obj-m := hello.o obj-m则表示该文件要作为模块编译,而obj-y 表示要由hello.c文件编译得到hello.o并链接进内核,而在此目录树以外,只能用obj-m。 编译 我们将模块相关文件目录放在代码树以外的位置,用如下命令来编译模块: make -C $(KERNELDIR) M=$PWD modules -C指定代码树的位置,M=$PWD 或 M=`PWD` 告诉kbuild回到当前目录来执行build操作。 加载和卸载模块 insmod hello-module.ko rmmod hello-module.ko 模块参数 对于如何向模块传递参数,Linux?kernel?提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。这些模块参数也能够在sysfs中显示出来。结果,有许许多的方法用来创建和管理模块参数。 模块参数 宏module_param(name,?type,?perm) name既是用户看到的参数名,又是模块内接受参数的变量;? type表示参数的数据类型,是下列之一:byte,?short,?ushort,?int,?uint,?long,?ulong,?charp,?bool,?invbool。 perm指定了在sysfs中相应文件的访问权限。访问权限用通常的八进制格式来表示,例如,用0644(表示ower具有读写权限,group和everyone只读权限),?或者用通常的S_Ifoo定义,例如,S_IRUGO?|?S_IWUSR?(表示everyone具有读权限,用户具有写权限)。用0表示完全关闭在sysfs中相对应的项。 Linux设备驱动程序原理及框架 内核模块入门篇 樊东东 内核模块介绍 应用层加载模块操作过程 内核如何支持可安装模块 内核提供的接口及作用 模块实例 内核模块介绍 Linux采用的是整体式的内核结构,这种结构的内核一般不能动态的增加新的功能。为此,Linux提供了一种全新的机制,叫(可安装)“模块”(mod

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档