最近在看一本书,名字叫Linux内核开发,写者罗伯特·洛夫。他在第二章中指出
内核既不能访问 C 库,也不能访问标准 C 头文件。
作为一个新手,我想问一下他们是如何在不访问标准文件或C库的情况下编写所有内核的?这是开发操作系统时的常见行为吗?请赐教我
答案1
C 库的许多功能都依赖于内核;如果内核尝试使用 C 库,最终会出现循环。标准 C 头文件由 C 库提供,也不能使用。唯一的图书馆可以内核中使用的库没有自己的外部依赖关系,包括 C 库(这意味着没有内存分配,没有 I/O...)。
通常,内核是通过编写所有必需的代码来开发的(在某些情况下,可能从适当许可的库中复制代码)。如果您想看看它是什么样子,Linux 内核早期版本的源代码仍然可用 - 请参阅版本0.01例如。
从那时起,事情已经发生了一些变化,Linux 内核现在已经有了自己的“图书馆”(为重用而设计的内核代码模块),以及许多 C 库样式例程的实现(例如字符串操作函数)。它有自己的广泛的标题也。尽管如此,在 Linux 内核中编写现代 C 语言与在其他地方编写现代 C 语言还是有很大不同的......
答案2
它将使用其他库。它不能使用标准库,这些标准库会导致系统调用进入内核。它是内核。
因此还有其他库。书上应该有解释。