NeoAetherOS Kernel Module
内核模块编译及加载
直接在源代码的 modules 文件夹下拷贝其他简单的内核模块稍作修改 (将 GNUmakefile 中的 KM_NAME 修改为你的内核模块名称)
编译出的格式为 .ko ( 实则 elf )
文件
注: 目前的内核模块不支持动态卸载, 一旦加载不可释放, 如想卸载模块, 更改引导器配置文件并重启内核 (将来可能会支持)
入口函数
dlmain
内核会调用每个模块的 dlmain 函数.
此时模块可以注册文件系统, 加载驱动等.
以下是函数示例定义
int dlmain(void) {
return 0;
}Warning
注意: dlmain 的定义不可省略, 如没有此主函数, 内核模块会加载失败.
Warning
注意: 如果 dlmain 返回了非0值, 代表该内核模块初始化失败
API
NAOS 内核模块支持导出函数以供其他模块进行调用, 但是你需要保证被依赖模块优先于其他模块加载
调整引导配置文件的模块加载顺序即可
Warning
注意: 模块禁止循环依赖, 否则内核无法正确重定向两个互相引用的模块
头文件可直接使用内核内部文件,所以如果内核接口变动,模块也需要进行重写
兼容性
部分子系统的函数定义与 CoolPotOS 相似, 部分内核模块可以以很小的代价相互移植.
有关 CoolPotOS 的内核模块定义, 详见 CPOS Kernel Module
Last updated on