linux内核添加模块,linux中添加内核模块
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
linux内核添加模块,linux中添加内核模块相关推荐
- Linux内核LED模块分析(二)
Linux内核LED模块分析(二) 上次分析到那里后,还是有些同志说看不懂,那我就继续分析一把我认为不需要继续分析的东西吧.上回分析了 led_cdev和trigger的关系后就没有继续说了.有同志还 ...
- 【Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )
文章目录 一.安装内核模块 二.安装内核 三.重启系统 四.查看当前内核版本 一.安装内核模块 确保 Linux 内核编译完成 , 没有任何报错之后 ; 参考 [Linux 内核]编译 Linux 内 ...
- 编译linux内核成vmlinuz,Linux内核编译与安装
原标题:Linux内核编译与安装 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统,内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.Linux内核的一 ...
- 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )
文章目录 一.下载 Linux 内核 1.下载最新版本 Linux 内核 2.下载指定版本 Linux 内核 二.Linux 内核版本号含义 一.下载 Linux 内核 1.下载最新版本 Linux ...
- 编译3.0的linux内核,1-3-编译Linux内核
1-3-编译Linux内核 1.将Linux源码包拷贝到共享文件夹. 2.进入共享文件夹. 3.解压,命令#tar xvfj Kernel_3.0.8_TQ210_for_Linux_v2.2.tar ...
- linux内核精髓:精通linux内核必会的75个绝技,Linux内核精髓精通Linux内核必会的75个绝技 PDF 高清扫描版...
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远.随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大 ...
- linux内核基本模型,Linux设备模型(1)_基本概念
Linux设备模型(1)_基本概念 作者:wowo 发布于:2014-2-27 17:01 分类:统一设备模型 1. 前言 在"Linux内核的整体架构"中,蜗蜗有提到,由于Lin ...
- linux内核 can总线,Linux Canbus调试笔记
http://blog.csdn.net/flydream0/article/details/8161418 CAN总线在嵌入式Linux下驱动程序的实现 http://www.21ic.com/ap ...
- 手机linux内核版本了解,Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装
这里不只是讲怎样编译.安装Linux内核的,更主要的是介绍内核的编译系统和各个重要的文件.最后还利用学到的编译.安装Linux内核去修改Linux的01调度变成随机调度.如果你只是需要编译.安装内核的 ...
最新文章
- php smarty关闭缓存,php+Smarty的缓存操作
- jop怎么读音英语怎么说_“秀恩爱”英语怎么说?可不是“show love”
- 【跃迁之路】【535天】程序员高效学习方法论探索系列(实验阶段292-2018.07.25)...
- CentOS 初体验一:VMWare 安装 CentOS
- Android获取当前位置的三种方式及其使用方法
- 论文小综 | Using External Knowledge on VQA
- python非贪婪匹配_Python中关于正则表达式非贪婪以及多行匹配功能详解
- 搜狐视频怎么开启自动连播
- 信息学奥赛C++语言: 商品排序
- 西部数码虚拟服务器备案,虚拟主机备案才能使用吗
- 贪婪模式与非贪婪模式
- SQL对字符串进行排序
- sql 触发器嵌套条件_SQL Server中的嵌套触发器
- 互联网金融的前世、今生和未来-系列三(今生):一场跨界的战争
- 6 rethad 自定义硬盘_Windows10必备6款优质软件,每个都是神器
- linux的adsl拨号上网,详细讲解Linux系统下ADSL拨号上网的方法
- ACM常用算法模版(常用函数与STL、重要公式与定理)
- 重定向--Linux bash
- 「运维有小邓」ADAudit Plus(AD域审计工具)的主要优势?
- GrabCut图像分割