第四次上机—内核编程实验.pptVIP

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

第四次上机—内核编程实验 11/11/11 操作系统内核结构分类 单体结构 实质是没有结构,整个系统由若干具有一定独立功能的过程组成,每个过程都可以调用其他过程 分层结构 操作系统按一定的功能模块分层组织,最高层为用户程序,最底层为处理机调度及实现多道程序,并且下一层是相邻上一层的基础,层与层之间有严格的接口定义,只在相邻层之间发生交互 虚拟机结构 它以运行在裸机上的核心软件(虚拟机监控软件/ 或某一种操作系统) 为基础,向上提供虚拟机的功能,每个虚拟机都像是裸机硬件的一个拷贝。在不同的虚拟机上可以安装不同的操作系统。这样的系统有更好的兼容性和安全性 微内核结构(C/S结构) 基于网络的一种内核结构,适用于分布式操作系统。思想是尽量减小运行于核心态下的内核,将操作系统的一些传统功能作为服务器进程在用户态下运行,内核更多的是在多个服务器进程间以及用户进程与服务器进程间进行消息传递。这样的系统具有更好的可扩展性、可移植性、可靠性及灵活性,但进程间通信的开销非常大 Linux内核模块简介 Linux单体内核结构的缺陷 操作系统各组成部分界限不明显 单一大内核扩充、裁剪费时,每一个微小改动都要重新编译整个内核 Linux可加载内核模块机制 (Loadable Kernel Module) 0. 99版本引入 内核模块是一个目标文件,可以动态载入内核,动态卸载 它们扩展了操作系统内核功能却不需要重新编译内核、启动系统 模块被加载后,成为内核代码一部分,与其他内核代码地位相同 Linux内核模块编程 //hello.c #includelinux/init.h//module_init/module_exit定义在init.h中 #includelinux/kernel.h//包含内核函数printk的原型声明 MODULE_LICENSE(“GPL”);//告诉内核该模块采用GPL许可 static int hello_inti(void){//初始化函数 printk(KERN_ALERT “hello,world!\n”); return 0; } static void hello_exit(void){//退出函数 printk(KERN_ALERT “Goodbye\n”); } module_init(hello_init); module_exit(hello_exit); Linux内核模块编译1—编译文件 //在hello.c所在目录下编写名为Makefile的文件 //利用Makefile实现自动化编译 Ifneq ($(KERNELRELASE),) obj-m:=hello.o //指示生成目标模块hello.ko依赖于目标文件hello.o else KDIR:=/lib/modules/$(shell uname -r)/build //KDIR定位内核代码目录 PWD:=$(shell pwd) //PWD指向当前目录 default: $(MAKE) –C $(KDIR) M=$(PWD) modules clean: $(MAKE) –C $(KDIR) M=$(PWD) clean endif Linux内核模块编译2—编译命令 输入命令 make //如果make执行成功,可看到当前目录下生成一些文件,如hello.mod.c,hello.ko 加载模块 insmod ./hello.ko 列出系统已加载的模块(筛选hello关键字的) lsmod |grep hello 卸载模块 rmmod hello Linux内核模块的基本知识1 内核模块程序没有main函数 至少包含两个函数:初始化和退出 static int hello_init(void){} //注册和申请资源。返回0表示初始化成功;其他值表示失败 static void hello_exit(void){} //注销和释放资源 两个函数分别用两个宏标识 module_init //标记的函数在模块加载时调用 module_exit //标记的函数在卸载模块时调用 Linux内核模块的基本知识2 内核模块只能使用内核函数,不能使用C函数库 asmlinkage int printk(const char* fmt,…); 给模块传递参数 module_param(变量名,变量类型,许可标志位) #includelinux/moduleparam.h static char* my_string = “parameter”; static int my_int = 1; module_param(my_string,charp,S_IRUGO); module_param(my

文档评论(0)

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

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

1亿VIP精品文档

相关文档