简介
Linux 内核模块的编译与普通的用户程序编译有所不同。内核模块程序的编译依赖于 Linux 内核本身的编译程序,因此,在进行内核模块的编译运行之前,需要保证所用的系统具备正确的编译器、模块工具和其他必要工具。
本系列内容主要在 Ububtu 22.04 (GNU/Linux 5.15.0-52-generic x86_64) 中编译运行,因此后续的内容皆是能够满足在该环境下成功使用。
查看内核编译环境
在查看 /lib/modules 文件夹是否具有内核模块的编译环境:
1 | cd /lib/modules |
如上图所示,/lib/modules 文件夹中存在两个目录(系统环境不同,也可存在多个或一个目录),此时,需要根据系统的内核版本,来选择对应的编译环境目录。
使用以下命令查看内核版本:
1 | uname -r |
运行结果如下:
根据内核版本进相应的目录中(一般来讲,在 /lib/modules 中一定会存在于内核版本对应的目录,存在此目录已经能够确定所使用的系统具备编译内核模块的环境):
安装 GCC、GDB
在编译内核模块代码时,因为内核模块的代码开发是使用 C 语言进行开发,因此,需要安装 GCC 编译器。GCC 编译器的安装在 Ubuntu 系统中可使用如下命令来进行安装:
1 | sudo apt-get install gcc |
一般来讲,Ubuntu 本身自带 GCC ,无需自行安装。可通过
1 | gcc --v |
命令来查看系统中是否已经安装了 GCC 及其版本:
在后续可能会存在的调试过程中,需要使用 GDB 作为调试工具,因此,使用以下命令安装 GDB:
1 | sudo apt-get install gdb |
也可在安装前通过
1 | gdb -v |
来查看系统中是否已经安装了 GDB 及其版本:
安装 make 工具
可通过
1 | sudo apt-get install make |
命令安装 make 工具,若系统中已经安装了 make,则可通过
1 | make -v |
来查看 make 工具的版本:
至此,编译内核模块的环境已经准备完毕。