Linux内核模块编程

(作者:Baron_wu 禁止转载)
首先,创建一个内核模块并插入Linux内核中。这是实验第一部分
首先查看当前内核模块使用情概况:lsmod

Module:模块名
Size:模块大小
Used by:这些模块在哪被使用
接下来编写一个simple.c的程序,当加载和卸载内核模块时给出适当的消息。
代码如下:

 #include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>/* This function is called when the module is loaded. */
int simple_init(void)
{printk(KERN_INFO "Loading Module\n");return 0;
}/* This function is called when the module is removed. */
void simple_exit(void) {printk(KERN_INFO "Removing Module\n");
}/* Macros for registering module entry and exit points. */
module_init( simple_init );
module_exit( simple_exit );MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");

Simple_list (模块入口点) 返回0代表成功 其他值代表失败
Simple_exit(模块退出点) 无返回值
两个函数都没有参数
接下来两个宏指令是注册模块的入口与出口
Module_init()
Module_exit()

printk()

注意入口点与出口点是如何调用系统函数printk的。Printk()是内核对应的printf(),输出传给内核加载模块,通过使用命令dmesg来查看他的内容。Printk()允许指定优先级标志。它的值在包含文件<linux/printk.h>中给出。
在这个实例中KERN_INFO是优先的。它就像被定义的一个信号消息。
最后三行属于软件许可信息,是内核模块开发的标准格式。
Simple.c用Makefile这个文件来进行编译。在终端输入make进行编译。

Makefile文件内容

obj-m += simple.o
all:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

编译后将会生成多个文件, 文件simple.ko代表编译后生成的内核模块。
首先在含有simple.c 和Makefile的文件目录下执行make命令(我的这两个文件在桌面上)

之后将会生成许多文件如下所示:

== Simple.ko是生成的内核模块 ==
接下来便是加载和移除内核模块的演示了。
首先在之前生成的编译模块的目录中执行命令:sudo insmod simple.ko 来加载内核模块

紧接着输入dmesg来查看当前内核加载情况。

在最后一行可以看到加载成功的消息。
**之后要进行的便是移除内核模块的操作。**在终端输入命令:sudo rmmod simple

接着查看是否移除成功。输入命令:dmesg

可以看到已经成功移除。
因为内核记录很快就会填满 所以定期清除缓冲区是有必要的。
执行命令:sudo dmesg -c
到此,Linux内核模块编程第一部分结束。

Linux内核模块编程相关推荐

  1. Linux内核模块编程系列1-极简内核模块编写

    1.准备工作 使用如下命令查看自己Linux的内核版本 uname -a 结果如下: Linux VM-73-203-debian 4.9.0-6-amd64 #1 SMP Debian 4.9.88 ...

  2. Linux内核模块编程指南(一)(转)

    Linux内核模块编程指南(一)(转) 当第一个原始的程序员在最开始的窑洞计算机之墙上凿过第一个程序时,那是一个在羚羊图案上画上"Hello, world"的程序.罗马人的编程书籍 ...

  3. 关于linux内核模块编程时,多个源代码文件Makefile书写的问题

    本文转自:https://blog.csdn.net/u010560290/article/details/44647683 在学习内核模块编程的时候遇到了一些由于Makefile书写不正确导致的问题 ...

  4. 杭电操作系统实验二 --- Linux 内核模块编程(arm架构华为云)

    一.题目介绍 掌握Linux 内核模块的基本概念 ·阅读教材7.3.2节Linux内核模块简介 ,网上查找资料,了解Linux内核模块的基本概念. ·阅读教材7.3.3内核模块编程基础 ,网上查找资料 ...

  5. Linux内核模块编程入门

    针对2.6内核的Linux系统,需要你的机器上已经安装了kernel-devel这个包,也就是编译模块所必须的东西:内核的头文件和一些Makefile. 一,Hello World程序: [code: ...

  6. linux内核模块编写,Linux内核模块编程

    1 总体设计思路 Linux内核是单体式结构,相对于微内核结构而言,其运行效率高,但是系统的可维护性和可扩展性较差.为此,Linux提供了内核模块(module)机制,它不仅可以弥补单体式内核相对于微 ...

  7. 杭电(杭州电子科技大学)操作系统实验二:Linux内核模块编程

    实验内容 (1)设计一个模块,要求列出系统中所有内核线程的程序名.PID.进程状态.进程优先级.父进程的PID. (2)设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是列出该进程的家族信 ...

  8. linux内核模块编程(六)----字符设备驱动中断开发

    先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题 一 why 字符设备驱动在我们 ...

  9. 操作系统实验:Linux内核模块编程

    实验内容 (1)设计一个模块,要求列出系统中所有内核线程的程序名.PID.进程状态.进程优先级.父进程的PID. (2)设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是列出该进程的家族信 ...

  10. linux 内核模块 编写例子,LINUX内核模块编程8

    Chapter 8. System Calls 系统调用 到目前为止,我们所做的只是使用完善的内核机制注册/proc文件和处理设备的对象.如果只是想写一个设备驱动, 这些内核程序员设定的方式已经足够了 ...

最新文章

  1. 播放失败246106异常代码_web前端面试题:您能读懂的Promise源码实现(手写代码)...
  2. Go基础系列:构建go程序
  3. java小编程----电话号码组合
  4. 数组转json去除首尾引号_诞生于JavaScript,json的前世今生
  5. socket 编程入门教程(一)TCP server 端:3、sockaddr与sockaddr_in
  6. SQL安装文件挂起解决方法
  7. SQL 使用总结六(改善数据库性能)
  8. ElasticSearch索引的基本操作命令
  9. C++ new与delete的使用规范
  10. Go 性能优化技巧 7/10
  11. 基于netty实现socketio的聊天室
  12. 空降的主管要如何生存?
  13. H3C S5820V2 MSR36-20
  14. C#配置文件操作】程序配置文件App.Config操作
  15. 吉他技巧—如何推算和记忆和弦
  16. AndroidStudio运行模拟器--夜神
  17. DIY信号发生器:运放实现三角波、方波发生器(详细参数说明)+multisim仿真
  18. 安装完华为的opengauss 后,能ping通服务地址,telnet不通端口
  19. VB实现BMP图像文件的读取、显示与存储
  20. VS一行代码解决C++错误代码4096

热门文章

  1. 渐开线曲线方程c语言,proe常用曲线方程大全
  2. Camera2 camera i2c总线协议介绍
  3. 孝敬老人用 盐城 淮剧视频 淮剧 王樵楼磨豆腐
  4. Flash Builder4.7 破解方法
  5. 在iPhone任何界面截图完整图文教程
  6. iPhone手机硬件拆解介绍
  7. MODSCAN32的应用
  8. PostgreSQ 存储过程 和 存储函数的区别
  9. 虚拟机VMware安装学习过程中遇到的几个问题
  10. 线性代数导论20——克莱姆法则、逆矩阵、体积