Linux内核模块编程

本文介绍了Linux内核模块编程的基础知识,包括模块的性质、相关宏和头文件、简单模块示例、编译过程、加载方法、模块信息、参数、符号导出、依赖性管理以及命名空间问题。适合Linux Kernel 2.6.0及以上版本的开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

摘要

Linux内核模块编程的资料有些纷繁复杂,有的过于简单,有的过于庞杂,我试图用笔记的形式想读者展示怎样来进程Linux模块编程,力图做到简明扼要,这篇文章也是作为本人备忘的资料,所以有些地方过于简略是难免的。本来这篇文章的目的就是让用户知其然,至于所以然还是请参考相应的资料,其实最好的资料莫过于Linux Kernel Source。

适用范围:

  • Linux Kernel >= 2.6.0

Linux模块简介

首先这个module不同于microkernel的module,microkernel的module是一个个的daemon进程,工作于用户空间,Linux的module只是一个内核的目标代码,内核通过执行运行时的连接,来把它整合到kernel中去,所以说Linux的module机制并没有改变Linux内核为monolithic OS本质,其module也是工作于内核模式,享有内核的所有特权。

至于为什么要引入Linux Kernle Module(一下简称LKM),我想至少有一下几点:

  • 模块化编程的需要,降低开发和维护成本。
  • 增强系统的灵活性,使得修改一些内核功能而不必重新编译内核和重启系统。
  • 降低内核编程的复杂性,使入门门槛降低。

相关宏及头文件

LKM需要包含以下头文件:<linux/kernel.h> <linux/module.h>

需要定义以下宏:__KERNEL__, MODULE

一个简单的内核模块示例

/*file:   hello.c*/
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void)
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值