我的情况是这样的:我有一个新编译的内核,为新平台编译的所有应用程序和库,我知道如何使用我选择的引导加载程序进行引导,但我没有根文件系统。
我想知道是否有官方的或经过充分测试的指南,介绍如何为给定的 Linux 内核填充新的根文件系统、Linux 内核真正需要的库以及运行 Linux 内核所需的所有功能以及一个简约的linux盒子。
我认为最明显的是 C 库,无论如何我都需要 ac 库,但我真的不知道我是否可以只使用一个 C 库+我喜欢的所有额外程序和库,或者内核需要一些东西另外,即使就配置文件而言,我也没有真正找到关于 linux 内核期望在根文件系统上找到哪些文件的明确信息。
我发现的所有内容都是关于想要与 Linux 兼容的文件系统的目录结构,这基本上表明您应该拥有/lib
、/usr
、/bin
和更多目录,但对于创建新的文件系统并没有什么实质性内容。
聚苯乙烯
这个问题是不是关于如何创建文件系统、如何启动它或其他任何内容;我只是想知道需要哪些文件来完成这对内核+文件系统,以便我可以启动一个新的 Linux 机器。
答案1
Linux内核不太关心。引导加载程序告诉内核在哪里安装根文件系统——通常是初始 ramdisk 映像 (initrd),但它也可以是实际的根文件系统——并且内核将从/sbin/init
(/init
在 initramfs 上)启动 init 进程,除非否则。
甚至内核文件系统的位置—— /proc
、/sys
、/dev
udev 等等——基本上也由用户空间决定。
这Linux 标准库项目在不同的 Linux 发行版中对这些进行了标准化。 (嗯,或多或少。在例如设备命名方面仍然存在一些小的差异,并且有关于合/usr/bin
并到/bin
和/usr/lib
到的讨论/lib
)。它的一个版本已被接受为 ISO 标准 ISO/IEC 23360。截至 2016 年 10 月,LSB 的当前版本是最低有效位5。
Linux 内核开发人员非常努力地保持用户空间接口中的内容向后兼容。这就是为什么 2.6 版本的信息非常适用于 4.4 的原因。几乎只有当引入新的设施和接口时,新版本才会与旧版本有所不同,您需要找到这些的文档。
您提到您已经编译了一些库和应用程序。如果是这样,您使用的编译时设置(检查configure
设置--prefix
等)以及这些库和应用程序查找其配置文件的目录(以及 C 库的时区文件、国际化等)将确定您的目录结构。绝对需要。
Linux 从头开始!是一个社区,编写有关如何从头开始编译和构建功能齐全的 Linux 发行版的书籍。它并不完全是最小的——在某些情况下你可以省略某些包,删除其他包,等等——但是一切都得到了解释。
罗布·兰德利以记录 Linux 内核内容而闻名。他的initramfs 简介,如何使用 initramfs, 和initramfs 编程如果您想创建一个像许多嵌入式设备一样直接从 initramfs 运行的最小系统,那么这些系统非常有趣。
至于systemctl
一般的 systemd,我会向你指出它的主页,祝你好运。我自己正在寻找避免这种情况的方法,并使用更强大的初始化系统,这些系统仍然承认Unix哲学而不是一时兴起聚集成一团乱麻。 (根据我的经验,前者长期保持功能性和可维护性,而后者虽然由于聚集的新功能和外部抛光而经常受到最终用户的喜爱,但从长远来看,会导致系统和系统管理员脆弱和破损。您的经验和意见可能会有所不同;我只是描述我的。)
当我开发一个简单的基准测试 USB 棒来评估 Linux 集群节点时,我检查了可以安装的最小 Debian 和 CentOS 系统,以找出 OP 询问的详细信息(除了我不是在寻找最小系统,而是一个小型轻量级系统)可以运行与最终集群本身相同的二进制文件的系统;即,包括基本服务和库)。今天,我建议您看一下德瓦安,因为它支持多个init系统。在虚拟机中进行这些实验应该会提供很多信息。
实践高于理论或标准。没有强制执行的标准,或者说没有真正的标准;甚至 LSB 和 ISO/IEC 23360 也更像是成功互操作性的指南。这Linux 内核文档从 Linux 内核源代码中提取的内容确实描述了内核期望,但正如前面提到的,影响文件系统树的期望非常非常少。甚至那些往往是启动时或编译时可配置的。