我不太了解Linux内核在安装时的编译过程

以下是一些让我困惑的事情:

  1. 内核是用C语言编写的,但是如果没有安装编译器,内核是如何编译的呢?
  2. 如果在编译内核之前在我的机器上安装了C编译器,那么在没有安装编译器的情况下如何编译编译器本身呢?

这几天我很困惑,谢谢你的回复.

推荐答案

Linux机器的第一轮二进制文件是在其他Linux机器上构建的(可能).

第一个Linux系统的二进制文件是在大约other个平台上构建的.

这台计算机的二进制文件可以追溯到一个最初的系统,该系统是在尚不到another个平台上构建的.

...

深入到这一步,您会发现编译器是用更原始的工具构建的,而这些工具又是在机器上构建的,而不是在它们的宿主机器上构建的.

...

一直往前推,你会发现电脑已经建成,它们的指令可以在setting switches on the front panel of the machine分钟前输入.

很酷的东西.

The rule is "build the tools to build the tools to build the tools...". Very much like the tools which run our physical environment. Also known as "pulling yourself up by the bootstraps".

C++相关问答推荐

代码打印正确输出次数过多(CS50)

如何确保内存分配在地址附近?

Ebpf内核代码:permission denied:invalid access to map value

C中的__attributor__((aligned(4),packed))与 struct 的用法

丑陋的三重间接:可扩展的缓冲区管理 struct

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

无法用C++编译我的单元测试

Can函数指针指向C++中具有不同参数连续性的函数

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

为什么GDB/MI进程的FIFO循环中有read()阻塞

防止规范模式在C++中 echo 特殊字符

C:如何将此代码转换为与数组一起使用?

为什么WcrTomb只支持ASCII?

将非连续物理内存映射到用户空间

某些EAX值的不同调用方的CPUID结果不一致

计算SIZE_MAX元素的长数组的大小

在git补丁中自动添加C的宏

C 语言中 CORDIC 对数的问题

GDB 跳过动态加载器代码

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?