[置顶] Linux内核模块

时间:2020-12-13 15:47:20

一、什么是模块

1、定义

可加载内核模块Loadable Kernel ModuleLKM

 

2、为什么需要模块

LINUX内核是单内核,即内核模块是内核的一部分,和内核其他代码是一个程序。那么问题就来了:PC这样的通用平台会遇到什么问题?

 

3、模块融入内核的时机

A、静态编译进内核

内核模块代码跟内核其他代码一起编译。

 

B、运行时动态加载

内核先编译,然后再单独编译内核模块,内核模块运行时融入到内核。

 

二、内核模块


 [置顶]        Linux内核模块

 

A、编译器完成

通过gcc扩展属性,告诉gcc链接的时候,把代码放到特定的区域去

B、编写代码完成

自己设计一个函数指针数组,编写代码,完成函数首地址存放


三、编译模块

linux内核是单内核,即内核一个程序,内核模块是这个特殊程序中的一部分

1、问题引入——进程空间

[置顶]        Linux内核模块

2、问题引入——共享库函数调用

[置顶]        Linux内核模块


3、内核模块使用内核函数

[置顶]        Linux内核模块
   

4、结论

编译一个内核模块,必须使用编译出模块要融入的内核的内核源码。

A、编译系统

编译器不一致,可能会造成代码运行问题

B、头文件声明

编译器帮助做语法检查

C、符号表

链接使用的内核函数,如果模块要导出函数或变量,知道在符号表合理的位置区域分配

 


四、加载内核模块

[置顶]        Linux内核模块