凡客网能直接做网站,足球比赛直播app,网页设计与网站建设全攻略pdf,重庆搜索引擎推广公司说明
本文记录如何创建和编译一个内核模块#xff0c;以及加载和卸载内核模块。为《操作系统概念(第九版)》第二章#xff0c;关于“Linux内核模块”的练习题。 创建内核模块
注#xff1a;我这里是基于阿里云的轻量应用服务器#xff08;即当前博客服务器#xff09; 首…说明
本文记录如何创建和编译一个内核模块以及加载和卸载内核模块。为《操作系统概念(第九版)》第二章关于“Linux内核模块”的练习题。 创建内核模块
注我这里是基于阿里云的轻量应用服务器即当前博客服务器 首先SSH进入到自己的服务器然后新建一个“kernel”目录用于存放模块相关的文件 然后新建一个“example.c”文件并将下面的代码复制到文件中
vim example.cexample.c的具体内容如下
#include linux/init.h
#include linux/kernel.h
#include linux/module.h/* This function is called when the module is loaded. */
int example_init(void)
{printk(KERN_INFO Loading example module\n);return 0;
}/* This function is called when the module is removed. */
void example_exit(void)
{printk(KERN_INFO Removing example module\n);
}/* Macros for registering module entry and exit points */
module_init(example_init);
module_exit(example_exit);/* 许可描述和作者信息 */
MODULE_LICENSE(GPL);
MODULE_DESCRIPTION(EXAMPLE MODULE);
MODULE_AUTHOR(GENE);创建编译文件Makefile
创建一个文件“Mkefile”然后文件具体内容如下
KVERS $(shell uname -r)# 生成模块名和上面一步创建的C文件名称对应
MODULE_NAME : example# 源文件目录因为我的Makefile文件与C文件在同目录所以这里值为空
SRC_PATH :# 作为一个模块进行编译作为一个模块进行编译时值为m
CONFIG_RUNYEE_CAMVIBm# Kernel modules
obj-$(CONFIG_RUNYEE_CAMVIB) : $(SRC_PATH)$(MODULE_NAME).o# 指定模块的一些编译选项
EXTRA_CFLAGS-g -O0build: kernel_modules
kernel_modules:make -C /lib/modules/$(KVERS)/build SUBDIRS$(CURDIR) modules
clean:make -C /lib/modules/$(KVERS)/build SUBDIRS$(CURDIR) clean编译内核模块
执行make命令然后可以得到一系列编译后的文件其中“example.ko”即为编译后的内核模块
make加载和卸载内核模块
在加载内核模块之前可以输入“lsmod”命令查看当前已经加载的内核模块
lsmod加载内核模块
insmod example.ko加载完成之后可以查看已加载的内核模块也可以输入“dmesg”命令查看打印到内核日志缓冲区的消息
dmesg最后可以卸载内核模块
rmmod example