编写内核模块小Demo

基于Linux系统的内核编程小Demo.


编写Linux内核模块的demo及注意事项.

什么是内核模块呢?

首先内核是一个操作系统的最基础部分,它是一个向所有外部程序和硬件驱动提供一个插口的这么一个存在,然后内核模块就是对接这个抽口的模块。
内核又分了微内核和宏内核,宏内核又分为单内核和双内核。而Linux内核属于宏内核中的单内核,它汲取了微内核的思想和精华,故而提供了模块化机制,不仅实现了效率高,同时因为模块化的存在让其更加的便于维护和扩展。

更多的内核相关信息可自行上网了解

驱动程序在内核中,都是独立的模块,例如LED驱动、蜂鸣器驱动,它们驱动之间没有相互的联系,可以通过应用程序将两个驱动联系在一起,例如以下的代码,LED驱动和蜂鸣器驱动各自都是一个独立的模块(module)。
内核模块编译成功后会生成一个 (*.ko)(kernel object)文件。

当内核编写完成后,使用以下两个命令:

加载内核模块

insmod *.ko

卸载内核模块

rmmod *.ko

注意:驱动是安装在内存中正在运行的内核上。

应用程序代码结构和内核模块代码结构区别:
运行方法|C语言应用程序|内核模块
–|:–:|–
运行空间|用户空间|内核空间
出口|main|module_init函数指定
入口|-|module_exit函数指定
编译|gcc|Makefile
运行|./直接运行|insmod
退出|exit|rmmod


设计一个简单的内核demo.

默认已经下载好了Linux内核源码并且解压好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

//入口函数
static int __init myled_init(void)
{
    printk("myled drvier init !\n");
    return 0;
}

//出口函数
static int __exit myled_exit(void)
{
    printk("myled drvier exit !\n");
    return 0;
}

module_init(myled_init);    //驱动程序的入口:insmod myled.ko调用module_init,module_init又会去调用myled_init函数。
module_exit(myled_exit);    //驱动程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大棋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值