内核是怎么写的?

内核是怎么写的?

在内核模式下运行程序禁止使用标准 C 库,因为您的程序链接到的唯一内容是内核本身。所以我可以使用内核中定义的函数。但内核本身是一个用 C 语言编写并针对某些特定体系结构编译的程序。它不应该使用C标准库,但也不应该使用任何驱动程序,因为驱动程序是可加载模块。所以我的问题是编写内核时实际使用了哪些 C 函数?不通过内核如何与硬件交互?别说我要查看来源,这对我来说太新了,TY。

答案1

Unix 内核传统上包括一些汇编语言代码。我最近没有看过它的源代码,但我怀疑这仍然是真的。

驱动程序实际上如何与硬件设备通信? 了解该主题的概述。该问题的答案讨论了两种计算机体系结构。在使用端口映射 I/O (PMIO) 的系统上,内核必须部分用汇编语言编写——尽管您可能可以通过几个非常短的例程来完成。在使用内存映射 I/O (MMIO) 的系统上,甚至设备驱动程序也可以完全用 C 编写。它们所需要做的就是声明一个指针,将其设置为等于设备的虚拟地址,然后使用它像访问内存一样操作设备。

答案2

并非所有驱动程序都是可加载模块,可加载只是一个选项,但一些关键驱动程序不是动态加载的,它们是内核的一部分。

答案3

内核在其内部静态地再现了 libc 提供的一整套功能。

就像在用户模式 ​​C 编程中一样,一个函数可以在一个编译单元中定义,而另一个单元可以简单地引用它(通常通过头文件),编译器会将其设为未定义引用,链接器会将其链接到实际提供符号的编译单元。

加载内核模块的工作原理与动态加载其描述如下: http://www.tldp.org/LDP/tlk/modules/modules.html

相关内容