首页 > 其他 > 详细

模块的插入和删除

时间:2021-05-16 01:13:19      阅读:16      评论:0      收藏:0      [点我收藏+]

模块的插入和删除

/: 根目录

~: 家目录,即用户的个人目录。root用户的家目录是/root,普通用户enso的家目录是/home/enso

/proc: 虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态

1. 创建文件夹

$ mkdir Mooc
$ cd Mooc

2. 编辑helloworld和Makefile

2.1 helloworld.c

vim helloworld.c
#include <linux/init.h>    //模块的初始化的宏定义 以及一些其他函数的初始化函数
#include <linux/kernel.h>  //包含了printk函数
#include <linux/module.h>  //动态的将模块加载到内核中去

static int __init lkm_init(void)
{
        printk("Hello World\n");	//内核中printf不能使用,此处的k表示kernel
        return 0;
}

static void __exit lkm_exit(void)
{
        printk("Goodbye\n");
}

module_init(lkm_init);	//模块的初始化
module_exit(lkm_exit);	//模块初退出

MODULE_LICENSE("GPL");    //GPL许可证

__init:宏定义,告诉编译器相关函数或变量仅用于初始化并将标有__init的所有代码放在特殊的内存段中,在初始化结束后就释放这段内存。

2.2Makefile

vim Makefile	#注意M大写
obj-m:=helloworld.o	#生成.o文件

CURRENT_PATH:=$(shell pwd)	#当前地址
LINUX_KERNEL:=$(shell uname -r)	#内核版本号
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL) #内核地址
# 当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续 读入、执行当前的Makefile
all:
        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules

clean:
        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

3. 编译

$ make
$ ls

技术分享图片

但是此时没有打印hellowrold。

lsmod:查看模块

以下两条命令需要在root权限下执行

插入内核模块

sudo insmod helloworld.ko #此处需要后缀

技术分享图片

? 此处有helloworld说明该模块已经插进内核。

dmesg:打印系统日志信息

技术分享图片

删除内核模块

sudo rmmod hellworld #此时不需要后缀

技术分享图片

技术分享图片

模块的插入和删除

原文:https://www.cnblogs.com/Ricardio/p/14772461.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!