Linux内核模块编程-HelloWorld

本文介绍了Linux内核模块编程的基础,从HelloWorld模块开始,讲解了内核模块的概念、编写与加载,以及内核模块与应用程序编程的区别。接着探讨了内核模块的进阶内容,包括自定义初始化和退出函数、使用__init等属性、设置模块描述信息和参数,以及模块文件的组织结构。通过这些内容,帮助读者深入理解并实践Linux内核模块开发。
摘要由CSDN通过智能技术生成

HelloWorld内核

开始断断续续学习内核,大概半年了,多少开始对内核有点感悟了,但是对于这个庞然大物我显得很渺小,在枯燥的内核源码之中似乎没有一点点成功的喜悦,因此我选择学习内核模块编程,通过编写一些内核模块来体验那一点点小小的成就感吧!

什么是内核模块

内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行

最简单的内核模块

#include <linux/module.h>  //所有模块都必须包含的头文件
#include <linux/kernel.h> //一些宏定义,例如这里的KERN_INFO

int init_module(void)
{
    printk(KERN_INFO "Hello world 1.\n");
    /*  
     * 返回非0表示模块初始化失败,无法载入
     */
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

//一个模块至少需要两个函数,一个初始化函数这里是init_module在载入内核的时候调用,
//一个结束函数,这里是cleannup_module在从内核中注销的时候调用

一个Makefile来编译这个内核模块

obj-m += hello-1.o
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

注意:本文所有环节都是基于Centos6.5下测试OK,你可能在有的书上看见Makefile是这样写的

make -C /usr/src/linux-headers-$(shell uname -r) M=$(PWD) modules
其实/lib/modules/$(shell uname -r)/build 这个路径就是上面路径的一个软链接
[root@localhost 2.6.32-431.el6.x86_64]# ls -al build
lrwxrwxrwx. 1 root root 44 Mar 16 05:26 build -> /usr/src/kernels/2.6.32-504.12.2.el6.x86_64/<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值