Alpine Linux Porting (一)

没想到硬体的章节会因为限制结果直接炸裂XD 不过没关系,我们可以到时候拿到板子再回头写相关的事情。
这篇开始,我们会先暂时将重心转移到所谓的「发行版」bootstrapping的施作上,终极目标是让Alpine Linux能够跑在我们的OrangeCrab w/ LiteX/VexRiscv (暂时是sfp mode)下。

发行版(distribution/distro)这个概念,是UNIX-like作业系统生态系底下比较常见的说法,因为UNIX-like作业系统的系统核心(kerenl)、与userspace搭配有比较明确地有分隔,以系统呼叫作为最天然的分界线,也因此会有一个Linux、诸多种样貌的多样性(纷乱?)发展;相较之下,Windows生态系,因为作业系统核心的系统呼叫因为安全及许多理由、并非直接暴露给第三方软件开发人员,开发者以Win32/Win64等等userspace API为基底作开发,几乎不太可能跳脱Microsoft设定下来的生态系样貌。

然而,现代的distro到底是什麽?这个概念的定义有很多种,有些人觉得要像是Debian、Fedora这类能够安装套件地才算,有些人则觉得buildroot这种也算,我个人的理解是:「能够以程序化的流程,模组化的组建出一套userspace环境的」,即是一种distro。而以这样的定义来叙述,Linux From Scratch最初在我的理解中,算是一个现代distro的前身,因为他仍有需要人的手动介入、而非全自动化地完成usperspace构建。而有了Automated Linux From Scratch,我觉得它便是个类似buildroot的B〝distro〞了。

为什麽我会持这样的观点,那我们就不得不提起至今在各大Linux世界仍旧看得到身影的BSD ports tree这个概念。在历史上,基於AT&T UNIX所出现的〝Berkeley Software Distribution〞,可以说是「发行版」这个名词的缔造者之一,起源於当时是访问学者的Ken Thompson与研究生Bill Joy,为了脱离AT&T/Bell Lab的宰制,打造出来了基於UNIX kernel、但是有着截然不同的userpsace生态系:「我们叫做柏克莱标准发行版,AT&T那包是什麽东西。(战)」
而到了後来连kernel都进行大量修改/re-implement的Free/Net/OpenBSD体系时,管理庞大的source code base与彼此之间的相依性、版本依赖已经是极为复杂的问题。是焉,ports tree诞生,它是一套由shell script与makefile打造的建构系统(build system),一个使用者可以轻松地在一个套件的子目录底下、试其需要决定要不要改套件的描述档案来组建程序;而在其tree的根目录下〝make world〞时,非常形象化地,你会获得一个完整从各个套件编译、打包好的「世界」,这也是我们今天要讲的核心 — — 从头打造一个Alpine 〝World〞。

几乎所有早期的UNIX-like作业系统开发者,都有使用过BSD ports的经验,也因此有许许多多的借鉴。Gentoo的Portage因为作者同时横跨FreeBSD ports开发,可说是ports的旁系血亲;Arch Linux的Arch Build System也是浓浓的ports风格,文件直接跟你说:我们是ports-like system;而受Arch Linux影响至深的Alpine Linux,则更是直接将source tree命名为:aports,the Alpine Linux ports。

目前 aports,与负责处理编译housekeeping (如建立local repo)的abuild,都host在Alpine的gitlab上面。其riscv64的abuild支援,目前已经merge回去。在 aports 其中有一只bootstrap.sh可供bootstrap最基础的alpine-base meta package。而其ports tree的修改,目前还在上游的路上。

我们预期下一章节开始,将会开始深度跳入 aports 的 bootstrap.sh,并且trouble shoot相关问题。


<<:  [Day8] 关於人脸侦测(Face Detection)的二三事

>>:  Day.12 「来为网页添加动画吧!」 —— CSS 动画(animation)

第 27 集:Bootstrap 客制化 reboot 重置

此篇会介绍 Bootstrap 使用的 css reset 档案 _reboot.scss。 事前...

[day-22] Python-基本认识回圈!(Part .1)

甚麽是回圈?   所谓的回圈就是重复执行某一段程序,当条件符合时,重复执行某一段程序,常见的有:计数...

Day9 Methods and v-on

今天来介绍这个指令v-on用来绑定HTML DOM,来触发要执行的事件 Method 这时并没有执行...

Day13 Composition(组合) vs Inheritance (继承)

一开始学习React时,常常会使用继承的方式使用Component,而React官方建议每个Comp...

Day5 Android - Layout版面(下)

继昨天讲了的ConstraintLayout,今天要来介绍自己也常用的另外两个布局,LinearLa...