Linux内核模块的最简实例


前言

软硬件环境
硬件:PC
软件:Ubuntu 18.04

Linux 内核是宏内核, 和QNX等微内核相比,它的整体结构非常庞大,包含的组件非常多,如果我们将所有的功能都编译进Linux 内核中,那么Linux 内核镜像将会很大,也将使kernel 的加载时间变长,影响整个系统的启动速度,并且也不能对内核进行动态的新增和删除某些功能,为了实现在内核中动态的新增和删除某些功能,模块(Module)这一机制就诞生了。

一、内核模块的主要组成部分

1. 头文件

内核模块主要依赖如下两个头文件:
在这里插入图片描述

2. 模块加载函数

当通过insmod 或 modprobe命令加载内核模块的时候,模块的加载函数会自动被内核调用,完成本模块的相关初始化操作。并且通过作为**module_init()**的参数,注册进内核。

3. 模块卸载函数

当通过rmmod 命令卸载某个模块时, 模块的卸载函数会被内核自动的调用,完成和模块加载函数相关的功能,如资源的释放等;并且通过作为**module_exit()**的参数,注册进内核。

4. 模块许可证声明

许可证(LICENSE)声明描述内核模块的许可权限, 如果不声明LICENSE,模块被加载时,会收到内核被污染(kernel tainted)的警告。
内核模块可接受的LICENSE 主要包括“GPL”, "GPL v2"等

5. 可选部分

模块参数:模块参数时模块被加载的时候可以被传递给它的值,它本身对应模块内部的全局变量。
模块导出符号:内核模块可以导出符号(symbol, 对应于函数或变量),这样其他的模块可以使用本模块中的变量或函数。
模块作者:用来表白该模块的作者是谁,例如 MODULE_AUTHOR(“khl”)
模块描述:用来描述该模块的作用,例如MODULE_DESCRIPTION(“hdmi encoder driver”)
其他:略

二、最简内核模块实例

1. 内核模块代码

#include <linux/init.h>
#include <linux/module.h><
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值