Linux内核模块编程入门指南
1. 虚拟地址空间与内核映射
在深入探讨Linux内核模块(LKM)之前,我们需要了解一些基础概念。首先,我们所涉及的地址空间是虚拟地址空间,而非物理地址空间。内核会借助硬件组件,如内存管理单元(MMU)、处理器以及转换后援缓冲器(TLB)缓存,以页面粒度将虚拟页面映射到物理页框。具体而言,内核使用主内核页表将内核虚拟页面映射到物理帧(RAM),同时为每个活跃的用户空间进程,通过各自的页表将进程的(用户)虚拟页面映射到物理页框。
2. 探索LKM框架
2.1 LKM框架简介
LKM框架为开发者提供了一种无需直接修改内核源代码树和静态内核映像,就能实现内核级功能的方式。想象一下,你需要为Linux内核添加新功能,比如支持特定硬件外设芯片的新设备驱动、新文件系统或新I/O调度器。传统方法是更新内核源代码树,进行配置、编译、测试和部署,但这一过程繁琐,每次代码的微小更改都需要重新编译内核映像并重启系统进行测试。而LKM框架则提供了更简洁的解决方案。
2.2 LKM框架的工作原理
LKM框架允许将内核代码通常在核外编译,即所谓的“out-of-tree”代码,使其在一定程度上独立于内核。编译生成的“模块对象”可以插入到内核内存(内核虚拟地址空间,简称VAS)中运行,完成任务后再从内核内存中移除。在Linux 2.4及更早版本中,内核模块文件名后缀为 .o ,而在现代的2.6及更高版本中,后缀为 .ko (内核对象)。构建完成后,可使用 insmod 工具在运行时将 .ko
超级会员免费看
订阅专栏 解锁全文
2692

被折叠的 条评论
为什么被折叠?



