本文主要是介绍内核模块编程---hello world,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是内核模块?
其全称为动态可加载内核模块。之所以提供模块机制,是因为Linux是“单块内核”的操作系统,单内核的最大优点是效率高,因为所有的内容都集中在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。Linux内核是模块化组成的,它允许我们方便地在运行时动态地向内核中插入或从中删除代码。
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时加载,被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。
特点:
装入的内核模块和其他内核部分完全一样,具有相同的访问权限,因此,差的内核模块会导致系统崩溃;模块编程和内核版本密切相连,内核版本和模块版本的不兼容,也可能导致系统崩溃;这些代码被一并组合在一个单独的二进制镜像中,这样基本内核镜像就尽可能的小,而且灵活性很好否则,在需要添加新硬件或者升级设备驱动时,必须重新构建内核。
用户层编程和内核模块编程的区别
选项 | 应用程序 | 内核模块程序 |
---|---|---|
使用函数 | libc 库 | 内核函数 |
运行空间 | 用户空间 | 内核空间 |
运行权限 | 普通用户 | 超级用户 |
入口函数 | libc 库 | 内核函数 |
运行空间 | main() | module_init |
出口函数 | exit() | module_exit |
编译 | gcc | makefile |
链接 | gcc | insmod |
运行 | 直接运行 | insmod |
入口函数 | libc 库 | 内核函数 |
这篇关于内核模块编程---hello world的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!