linux进阶:内核模块

现代内核派系

宏内核

关键功能(基本功能,不可裁剪、扩展)和服务功能(如文件系统、设备驱动、网络服务等,可裁剪、扩展)均在内核空间提供。运行效率高。扩展性较差。system call(系统调用)能够先入内核态来使用内核提供的服务。

微内核

内核空间只提供关键功能,服务功能在用户空间提供。运行效率较低。安全性、扩展性较高

 

内核模块

为解决linux内核可扩展性和可维护性相对较差的缺陷。

内核模块头文件

1 #include <linux/init.h>      /*包含module_init()和module_exit()函数的声明*/
2 #include <linux/module.h>    /*包含内核模块信息声明的相关函数*/
3 #include <linux/kernel.h>    /*包含内核提供的各种函数,如printk*/

内核模块加载与卸载

加载内核模块:insmod

卸载内核模块:rmmod

内核模块出入口

module_init():加载模块时该函数自动执行,进行初始化操作
module_exit():卸载模块时该函数自动执行,进行清理操作

内核模块信息声明

MODULE_LICENSE():表示模块代码接受的软件许可协议,Linux内核遵循GPL V2开源协议,内核模块与linux内核保持一致即可。
MODULE_AUTHOR():描述模块的作者信息。
MODULE_DESCRIPTION():对模块的简单介绍。
MODULE_ALIAS():给模块设置一个别名。

实验环境(野火为例)

开发板烧录好Debian镜像。启动开发板,搭建好nfs客户端,挂载共享文件夹。获取Debian镜像的内核源码并编译。(选择4.19.71版本内核,内核模块的功能需要依赖内核提供的各种底层接口。)

注:cat /etc/issue查看镜像日期。新版内核是4.19.35版本(22年之后),看驱动文档的“驱动章节实验环境搭建”。

下载linux内核源码(基于野火linux开发板,ebf-buster-linux存放着内核相关)

git clone https://github.com/Embedfire/ebf-buster-linux.git
git clone https://gitee.com/Embedfire/ebf-buster-linux.git

安装必要环境工具库(make工具、gcc交叉编译链、gcc编译工具、bison语法分析器、flex词法分析器、libssl-dev OpenSSL通用库、lzop LZO压缩库的压缩软件)

sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop

 

热门相关:恭喜你被逮捕了   买妻种田:山野夫君,强势宠!   买妻种田:山野夫君,强势宠!   拒嫁豪门,前妻太抢手   买妻种田:山野夫君,强势宠!