我该如何构建一个Linux发行版?

4

声明: 尽管我是一名Linux用户,并使用过Raspbian、Armstrong(beaglebone)和嵌入式Debian等发行版,但这是我第一次涉足嵌入式Linux领域(Ubuntu和Debian)。标题可能也看起来很普通,但我真的想不出更好的标题,我已经来回奔波了,过去几个小时一直在阅读,现在已经远超过我的睡眠时间,我将没有机会再休息到周二,所以......我对语法/语法格式错误表示歉意。

背景

像Debian、Armstrong、Ubuntu、OpenWRT等软件包是如何构建的?我的意思是,当你将镜像下载到像BeagleBone Black这样的板子上时,你需要构建u-boot、内核以及软件包,而这些发行版之间的区别在于它们的软件包(如果我错了,请纠正我)。

我一直在研究如何构建这些发行版(特别是Armstrong和OpenWRT),它们都告诉我下载他们的存储库并运行配置脚本以使发行版运行。因此,这让我想到:“(1)如果我有一个不属于BeagleBone、Raspberry Pi或任何其他知名板子配置的自定义板子会发生什么?(2)创建这些板子的创作者第一次创建独特的板子时做了什么?(3)他们如何制作自己的发行版?(4)安装我想要的任何软件包并使它们与其他发行版不同,是否可能制作自己的发行版?”

正如您所见,有4个不同的问题,因此如果必要,我将使用下一段来解释自己。

(1)如果我有一个不属于BeagleBone、Raspberry Pi或任何其他知名板子配置的自定义板子会发生什么?

好的。我尝试阅读它们运行以构建发行版的脚本,但它们太长了,现在已经很晚了,我完全迷失了方向。根据我所读的,我想象这些脚本下载u-boot、内核和软件包,构建它们并将它们放入同一个镜像中(我已经阅读过如何“手动”只使用引导加载程序和内核)。我想象有一些配置文件,在其中描述了板子等,但我无法确定。我走在正确的道路上吗?

(2) 创建这些板子的创作者第一次创建独特的板子时做了什么?

直到现在为止,您可能会想,“好吧,只需找一个看起来像您的板子,修改文件并进行操作即可”。在现实世界中,这就是我要做的事情,但现在我想学习,我只有将所有这些知识刻入脑海才能学到。问题是,有几个配置文件(根据我从u-boot和内核中学习的),我的一切都告诉我,在问这个问题之前先阅读第二版的“嵌入式Linux入门”。如果这个答案太深入了,请告诉我阅读一本书,但如果不是,请有人可以帮助我吗?
(3) 他们如何制作自己的发行版?
(4) 可以通过安装任何我想要的软件包并使其与其他软件包不同来制作自己的发行版吗?
我知道发行版背后有很多开发工作,并且绝不是我的意图贬低(是否为正确的词?英语不是我的母语,根据定义似乎可以,但在此处使用时感觉“blargh”)所有这些团队所做的开发。这只是一个问题,我能否构建引导加载程序、内核、其他几个随机程序和软件包,并将其称为我自己的发行版?如果可以,如何将软件包映像构建到我的发行版中?
如果我正在从头开始开发一个知名的发行版,而不使用它们的脚本,我会构建引导加载程序、内核和所有知名发行版使用的其他内容,然后将其绑定在映像中吗?还是我只需构建u-boot和内核,然后安装所有其他源并从中构建我的新Linux映像?
编辑:我更喜欢保留上面的文本,以便新读者可以了解我的思路。我发现用少量的文字表达自己并使其成为“可关联的问题”很困难。因此,我在下面放了一个标题,这是我目前能想到的最客观的问题。我还稍微编辑了一下文本并给它起了一个标题。我只划掉了以前的问题,因为它们似乎是有效的,尽管有许多好答案,因为它可能会帮助其他与我相同的人提出问题。如果需要,我可以删除它们。
  1. 我能否通过下载u-boot、内核和特定的OpenWRT源代码来构建像OpenWRT这样的发行版?我的意思是我是否可以不使用它们提供的脚本来做到这一点。如果我使用它们的脚本,我知道我可以修改一些配置并将其移植到我自己的“独特”开发板上。Yocto可以成为我的起点吗?
  2. 我如何配置我自己独特的开发板?如果我只编译u-boot和内核,并稍后安装一些程序,这样可以吗?它是否可以用于生产?
  3. 许多人谈到了Linux from scratch。我发现对它的主要反对意见是它不适合生产。除了告诉我它为什么不适合生产外,您能告诉我如何使我的设置对于生产“好”吗?

2
听起来你的问题主要不是关于“制作一个发行版”,而是关于将一个发行版移植到一个新的目标平台上。它们是非常不同的过程。一个是关于设计,另一个只是“纯粹”的技术工作。 - hobbs
1
@hobbs,起初只是一个移植问题,但有很多教程和步骤说明可以让事情变得简单,除非你正在开发一块与其他可用配置完全不同的全新板子。最终,我们需要从头开始构建一个发行版,即使它是一个众所周知的发行版,也不能使用它们的脚本,我是指通过下载所有源代码并从中创建镜像来完成。 - morcillo
1
我认为使发行版“生产就绪”的主要因素是有数十甚至数百名程序员致力于开发安全和合理的配置,以及保持这些数百个软件包的最新状态并确定正确的版本依赖关系。如果只有你在这个项目上工作,并且不想使用现有发行版的软件包和存储库,那么你可能需要限制引入的外部软件数量。 - Mark Plotnick
1
@MarkPlotnick 好的...那样解释很清楚,谢谢。 - morcillo
1
你真的想要一个“发行版”(通过软件包更新),还是只需要一个内核和根文件系统?(我注意到新手经常将“rootfs”这个术语替换为“distro”,好像它们是同义词。) - sawdust
显示剩余2条评论
2个回答

3
现在,构建发行版内容的工具箱之一是Yocto工具包。当然,这只是这类工具的一个例子,还有更多其他工具可供选择。 在2016年,已经没有人会再手动从头开始创建发行版了。

1
从头手动完成仍然是一种很好的学习经验。看看“Linux from scratch”。不建议用于生产。 - Frank Meerkötter
2
@Frank_Meerkötter 我之前不知道有关Yocto的事情。我会尝试一下。我真的很想学习,而不是手动操作。根据你所说的,这是一个很好的起点来学习。 - morcillo

2

Yocto会为您完成大部分工作。您看过LFS吗?http://www.linuxfromscratch.org/。 还可以将一组软件包安装到chroot环境中并创建文件系统。但是,需要额外的工作来安装grub或任何引导程序,以使其成为可引导的映像。


Linux from scratch. 这是我在这个帖子中遇到的第二个实例。从我在网上看到的来看,它有点过时,不适合生产,所以我就认为它已经不再可用了。问题是我不想要一个工具包来帮我完成,我想通过手动操作来理解它们是如何组合在一起的,并且尽可能少地使用脚本。例如,下载OpenWRT、u-boot和内核的源代码,然后创建一个镜像。 - morcillo
我建议你阅读手册@ .http://www.linuxfromscratch.org/lfs/。它们会让你深入了解构建“发行版”的过程。除非你有大量的空闲时间,否则你可能不会选择构建一个。但相信我,你一旦阅读它就不会后悔。在LFS中,你从第0步开始,即设置编译器以便开始编译最终形成发行版的软件包。 - plasmixs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接