浅析书写内核模块

模块是什么?

引用《linux内核设计与实现》的话。
尽管Linux是“单独内核”的操作系统——这是说整个系统内核都运行于一个单独的保护域中,但是Linux内核是模块化组成 ,它允许内核在运行时动态地向其中插入或从中删除代码。这些代码(包括相关的子例程、数据、函数入口和函数出口)被一并组合在一个单独的二进制镜像中,即所谓的可装载内核模块中,或简称模块

书写内核hello module模块
目的:在内核/linux-2.6.36.2/drivers/目录下创建一个test文件夹,里面添加hello module模块

以下为需要添加的内容

第一步:

drivers/Makefile
添加:

obj-$(CONFIG_TEST) += test/

编译包含test目录
CONFIG_TEST为m表示编译为模块,y表示编译到内核,否则不编译

drivers/Kconfig

source "drivers/test/Kconfig"

将test下的Kconfig包含,当make menuconfig时可以设置TEST_MODEL选项

第二步:

mkdir drivers/test/
touch Kconfig Makefile test.c

test.c内容

#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/module.h>
static int __init hello_init(void)
{
    printk("Hello module!\n");
    return 0;
}

static void __exit hello_cleanup(void)
{
    printk("Exit module!\n");
}

module_init(hello_init);
module_exit(hello_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("W.xy");
MODULE_DESCRIPTION("Hello module");

hello_init函数是模块的入口点,它通过module_init例程注册到系统中,在内核装载时被调用。hello_exit函数是模块的出口函数,它由module_exit例程注册到系统。在模块从内存卸载时,内核便会调用hello_exit。
MODULE_LICENSE:标准
MODULE_AUTHOR:作者信息
MODULE_DESCRIPTION:模块的简单说明
Kconfig

config TEST
    tristate TEST_MODEL
help
    this is test model

Kconfig中的config TEST与Makefile中的CONFIG_TEST对应
选择M表示编译为模块,对应内核下的.confg中CONFIG_TEST=m

这里写图片描述

Makefile

obj-$(CONFIG_TEST) += test.o
/* when TEST_MODEL choose M ,CONFIG_TEST=m */
obj-$(m) += test.o

然后编译内核,会出现test.ko文件

第三步:

测试

insmod test.ko
打印 Hello module!

rmmod test.ko
打印 
Exit module!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值