编译安装linux内核模块
2015-06-09 20:24
218 查看
linux提供了module机制,能够动态的加载内核模块,毕设中用到模块机制的主要原因是,因为更改代码可能会比较频繁,如果直接更改内核代码,编译内核,比较麻烦;而使用模块机制可以方便的实现模块的加载,对代码进行测试。
以下只是一个简单的demo,方便理解模块机制的原理:
编写模块代码(helloworld.c):
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
int hello_init(void)
{
printk("Module init: helloworld!\n");
return 0;
}
void hello_exit(void)
{
printk("Module exit: Goodbye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
然后编写helloworld.c的Makefile文件如下:
obj-m += helloworld.o
KERNEL_VERSION = /lib/modules/$(shell uname-r)/build/
all:
make-C $(KERNEL_VERSION) M=$(PWD) modules
clean:
make-C $(KERNEL_VERSION) M=$(PWD) clean
注释:Makefile文件中,obj-m += 后面的文件名字与编写好的模块文件同名的.o文件;其次,KERNEL_VERSION=内核源码的一个映射(其实就是内核源代码),在最底层的build目录中存放了内核源码的一个映射;all和clean中都要使用make –C命令进行,切记。
进入到当前目录,即helloworld.c文件和Makefile文件的目录下,输入make进行编译:
此时,编译成功,会在当前目录下生成一下和helloworld以及modules同名的文件,暂且不去深究他们的意思,只要找到一个helloworld.ko以.ko为后缀的文件就可以了。进行下一步,安装模块àinsmod 命令,如下:
[root@localhost module_test]# sudo insmodhelloworld.ko
为了验证模块是不是成功运行在了内核之中,可以对内核中运行的模块进行查看-->lsmod命令:
可以看到,第一个模块就是我们编译并运行成功的helloworld;只不过,我们在模块之中有打印信息的,现在没有看到。没关系,可以运行以下命令来看到原来代码中的打印信息,如下:
当然,我们编译安装了的模块也可以从内核中卸载掉,卸载的命令即是:rmmod,只是卸载模块的时候,rmmod后面跟的是模块名字,而不再和安装模块时候一样的.ko文件;而且,也可以用dmesg命令进行log的信息打印:
以下只是一个简单的demo,方便理解模块机制的原理:
编写模块代码(helloworld.c):
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
int hello_init(void)
{
printk("Module init: helloworld!\n");
return 0;
}
void hello_exit(void)
{
printk("Module exit: Goodbye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
然后编写helloworld.c的Makefile文件如下:
obj-m += helloworld.o
KERNEL_VERSION = /lib/modules/$(shell uname-r)/build/
all:
make-C $(KERNEL_VERSION) M=$(PWD) modules
clean:
make-C $(KERNEL_VERSION) M=$(PWD) clean
注释:Makefile文件中,obj-m += 后面的文件名字与编写好的模块文件同名的.o文件;其次,KERNEL_VERSION=内核源码的一个映射(其实就是内核源代码),在最底层的build目录中存放了内核源码的一个映射;all和clean中都要使用make –C命令进行,切记。
进入到当前目录,即helloworld.c文件和Makefile文件的目录下,输入make进行编译:
此时,编译成功,会在当前目录下生成一下和helloworld以及modules同名的文件,暂且不去深究他们的意思,只要找到一个helloworld.ko以.ko为后缀的文件就可以了。进行下一步,安装模块àinsmod 命令,如下:
[root@localhost module_test]# sudo insmodhelloworld.ko
为了验证模块是不是成功运行在了内核之中,可以对内核中运行的模块进行查看-->lsmod命令:
可以看到,第一个模块就是我们编译并运行成功的helloworld;只不过,我们在模块之中有打印信息的,现在没有看到。没关系,可以运行以下命令来看到原来代码中的打印信息,如下:
当然,我们编译安装了的模块也可以从内核中卸载掉,卸载的命令即是:rmmod,只是卸载模块的时候,rmmod后面跟的是模块名字,而不再和安装模块时候一样的.ko文件;而且,也可以用dmesg命令进行log的信息打印:
相关文章推荐
- linux命令总结(三)
- linux命令总结(二)
- 安装rlwrap for linux
- Linux 内核调试之 printk
- [Linux] git send-email的使用
- Linux 性能监控、测试、优化工具
- linux下date命令及系统时间设置
- Linux-EXT2文件系统
- 【Linux】 MySQL
- Linux学习记录--匿名沟通渠道
- 在Ubuntu Linux下怎样安装QQ
- 一张图记住常用 Linux 系统性能诊断工具
- 关于Linux的总结(三)
- linux 平台性能分析工具
- Linux inotify功能及实现原理
- Linux——RPM包管理
- linux(CentOS) 下安装java运行环境及输出Hello World
- Linux安全之SYN攻击原理及处理
- (2)LinuxI2C驱动--I2C总线
- 01 Linux入门介绍