linux - 内核模块如何附加到正在运行的内核?

标签 linux linux-kernel linux-device-driver

我正在学习设备驱动程序。到目前为止,我已经执行了小模块。我想知道 linux 如何允许在运行时插入模块?我搜索了一下,但不满意或者可能无法理解。我得到的只是 linux 守护进程执行 modprobe 添加新模块。但我的问题是这是怎么发生的?内核已经在执行中。新的可执行文件如何附加到正在运行的内核? 谢谢。

最佳答案

内核模块实际上只是一个具有公开功能的目标文件(或者换句话说,半链接程序)。

modprobe 使用特殊的系统调用将模块加载到内核中。之后,内核有一个内置的链接器,完成将目标文件链接到正在运行的内核。内置链接器预先知道所有内核函数的地址,因此它知道如何填充空白。

之后,内核跳转到内核模块的入口点,模块开始工作。从此以后,模块基本上就是内核的一部分。

关于linux - 内核模块如何附加到正在运行的内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754059/

相关文章:

c - 如何在 C 中将缓冲区表示为链表

linux - 无法下载内核

linux - "process context"到底是什么,它与 "interrupt context"有什么关系?

linux - 如何知道用户何时登录linux机器?

c - 在 Linux 中调试一个简单的字符驱动程序在 device_create() 上失败

linux - 编译linux内核

python - 创建使用 Multiprocessing 和 Multiprocessing.Queues 的 linux 守护进程

regex - 如何用sed插入html标签?

linux - 从 SecureCRT 调用时,脚本在线调用 tput 时退出

linux - 如何在 yocto 中为树莓派使用自己的内核配置?