linux内核模块实验,linux内核模块实验(2学时).doc

第一个内核模块实验

一: 预习要求:

( 1 ) 做本实验之前,请复习相关内核模块知识。

( 2 ) 请了解内核模块的编写、编译及安装与卸载方法。

( 3 ) 请学习内核打印函数 printk() 的用法。

( 4 ) 请复习 Makefile 文件的编写。

二:实验目的:

( 1 ) 掌握内核模块的组成部分。

( 2 ) 掌握内核模块的编译、安装与卸载方法。

( 3 ) 学会查看内核模块的信息。

三:实验任务:

编写一个内核模块module,向外导出两个函数,分别是“求累积和”和“求阶乘”功能。编写另两个内核模块module1、module2,分别使用上面module模块中的函数,实现计算。注意路径清晰,分别在三个目录下编写。

四:实验原理及方法:

Linux 内核模块( LKM )是一些在启动的操作系统内核需要时可以载入内核执行的代码块,不需要时由操作系统卸载。它们扩展了操作系统内核功能却不需要重新编译内核、启动系统。如果没有内核模块,就不得不反复编译生成操作系统的内核镜像来加入新功能,当附加的功能很多时,还会使内核变得臃肿。

一个 Linux 内核模块主要由以下几个部分组成:

(1) 模块加载函数 ( 必须 ) :当通过 insmod 或 modprobe 命令加载内核模块时,模块的 加(1) 模块加载函数 ( 必须 ) :当通过 insmod 或 modprobe 命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块相关初始化工作。

(2) 模块卸载函数(必须):当通过 rmmod 命令卸载模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能。

(3) 模块许可证声明(必须):模块许可证( LICENCE )声明描述内核模块的许可权限,如果不声明 LICENCE, 模块被加载时将收到内核被污染的警告。大多数情况下内核模块应遵循 GPL 兼容许可权。 L inux2.6内核模块最常见的是以MODULE_LICENSE( “ Dual BSD/GPL ” ) 语句声明模块采用 BSD/GPL 双 LICENSE 。

(4) 模块参数(可选):模块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量。

(5) 模块导出符号(可选):内核模块可以导出符号 (symbol, 对应于函数或变量 ) ,这样其他模块可以使用本模块中的变量或函数。

(6) 模块作者等信息声明(可选)。

一个内核模块至少包含两个函数,模块被加载时执行的初始化函数 init_module() 和模块被卸载时执行的结束函数 cleanup_module() 。在最新内核稳定版本 2.6 中,两个函数可以起任意的名字,通过宏module_init() 和 module_exit() 注册调用。

五:实验步骤:

1. 创建目录modparm,在modparm下创建module1和module2目录(同学也可以创建不同的目录,因为每个模块都有自己的Makefile文件,所以每个Makefile必须在不同的目录下)。在modparm存放modtest模块,在module1下存放module1模块,在module2下存放module2模块。

我的电脑上如下:

2,编写模块的源程序和其Makefile文件

(1)modtest.c的清单如下:

modtest.的Makefile如下:

(2)module1.c清单如下:

module1的Makefile如下:

(3) module2.c清单如下:

Module2的Makefile如下:

3 编译模块

(1)把生成modtest.ko模块时生成的Module.symvers放到module1文件夹中。这样编译module1时,符号信息就会自动链接进去了。

(2)分别执行make命令,编译modtest.c、module1.c、module2.c

c

4 安装模块

5查看模块lsmod

查看安装是否成功,下图中可看到module1和module2的使用者数量为0,而modtest被module1和module2使用,因此其使用者数量为2。

6 看模块输出信息

7 卸载模块rmmod.因为modtest被module1和module2使用,所以必须先卸载module1和module2,最后卸载modtest。

展开阅读全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mobi格式电子书_进阶能力 | 了解常见的电子书格式

静读君是初中开始接触电子书的,那个时候以为电子书就是TXT,到后来渐渐地接触到了PDF、DOC、CAJ 才知道原来电子书还分这么多的格式,那个时候还在想,为什么要弄这么多不同的格式呢?那不是自找麻烦吗?接触的…

python的pass在函数中的作用_Pass Share:Python / Julia 中函数变量的传递机制

从 C / MATLAB 过来的同学注意!Julia / Python 中使用的参数传递变量方式是不一样的。(以C的眼光看)在语法上细微的差别就会产生完全不一样的内容。(至少我被坑了很多次)。这篇文章的主要作用是逃坑以及方便各种从不同语言过来的人投奔我们Julia!/狗头变…

linux启动keepalived服务,llinux企业常用服务---HA+keepalived双机热备

部署前准备:iptables和selinux没配置,关掉挂载系统镜像作为本地yum源,修改yum文件源码包准备keepalived-1.2.13.tar.gz环境介绍:2台centos6.5虚拟机,主服务器ip:192.168.100.150;从服务器ip&…

python 日志不会按照日期分割_python 按照日期切分大日志文件(重点)和按照指定大小切分日志文件...

#! /usr/bin/env python # -*- coding:utf8 -*- # 切分nginx 按照日期切分日志文件 from __future__ import division import os,sys big_file‘/data/logs/media.net.error.log‘ # 按照文件大小拆分 def split_by_filesize(fromfile,todir,chunksize0): """ c…

c++ udp通信_Web 通信协议,你还需要知道:SPDY 和 QUIC

一、开拓者:SPDY1. 简介:spdy 是由google推行的,改进版本的HTTP1.1 (那时候还没有HTTP2)。它基于TCP协议,在HTTP的基础上,结合HTTP1.X的多个痛点进行改进和升级的产物。它的出现使web的加载速度有极大的提高。HTTP2也借…

linux退出windows域,删除Windows AD域控制器的三种方法

一、域控可以正常工作1、删除辅助域控:单击“开始”,单击“运行”,然后键入以下命令:dcpromo /forceremoval然后按提示操作。2、删除主域控:1)打开Active Directory 用户和计算机 ->Domain Controllers,右键点击所要…

查看 rabbitmq 启动websocket 提示404_RabbitMQ 部署记录

erlang与rabbitmq版本对应关系:https://www.rabbitmq.com/which-erlang.html安装erlang下载地址:http://www.erlang.org/downloads11.安装依赖 2yum install -y gcc gcc-c ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term…

react如何卸载组件_reactjs – 如何删除/卸载嵌套的反应组件

是的,你建议的解决方案render: function () {var home this.state.remove_home ? null : return ({home}),handleNavbarClick: function () {this.setState({remove_home: true});}或多或少是使用React处理此问题的“正确”方法.请记住,渲染的目的是描述组件在任何给定点上的…

linux远程windows执行cmd,Linux服务器远程连接window服务器并执行cmd命令

前段时间,要给一个分布式调度系统写一个运维脚本,这个分布式调度系统部分子系统部署在window服务器上,这个时候就要想办法用Linux远程来连接window服务器,并执行cmd命令。下面是我的解决方法:1、在Linux服务器上的处理…

python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...

这其实是一个编码规范的问题,没有任何场景都适用的解决方案,就好比有了 list,但是还是需要 tuple,所以对于抛出异常好,还是返回值好,是需要具体情况看的。 在 C 语言中,通用的做法是函数返回一个…

access中如何画斜线_设计斜线表头

。1.4.16 在表格顶端加空行要在表格顶端加一个非表格的空白行,可以使用“CtrlShiftEnter”组合键通过拆分表格来完成。但当你的表格位于文档的最顶端时,有一个更为简捷的方法,就是先把插入点移到表格的第一行的第一个单元格的最前面&#xff…

Linux安装Flash脚本,Linux(CentOS)下的Shockwave Flash shell一键更新脚本

原创内容,转载请注明出处: https://www.myzhenai.com.cn/post/2318.html https://www.myzhenai.com/thread-17933-1-1.html关键字: Shockwave Flash一键更新脚本 Flash一键更新脚本这个脚本其实是我自己用的, 我的系统里安装了FlashPlayer软件和火狐(firefox)浏览器里安装了Sho…

收文处理和发文处理的环节_集气罩的设计是气体净化、废气处理系统设计的重要环节...

在工业生产中,常用于控制各种颗粒物和气态污染物的方法是将有害物质在发生源收集起来,经过净化设备净化后排到大气中,这就是局部排气净化系统,这种系统所需要的风量最小,效果好,能耗也少,是生产…

linux磁盘管理不用LVM,[linux] LVM磁盘管理(针对xfs和ext4不同文件系统)

简单来说就是:PV:是物理的磁盘分区VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘LV:也就是从VG中划分的逻辑分区如下图所示PV、VG、LV三者关系&…

cad监控图标_干货!多种不同环境的无线视频监控系统拓扑图

有人问,既然无线视频监控系统如此普及,是不是所有地方都能用到无线视频监控设备呢?例如在大街上、学校里,工厂中、写字楼内,建筑工地上、公园中、住宅小区里、江河岸边、港口码头、甚至是森林、戈壁滩等等。只要有需要…

linux qt手册,明远智睿I.MX6 Linux-4.1.15 QT5 程序编译手册

明远智睿I.MX6 Linux-4.1.15 QT5 程序编译手册[复制链接]编译主机环境编译主机CPU架构:64位编译主机系统:LinuxLinux发行版:UbuntuUbuntu版本号:14.04.5Ubuntu版本类型:桌面版Ubuntu系统类型:x86-64安装 SD…

axios 获取上传进度_PHP获取HTTP body内容的方法总结

有时候我们获取数据时需要根据Header中的格式来解析,比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时…

python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你。 1、UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与…

hadoop集群swap_hadoop集群调优-OS和文件系统部分

OS and File System根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%。open file descriptors and files文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打…

python搭建selenium_自动化测试之路3-selenium3+python3环境搭建

1、首先安装火狐浏览器 有单独文章分享怎么安装 2、搭建python环境 安装python,安装的时候把path选好,就不用自己在配置,安装方法有单独文档分享 安装好以后cmd打开输入python查看是否配置好 3、安装pip 一般python会默认带一个,放…