第1章简介

什么是内核模块?

所以,你想编写一个内核模块。 你知道C,你已经编写了一些正常的程序作为进程运行,现在你想要到达实际操作的位置,一个狂野指针可以消灭你的文件系统,核心转储意味着重启。

什么是内核模块? 模块是可以根据需要加载和卸载到内核中的代码片段。 它们扩展了内核的功能,而无需重启系统。 例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。 没有模块,我们必须构建单片内核并将新功能直接添加到内核映像中。 除了拥有更大的内核之外,这还有一个缺点,即每次我们想要新功能时都需要我们重建和重启内核。

模块如何进入内核?

您可以通过运行lsmod来查看已经加载到内核中的模块, lsmod通过读取文件/proc/modules来获取其信息。

这些模块如何进入内核? 当内核需要一个不驻留在内核中的特性时,内核模块守护进程kmod [1]执行modprobe来加载模块.modprobe以两种形式之一传递一个字符串:

linux系统整体结构分三个部分

  • linux内核模块编程入门()

这里的printk就是print kernal,意思是输出到内核,输出到日志文件

当模块插入执行初始化lkp__init()函数

当模块卸载执行退出函数lkp__exit()

//任何模块都要包含的三个头文件
#include <linux/module.h>    //(module<n>模块; 功能块)包含了对模块的版本控制
#include <linux/kernel.h>    //包含了常用的内核函数
#include <linux/init.h>    //包含了宏__init(告诉编译程序仅初始化的函数和变量)和__exit()
/*模块的初始化函数lkp_init()__init是用于初始化的修饰符
*/
static int __init lkp_init(void)    //加载函数的入口函数 相当于 main(void)
{printk("<1>Hello,world!from the kernel space...\n");//Linux内核下内核编程不能使用c的库
}
/*   模块的退出和清理函数lkp_exit()    //入口相对的出口
*/
static void __exit lkp(void)
{printk("<1>Goodbye,world!leaving kernel space...\n");
}
/*调用函数
*/
module_init(lkp_init);
module_exit(lkp_exit);
/*模块的许可证声明GPL
*/
MODULE_LICENSE("GPL");
  • 内核模块的Makefile文件

编译内核模块

内核模块的编译需要与常规用户空间应用程序略有不同。 以前的内核版本要求我们关注这些设置,这些设置通常存储在Makefile中。 虽然按层次结构组织,但许多冗余设置在次级Makefile中累积并使它们变大并且难以维护。 幸运的是,有一种新方法可以做这些事情,称为kbuild,外部可加载模块的构建过程现在完全集成到标准内核构建机制中。 要了解有关如何编译不属于官方内核的模块的更多信息(例如本指南中的所有示例),请参阅文件linux / Documentation / kbuild / modules.txt 。

那么,让我们看一个简单的Makefile来编译一个名为hello-1.c的模块:

obj-m += hello-1.oall:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

核心思想:告诉哪个头文件放在哪些地方

在这个文件里定义了三个变量

1. 路径的变量

2.内核版本号变量

3.内核源代码所在路径变量

  • 内核模块插入到内核里

超级用户的权限插入

#insmod + 模块名.ko

Linux内核模块编程入门( 最简单的内核模块编程)相关推荐

  1. python单片机编程入门先学什么_编程入门必看:带你零基础了解编程和编程语言,入门应该学什么?...

    编程入门 什么是编程 我们通过有固定格式和固定词汇的"语言"来控制他人,让他人为我们做事情.语言有很多种,包括汉语.英语.法语.韩语等,虽然他们的词汇和格式都不一样,但是可以达到同 ...

  2. python语言编程入门先学什么-自学编程入门,先学什么语言好?

    强烈推荐Python.其实这个问题在入门阶段一直是争议十分大的问题,n多语言,n多推荐,到最后搞到新手一会听说这种语言适合新手,于是学习这种语言,一会又有人说xx语言是垃圾.弱爆了,学了也没用,之类的 ...

  3. BIO,Socket网络编程入门代码示例,NIO网络编程入门代码示例,AIO 网络编程

    BIO,Socket网络编程入门代码示例 1.BIO服务器端程序 package cn.itcast.bio;import java.io.InputStream; import java.io.Ou ...

  4. python编程入门经典-总算理解python编程入门经典教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  5. python机械编程入门先学什么_编程入门先学什么

    很多同学在后台问我,编程入门学什么? 关于这个问题真不是一两句话就可以解释清楚的,所以,我写这篇文章. 希望准备学习编程的朋友能有所收获. 1.学什么好呢? 其实做这个还是挺害怕的 因为我在朋友圈发问 ...

  6. 黑马程序员 python快速编程入门课后答案_Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

  7. python编程入门到实践pdf,python编程入门课 视频

    初学者学Python编程如何快速入门? 谷歌人工智能写作项目:小发猫 初学python入门都需要具备那些条件? Python相对比较简单,零基础也能学typescript在npm安装后检测不到.系统学 ...

  8. Windows网络编程入门:简单的客户端和服务器通信程序调试

    昨日入手Windows网络编程经络这本书,第一章给了Echo客户端和服务器的简单通信实例程序.从小白到入门目测都是比较苦逼,居然想不到怎么来测试结果.什么同时运行啊.分别编译运行啊乱七八糟的想法就开始 ...

  9. python简单游戏编程入门_[翻译]Python游戏编程入门

    自己学习翻译,原文链接. 此文为Tutorial Team成员 Julian Meyer, 一个13岁的Python开发者所写. 你可以去Google+或者Twitter找到他. 你有没有想过,一个计 ...

  10. python快速编程入门课后简答题答案-编程python入门 编程python入门课后习题

    编程python入门 编程python入门课后习题 米粒妈咪课堂小编整理了填空.选择.判断等一些课后习题答案,供大家参考学习. 第一章 一.填空题 Python是一种面向对象的高级语言. Python ...

最新文章

  1. Nagios监控部署(四)--被监控主机配置
  2. shell-awk常见用法
  3. 人生中最【无用】的二十件事
  4. (王道408考研数据结构)第三章栈和队列-第三节2:栈的应用之递归
  5. 无连接可靠传输_计算机网络-网络层和传输层
  6. 民商法领域的论文选题求推荐?
  7. ocr证件护照识别器,阅读器,扫描仪
  8. 蜗牛学院:中国人,努力获得了荣誉却要压抑克制
  9. 微信支付分 - 取消支付分API
  10. Cesium加载建筑物模型(shp转Geojson\3Dtiles)
  11. 【Free5GC】test.sh脚本测试流程
  12. clickonce程序部署后,启动不成功的问题
  13. 芬兰政府:要找到量子计算工业化的好时机
  14. Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做
  15. Z-score 和 标准正态分布的关系
  16. 测绘资质在线处理资质问题
  17. CF 711C Coloring Trees(三维dp)
  18. java程序员面试宝典(刘磊版)笔记
  19. Science: 重新“野化“ 植物微生物组
  20. 全国各IT领军城市软件和服务外包Q群

热门文章

  1. AI实现五子棋机器人(一)
  2. 刀剑乱舞网页版选不了服务器,《刀剑乱舞》不魔法进入游戏方法
  3. jedate日期插件使用
  4. fir.im分发平台 二维码合并
  5. C语言实现“轰炸”代码(QQ)
  6. 企业级业务架构设计理论与方法
  7. 在网站中使用谷歌“ROBOTO”字体(解决ios数字1和0大小不等宽问题)
  8. java简历专业技能,附详细答案解析
  9. Stata | 初试
  10. BT656与BT1120的区别