linux内核怎么重新编辑 (linux内核完全注释)

a.out是"assembler output"(汇编程序输出)的缩写形式。在早期的语言中并不存在链接器,我们的程序是这样创建:先把所有源文件连接在一起,然后进行汇编,汇编产生的汇编程序输出保存在a.out中。即使到了后来,我们编译工具链中有了链接器,最后一个环节的输出文件依然沿用了这个命名习惯。

关于Linux内核支持a.out可执行格式,它可以追溯到Linux的早期版本。几十年来,它一直没有被真正为大家广泛使用,但在Linux内核中一直支持该格式。内核开发者们曾经多次尝试想从内核中移除它,但Linux内核都没有接受。不过,从最近内核维护者的一些讨论来看,a.out格式将会彻底从Linux内核移除。

a.out格式渊源,可以追溯到Unix的第一版。当MINIX出现时,它将这种格式用于其可执行文件格式。作为借鉴了Minix很多特性的linux内核,Linus Torvalds也将a.out作为其可执行文件格式。a.out是一种简单的格式,在Linux上的实现更简单。在1993年linux内核支持了新的ELF可执行文件格式之前,早期的linux内核一直使用a.out格式。

1995年之后,新的ELF格式一直是Linux在大多数体系结构上的标准可执行格式。内核开发人员之间,常常出现一些删除a.out格式的讨论,但持续不太久,就没在再讨论了。在今年(2022年)的3月9日,有个内核维护者提交了一个内核修改补丁(即:禁止在两个仍默认启用a.out的架构(Alpha和m68k)上支持a.out),重新燃起了内核社区对从linux内核移除a.out格式的讨论。实际上,这个补丁实并没有移除相关代码,而只是构建时禁用a.out的格式的支持。

这次讨论,引起了Linus Torvalds回应,他说“毫无疑问,我们不能这么做”。他指出,在运行Digital的Unix的Alpha系统上,原生的可执行格式,本质上来说是a.out,即使它采用了较新的名称ECOFF。因为,Linux 内核中的a.out格式加载器可以通过忽略一些较新的ECOFF特性,来运行ECOFF程序;如果我们把它拿掉,必然会破坏那些仍在使用这种特性的系统。

但一些内核开发者指出,内核中那些声称在使用a.out的发行版本,实际上并没有真正使用a.out的特性。但也有一些人声称他仍在使用一组旧工具链,在构建过程中,需要使用到a.out的特性。

此类讨论总有赞成者和反对者,因为技术的更新通常都不会太顺畅。

为了能进一步提供大家都能接受的方案,一位内核开发者编写一个可以加载和运行旧的a.out二进制文件的ELF包装程序。并且经实际验证,确实能解决那些反对者面临的问题。至此,我们彻底扫除了从内核中删除a.out格式支持的最后一个障碍。

因此,从2022年初开始,Linux 内核开发者就开始着手删除 a.out 相关的代码,并且在Linux 6.1 已彻底清除 a.out代码,实现了此前承诺的在 2022 年从 Linux 内核中删除所有 a.out 相关内容的目标。