1.6 应用程序与内核模块的比较
模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。
为了加深对内核模块的了解,表1.3给出应用程序与内核模块程序的比较。
表1.3 应用程序与内核模块程序的比较
C语言应用程序 | 内核模块程序 | |
---|---|---|
使用函数 | Libc库 | 内核函数 |
运行空间 | 用户空间 | 内核空间 |
运行权限 | 普通用户 | 超级用户 |
入口函数 | main() | module_init |
出口函数 | exit() | module_cleanup() |
编译 | gcc-c | mark |
连接 | gcc | insmod |
运行 | 直接运行 | insmod |
调试 | gdb | kdbug,kdb,kgdb等 |
从表1.3我们可以看出,内核模块程序不能调用libc库中的函数,它运行在内核空间,且只有超级用户可以对其运行。另外,模块程序必须通过module()_init和module()_cleanup函数来告诉内核“我来了”和“我走了”。
在了解内核模块简单编程之后,下面通过对内核中常用数据结构链表的分析,使大家初步了解Linux内核的具体源代码,并编写内核模块对其加以应用。