linux内核添加模块,linux中添加内核模块

2023-10-31

1.  内核模块简介

Linux 内核的 整 体结构 非 常 庞 大 ,其 包 含 的 组 件也 非 常多 , 如 何使用 需 要 的 组 件 呢?

方 法 一 : 把 所有的 组 件都 编译 进 内核 文 件, 即 :zImage 或bzImage , 但 这样会 导 致 两 个 问 题 : 一是 生 成的 内核 文 件 过大 ;二 是 如果 要 添 加 或 删 除某 个 组 件, 需 要重 新 编译 整 个内核

方法二:使用内核模块, 内核 文 件(zImage 或bzImage) 本 身 并不 包 含 某 组 件 , 而 是 在该 组 件 需要 被 使用的 时 候 ,以模块的方式动 态地 添 加 到 正 在 运行 的内核中

2. 内核 模块 具 有 如下特 点 :

? 模块 本 身 并 不 被编译 进 内核 文 件( zImage 或者bzImage )

? 可以 根 据 需 求 , 在内核 运行 期 间 动 态 的安 装 或 卸 载

3. 范 例(hello world)

#include

#include

static int hello_init(void)

{

printk(KERN_WARNING"Hello, world !\n");

return 0;

}

static void hello_exit(void)

{

printk(KERN_INFO "Goodbye, world\n");

}

module_init(hello_init);

module_exit(hello_exit);

4. 程序结构说明

模块加载函数(必需):安 装 模块 时 被系统 自 动 调 用的 函 数 , 通 过module_init 宏 来指定,以上例子,指定的加载的函数就是hello_init

模块卸载函数(必须):卸 载 模块 时 被系统 自 动 调 用的 函 数 , 通 过module_exit 宏 来 指定 ,以上例子,指定的加载的函数就是hello_exit

5.pritk函数说明

printk函数和printf的函数实现的功能是一样的,只不过一个运行在内核态,一个运行在用户态。

用printk函数打印时候,内核会根据日志级别,可能把消息打印到当前的控制台上, 这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是:日志输出级别小于控制台日志级别(在内核中数字越小优先级越高)。如果没有指定打印级别,默认的基本是<4>,即是KERN_WARNING级别,其定制可以再/kernelprintk.c中找到。

日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):

#define KERN_EMERG      0

#define KERN_ALERT      1

#define KERN_CRIT       2

#define KERN_ERR        3

#define KERN_WARNING    4

#define KERN_NOTICE     5

#define KERN_INFO       6

#define KERN_DEBUG      7

通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别

#cat /proc/sys/kernel/printk

441

7

上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别

可以修改上面的数据修改控制台的打印级别

备注:ubuntu 图形化界面是无法打印到控制台的,printk打印的是控制台,也就是/dev/console,而图形界面中的终端,其实是把stdin,stdout,stderr三个文件重定向了一下。所以printk是无法再图形界面中的终端中显示的,当然可以再/var/log/syslog或者用dmesg查看。

6.  模块makefile编写,makefile名字必须命名为Makefile,否则编译通过不了,下面这个makefile会被编译两次,第一次KERNELRELEASE为空,去运行

KDIR下面的makefile,接着会重新调用自己的Makefile,编译成功,产生hello.o,hello.ko两个文件

ifneq ($(KERNELRELEASE),)

obj-m := hello.o//根据自己的模块修改

else

KDIR := /lib/modules/2.6.32-21-generic/build//根据自己lib/modules/下面自己内核版本库填写

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

7. 加载 模块insmod

insmod hello.ko

可以通过lsmod  | grep hello查看自己刚刚加载的内核模块

8. 卸载模块rmmod

rmmod hello

原文:http://blog.csdn.net/nanfenglei23/article/details/42294183

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核添加模块,linux中添加内核模块 的相关文章

  • 循序渐进地代码重构

    对于如何进行代码重构 一直有着很多种说法 很多人都认为应该将重构代码放在backlog里 但是其实 这并不是一个理想的方法 在项目刚刚开始的时候 你的代码很干净 即使有的时候需要小小的绕一下路 但是这个时候我们可以轻松 平稳的添加功能 这个
  • sql年月日的取值

    一个月第一天的SQL 脚本 SELECT DATEADD mm DATEDIFF mm 0 getdate 0 本周的星期一 SELECT DATEADD wk DATEDIFF wk 0 getdate 0 一年的第一天 SELECT D
  • 使用eclipse将项目达成war包并部署至服务器

    一 eclipse将ssm项目打成war包 1 右击要打war包的项目 选择Export 2 选中Web文件下的WAR file点击Next 3 点击Browse 选择打war包存放的地址 点击Finish开始打包 将打好的War包部署至服
  • 常用的几款抓包工具

    常用的几款抓包工具 标签 软件测试软件测试方法软件测试学习 原创来自于我们的微信公众号 软件测试大师 最近很多同学 说面试的时候被问道 有没有用过什么抓包工具 其实抓包工具并没有什么很难的工具 只要你知道你要用抓包是干嘛的 就知道该怎么用了
  • Pandas基础操作(上)

    文章目录 一 Pandas文件读取 1 pandas数据读取 1 读取纯文本文件 1 1 读取csv 使用默认的标题行 逗号分隔符 1 2 读取txt文件 自己指定分隔符 列名 2 读取excel文件 3 读取sql文件 二 pandas的
  • Centos7升级内核——图文详尽版

    Linux是一种开源电脑操作系统内核 它是一个用C语言写成 符合POSIX标准的类Unix操作系统 Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的 该计划开始于1991年
  • python函数之可变默认参数

    文章目录 问题剖析 元组的使用 一个 Python Bug 干倒了估值 1 6 亿美元的公司 今天在CSDN首页看到这篇文章 不仅感概 水能载舟 亦能覆舟 作为一家仰仗技术出身的公司 最终却因为技术的问题而断崖式地走向没落 实在令人唏嘘 技
  • 剑指offer 学习笔记 数组中数字出现的次数

    面试题56 数组中数字出现的次数 1 一个整型数组里除两个数字之外 其他数字都出现了两次 找出这两个只出现一次的数字 要求时间复杂度O n 空间复杂度O 1 先分析如果只有一个数字出现一次 而其他数字都出现了两次 我们就可以依次异或数组中的
  • nginx 安装

    1 下载Nginx依赖 wget http nginx org packages centos 7 noarch RPMS nginx release centos 7 0 el7 ngx noarch rpm 2 运行Nginx依赖包 运
  • ValueOperations<String, Object> ValueOperations = redisTemplate.opsForValue();中ValueOperations的所有方法详

    ValueOperations 是 RedisTemplate 提供的用于操作 Redis 缓存中值的接口 它定义了一系列可以使用的方法 以下是 ValueOperations 接口中的常用方法 void set K key V value
  • 制造业ERP采购数字化管理系统的搭建及SRM系统介绍

    在我国社会经济高速发展 科学技术日益进步过程中 各行各业的企业为了达到高效管理 效益提升的目的 在采购管理中充分应用ERP系统 本文主要基于制造业ERP的采购管理系统 同时结合ERP系统的延伸供应商管理系统 对采购系统流程中的采购询价 采购
  • 操作系统对CPU的虚拟化——进程的抽象、进程相关API以及进程的受限执行

    因为我们计算机的cpu处理器数量是有限的 但是操作系统理论上可以同时并发的运行无数个进程 那么cpu内部是如何实现的呢 操作系统是通过对CPU进行虚拟化来实现的 本篇博客主要讲述操作系统对CPU的虚拟化中的进程相关的知识 包括进程的抽象 进
  • 学生考试信息管理系统c语言程序,学生信息管理系统(c语言)

    include include include include define LEN sizeof STD typedef struct student charxh 12 学号 charxm 12 姓名 floatsxcj 数学成绩 fl
  • 记录下FMDB的简单使用

    软件开发中常用到数据库 而移动开发中sqlite3是最常用的 IOS早就支持了sqlite数据库 由于直接使用sqlite操作数据库不太方便 于是有了很多基于系统sqlite封装的第三方库 FMDB就是其中非常出色的一个 他使用起来灰常简单
  • The MRC database dictionary之IMAG库 (imagery 象性)

    beach 667 jeep 659 telephone 655 sunshine 655 skunk 652 cranberry 649 steak 647 father 646 cigarette 645 banana 644 sunl
  • MySQL innoDB底层基础原理总结

    MySQL innoDB底层基础原理 前言 由于正在准备之后的实习面试 故总结了一部分MYSQL innoDB基础的问题 回答全为自己组织的语言 若有错各位大佬可及时指出 大家共同进步 谢谢 1 innoDB索引实现原理 innoDB存储引
  • 第二十一章、文件服务器之三: FTP 服务器

    FTP File Transfer Protocol 可说是最古老的协议之一了 主要是用来进行档案的传输 尤其是大型档案的传输使用 FTP 更是方便 不过 值得注意的是 使用 FTP 来传输时 其实是具有一定程度的 危险性 因为数据在因特网
  • 你可以简单的设计一下上面的订单管理系统吗

    当然可以 首先 订单管理系统通常包含以下几个主要功能 订单录入 用户可以在系统中输入新的订单信息 包括订单编号 订购商品的种类 数量 单价 总价等信息 订单查询 用户可以根据订单编号 商品名称 日期等信息查询订单 订单修改 用户可以修改已经
  • 编程网站:21 个学习网站推荐给你,大部分编程语言都在这里了

    本文精选了21个有关代码 编程 Java Python SQL Git 和Ruby on Rails学习的网站 这些网站为以下内容的学习提供了免费的优质资源 编程语言 Python和Java等 常用技术 SQL等 操作系统 Linux等 W

随机推荐

  • 编译器中和64位编程有关的预定义宏

    版权声明 本文为博主原创文章 未经博主允许不得转载 本文对分别测试VC MinGW GCC 三种编译器 32位和64位模式 共6种情况下 和64位编程有关的与预定义宏的值 对跨平台编程具有参考意义 Agner Fog 在他的 Calling
  • MyBatis学习(三)-- 实现关联查询

    文章目录 1 实现关联查询 1 1 创建教师表 1 2 创建班级表 1 3 创建学生表 2 创建与数据库表对应的实体类 2 1 创建教师实体类 2 2 创建学生实体类 2 3 创建班级实体类 3 创建班级映射器配置文件 4 修改配置文件 5
  • 【Linux初阶】Linux环境下的 git 使用

    hello 各位读者大大们你们好呀 系列专栏 Linux初阶 本篇内容 详细阐述git是什么 git的发展脉络 还有Linux环境下git工具的具体使用方法 作者简介 计算机海洋的新进船长一枚 请多多指教 目录 一 git是什么 二 git
  • 模块1--BH1750的应用(IIC)

    1 BH1750基本原理讲解 BH1750作为一款数字化的光照传感器 采用的是IIC接口 本篇文章主要是侧重BH1750的应用 关于IIC总线的时序原理 请大家自行学习 数字化的传感器 简单点理解即只要通信接口配置正确 即可读出数据 内部集
  • 微服务架构中不同微服务之间的接口调用

    假定系统管理微服务的实例名称为system 在系统管理中查询码表 api system codeTable queryDataDictionaryByDicCode 在自己的微服务中调用系统管理的查询码表接口写法如下 DataDiction
  • 初识OpenGL (-)VAO&VBO

    如何填充VBO 配置顶点属性指针以及如何把它们都储存到一个VAO里 step1 把颜色数据加进顶点数据中 eg 把颜色数据添加为3个float值至vertices数组 把三角形的三个角分别指定为红色 绿色和蓝色 float vertices
  • 批处理框架

    什么是批处理 在现代企业应用当中 面对复杂的业务以及海量的数据 除了通过庞杂的人机交互界面进行各种处理外 还有一类工作 不需要人工干预 只需要定期读入大批量数据 然后完成相应业务处理并进行归档 这类工作即为 批处理 为什么使用Spring
  • 数据分析和数据挖掘概述

    1 含义 数据挖掘 指从大量的数据中 通过统计学 人工智能 机器学习等方法 挖掘出未知的 且有价值的信息和知识的过程 数据分析 可分为广义的数据分析和狭义的数据分析 广义的数据分析就是包括狭义的数据分析和数据挖掘 而我们常说的数据分析指的是
  • 交叉编译工具的使用说明

    写在前面的话 由于已经学习了JZ2440V3开发板的裸机程序 想检验下学习成果 所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验 裸机部分学习到把uboot移植完成就结束 然后 学习内核的驱动和其他子系统框架 言归正传 现
  • 阿里面试官:接口的幂等性怎么设计?

    一 什么是幂等 看一下维基百科怎么说的 幂等性 多次调用方法或者接口不会改变业务状态 可以保证重复调用的结果和单次调用的结果一致 二 使用幂等的场景 1 前端重复提交 用户注册 用户创建商品等操作 前端都会提交一些数据给后台服务 后台需要根
  • linux shell 正则表达式(BREs,EREs,PREs)差异比较

    http www cnblogs com chengmo archive 2010 10 10 1847287 html 正则表达式 在计算机科学中 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串 在很多文本编辑器或其他
  • 笛卡尔树建树

    拿个单调队列维护 最后pop出来的就是它的左儿子 现在还在的 它是他的右儿子 int build int S N for int i 1 i lt n i while top T S top val lt T i val T i son 0
  • Markdown中显示矩阵运算过程

    发现这个神奇的用法 以后写博客就可以很好的演示矩阵乘法了 原文知乎 这里再分享一个可以把latex转成图片的在线网站quicklatex markdown 显示矩阵 from IPython display import display L
  • mysql锁总结

    参考文章 MySQL 死锁查询 事务与锁详解2 MySQL死锁系列 常见加锁场景分析 死锁的成因 场景以及死锁的避免 查询锁sql 1 查看当前的事务 SELECT FROM INFORMATION SCHEMA INNODB TRX 2
  • 解决centos下sudo运行tshark,写入文件显示:Permission denied.

    在 w时 需要把文件名写全 相对路径无权限 则需要写成绝对路径 比如 sudo tshark w home xxxx mypcap pcap 下面的不行 sudo tshark w mypcap pcap Permission denied
  • 走线和交互式布线_画PCB时,一些非常好的布线技巧

    画PCB时 一些非常好的布线技巧 布线是PCB设计过程中技巧最细 限定最高的 即使布了十几年布线的工程师也往往觉得自己不会布线 因为看到了形形色色的问题 知道了这根线布了出去就会导致什么恶果 所以 就变的不知道怎么布了 但是高手还是有的 他
  • spring cloud 2021.0.1升级踩坑记录

    一 版本说明 升级前的版本 spring boot 2 2 2 RELEASE spring cloud Hoxton SR1 spring cloud alibaba 2 2 0 RELEASE 升级后版本 spring boot 2 6
  • linux测试代码段运行时间,如何精确测量一段代码的执行时间

    原标题 如何精确测量一段代码的执行时间 本文转载自西邮Linux兴趣小组 最近在工作中遇到了需要精确测量一段C代码执行时间的需求 这里有三种方案供大家选择 1 gettimeofday 2 2 rdtsc rdtscp 3 clock ge
  • 工程师的自我修养:全英文技术学习实践

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 引子 2016年9月 上海GOPS大会现场 Site Reliability Engineering 一书的作者之一 来自Google的Chris Jones在做分享 Ch
  • linux内核添加模块,linux中添加内核模块

    1 内核模块简介 Linux 内核的 整 体结构 非 常 庞 大 其 包 含 的 组 件也 非 常多 如 何使用 需 要 的 组 件 呢 方 法 一 把 所有的 组 件都 编译 进 内核 文 件 即 zImage 或bzImage 但 这样