添加简单的linux内核模块,操作系统实践 第12章-添加最简单的Linux内核模块.ppt

1cbb08320638fa5f411de9423ba0a513.gif操作系统实践 第12章-添加最简单的Linux内核模块.ppt

文档编号:310662

文档页数:16

上传时间: 2018-07-21

文档级别:

文档类型:ppt

文档大小:2.00MB

第12章 添加最简单的Linux内核模块,操作系统实践,山东科技大学操作系统教研组,熟练掌握基本的Linux内核模块开发框架和编译方法。 熟练掌握Linux内核模块添加流程。 理解Linux内核模块代码中的一些常见宏和参数。 掌握Linux内核模块程序和应用程序的差异。深入理解操作系统为用户提供服务的方式、方法 深入理解计算机程序的运行方式,本章目标,实验1添加一个简单的Linux内核模块(教材P.162,第12章 添加最简单的Linux内核模块,实验内容 从教材提供的电子资源中找到或者按教材提示自己编写简单的Linux内核模块kello.c及其对应的Makefile文件 编译、安装、删除该模块,查看该模块的安装位置、运行情况,实验1添加一个简单的Linux内核模块,实验要求 通过阅读、执行kello.c及其对应的Makefile文件,理解Linux内核模块LKM的基本框架和运行方式、原理。 对比kello.c和应用程序hello.c在编写、运行过程中的差异,理解操作系统为用户提供服务的方式、方法。 结合操作系统知识,通过实验深入理解计算机程序在操作系统支持下的运行方式。,,实验1添加一个简单的Linux内核模块,原理/背景 用户态和内核态 LKM基本框架、关键代码,,实验1添加一个简单的Linux内核模块,实验1 添加一个简单的Linux内核模块 实验背景和原理,用户态与内核态应用程序调用操作系统服务完成特定功能 操作系统为应用程序提供服务 应用程序工作在用户空间,为用户态 操作系统模块工作在内核空间,为内核态,,C/C应用程序的运行机制,实验1 添加一个简单的Linux内核模块 实验背景和原理,Linux内核模块LKM (Linux Kernel Module) Linux是单内核多模块的操作系统 两种开发内核模块的方法 静态开发 LKMLKM具有如下特点 主要使用C语言编程,但也可以使用内联的汇编代码; LKM工作在内核空间,可以不受约束的运行,因此在一个LKM内部读者可以访问对应用程序屏蔽的内核数据结构、硬件设备等; LKM可以通过proc伪文件系统、内存映射、特定的系统调用函数等不同的机制实现内核空间和用户空间的数据交换。这些机制将在后续章节陆续讲到。,,实验1 添加最简单的Linux内核模块 实验背景和原理,1. LKM代码框架 (教材P. 157),//kello.c include // for printk int kello_init void printk “n Hello, students from SDUST This is in kernel space n“ ;return 0; void kello_exit void printk “n Goodbye now. students from SDUST n“ ; MODULE_AUTHOR“SDUSTOS “; MODULE_LICENSE“GPL“; module_inithello_init; module_exithello_exit;,实验1 添加最简单的Linux内核模块 实验背景和原理,2. LKM代码解释,1)任何一个内核模块文件必须要有两个模块管理函数,即模块初始化函数和模块回收函数,其原型如下所示 int init_module void ; // 模块初始化函数,在模块初始化时被调用 void cleanup_module void ; //模块回收函数,在模块撤销时调用,2)为了模块更高效地被加载、执行和撤销,尤其是内存的分配和回收,在文件最后需要作如下声明 module_initinit_module; //执行模块初始化函数 module_exitcleanup_module; //执行模块回收函数,实验1 添加最简单的Linux内核模块 实验背景和原理,3. LKM编译,第一种是集成到内核、随内核一起编译;这种方法把开发完的内核文件放在Linux内核源代码相关目录下,随内核一起编译。 缺点耗时长;一旦代码有错,导致系统出现问题,第二种则是单独编译、动态插入内核;把将开发的内核代码文件直接进行编译,然后使用命令动态插入内核或者从内核卸载。 优点编译速度快;单独调试代码 缺点每次系统启动后都需要再加载代码,实验1 添加最简单的Linux内核模块 实验背景和原理,3. LKM编译,第二种则是单独编译、动态插入内核;把将开发的内核代码文件直接进行编译,然后使用命令动态插入内核或者从内核卸载。,ifneq KERNELRELEASE, obj-m kello.o else KDIR /lib/modules/shell uname -r/build PWD shell pwd default MAKE -C KDIR SUBDIRSPWD modules rm -r -f .tmp_versions *.mod.c .*. *.o *.symvers endif,Makefile完整代码 教材P.159 内核编译需要Linux内核文件的支持。 /shell uname -r/的作用 编译命令 kello.c和Makefile存储目录下执行make,实验1 添加最简单的Linux内核模块 总结,表12.1 基于C语言的应用程序与内核模块的差异,实验1 添加最简单的Linux内核模块 实验步骤,LKM编译、添加、显示执行结果以及删除模块, sudo rmmod kello.ko (删除模块),编译,插入模块,查看内核日志中的执行结果,拓展实验 printk和某些常见宏,static char * log_level “KERN_EMERG“,“KERN_ALERT“,“KERN_CRIT“,“KERN_ERR“,“KERN_WARNING“,“KERN_NOTICE“,“KERN_INFO“,“KERN_DEBUG“ ;,printk “ Hello, students from SDUST This is in kernel space n“ ;,printk KERN_EMERG “n Hello, students from SDUST This is in kernel space n“ ;,拓展试验教材P162实验2,课后练习,完成本章课后习题与练习中的全部题目,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值