丰色发自凹非寺
量子位报导|公众号QbitAI
用软驱启动Linux系统以前很“家常便饭”,其实那都是90-00年代的事了。
有年龄(bushi)的朋友可能熟悉。
但如今,就算你还有一张能用的3.5英寸软驱,可1.44MB的容量远远装不下一个现代linux内核,更不用说还得加上所有支持软件了。
但奇人有招,法国一位游戏开发小哥只用一张软驱就把现代Linux操作系统嵌进去了!
盘上还有几百KiB的剩余空间!并且用的都是最新“组件”,包括去年5.16号才发布的5.13.0-rc2版本的Linux内核。
一张软驱装下现代Linux系统
小哥把这个系统命名为Floppinux,在它的官网上带你们走了整个过程,包括从下拉(pulldown)、编译源代码到创建最终的c盘映像的所有命令。
而之所以做如此一件事情,是由于小哥认为自己用了很多年Linux,也用过好多Live-CD(就能在不安装到硬碟的前提下,体验Linux操作系统的东西)。
但他对其背后的基本原理知之很少,所以决定动手研究一下。
小哥的第一个目标是运行NomadDiskmag程序。
Diskmag这个远古东西不晓得有人了解吗?
它的全称叫diskmagazine,也就是c盘刊物,是一种在上世纪80-90年代,以软驱方式发行的电子刊物。90年代后就被在线出版物所代替了。
小哥早已用bash脚本搞定了后端界面,就差封面、目录和cat每位文件的正文了。
为了运行他写的脚本,须要一个可用的Linux发行版,也就是一个可以在软驱上运行的系统。
动手!
由于在64位系统上编译32位代码有点棘手。为了更简单,小哥用他的32位CPU的旧电脑来做这一切。
可以使用32位系统的VirtualBox,假如要用64位,添加命令“ARCH=x86”,比如:makeARCH=x86tinyconfig。
下边就是把现代Linux操作系统装进一张1.44MB软驱的大约过程:
1、创建并步入你想要保存文件的目录
2、配置和建立订制内核
使用最新Linux内核(版本5.13.0-rc2):
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
进行最小配置:maketinyconfig
添加额外配置:makemenuconfig
从菜单中选择以下选项:
将设置保存并退出,等待编译完成,最后内核将在arch/x86/boot/bzImage中建立,把它移到主目录。
3、添加工具
假如没有工具linux内核最新版本,内核只会启动,难以执行任何操作。小哥使用BusyBox(最流行的轻量级工具之一)linux系统安装,下载并解压:
wget https://busybox.net/downloads/busybox-1.33.1.tar.bz2
步入目录,进行启动配置:makeallnoconfig
之后选择你想要的工具:makemenuconfig
每位菜单项都显示各工具需占用多少KB,合理选择哦。
小哥的选择:
保存配置并退出,编译完成后_install目录下会创建一个包含所有文件的文件系统linux内核最新版本,把它移到主目录。
4、添加目录结构
有了内核和基本工具,一直须要一些额外的目录结构:
cd ../filesystem
mkdir -pv {dev,proc,etc/init.d,sys,tmp}
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
接出来创建几个配置文件,启动后显示欢迎消息:
cat >> welcome << EOF
Some welcome text...
EOF
之后配置处理启动、退出和重启的Inittab文件&实际的初始化脚本,并使初始化脚本可执行,并将所有文件的所有者设置为root。(限于篇幅命令已省略,具体可查看文末链接[1])
最后,将此目录压缩为一个文件。
可通过从主目录运行QEMU(在GNU/Linux平台上广泛使用的模拟处理器)对以上所有内容进行测试。
5、下面就是把这一切放进软驱了
创建指向内核和文件系统的Syslinux引导文件(bootfile):
cat >> syslinux.cfg << EOF
DEFAULT linux
LABEL linux
SAY [ BOOTING FLOPPINUX VERSION 0.1.0 ]
KERNEL bzImage
APPEND initrd=rootfs.cpio.gz
EOF
chmod +x syslinux.cfg
创建空软驱映像:
dd if=/dev/zero of=floppinux.img bs=1k count=1440
mkdosfs floppinux.img
syslinux --install floppinux.img
Mountit!并将syslinux、内核和文件系统复制到软驱映像:
sudo mount -o loop floppinux.img /mnt
sudo cp bzImage /mnt
sudo cp rootfs.cpio.gz /mnt
sudo cp syslinux.cfg /mnt
sudo umount /mnt
完成!
如今你就有了自己的发行版映像floppinux.imglinux deepin,你可以烧写到软驱,之后在真正的硬件上启动它了!
启动历时1分多
小哥花了不到3分钟烧写成功,之后开始了首次启动: