今天我们来聊聊Linux里一个非常实用的机制——动态模块加载。简单来说,就是在不重新编译的情况下,随时增加或卸载功能,比如驱动、文件系统等,大大提高开发效率。
一、什么是 .ko 文件?
在Linux中,.ko 文件就是内核模块(Kernel Object)。它是一段可以独立编译的代码,能够在系统运行时动态地插入到内核里运行,用完还可以随时移除。有了它,你不用每次改个驱动就重新编译整个内核、重启设备,效率直接拉满。
当开发人员开发完成后,只需要将代码编译成.ko文件,即可在Linux系统运行。
二、编译成 .ko 文件的过程
首先准备模块源码。可以写一个简单的内核模块,包含初始化和退出函数。初始化时打印一句===> fcode_init running,卸载时打印 ===> fcode_exit running。这样能直观看到模块何时被加载、何时被移除。
其次编写专用Makefile文件。内核模块的Makefile和普通程序不同,需要指定:交叉编译工具链路径、内核源码目录、目标架构(比如我们用的D1s开发板是riscv)、要编译的模块文件(如 ko.o)
确保内核配置支持模块。要确保内核开启了可加载模块支持,关键两步:保存配置、编译内核并烧录后,系统就具备了加载和卸载模块的能力。
最后编译并生成.ko 文件。在模块目录下执行 make,就会生成 ko.ko。(提醒:编译模块前,对应的内核源码必须先完整编译过一次,否则会报错)