1. 程式人生 > 資訊 >波蘭極客用一張軟盤執行最新核心的 Linux 系統

波蘭極客用一張軟盤執行最新核心的 Linux 系統

7 月 18 日訊息,用軟盤啟動 Linux 系統曾經很“家常便飯”,當然那都是 90-00 年代的事了。

但現在,即使你還有一張能用的 3.5 英寸軟盤,可 1.44MB 的容量遠遠裝不下一個現代 linux 核心,更不用說還得加上所有支援軟體了。

但奇人有招,波蘭一位遊戲開發小哥只用一張軟盤就把現代 Linux 作業系統嵌進去了

盤上還有幾百 KiB 的剩餘空間,而且用的都是最新“元件”,包括今年 5.16 號才釋出的 5.13.0-rc2 版本的 Linux 核心。

一張軟盤裝下現代 Linux 系統

小哥把這個系統命名為 Floppinux,在它的官網上帶大家走了整個過程,包括從拉取(pull down)、編譯原始碼到建立最終的磁碟映像的所有命令

而之所以做這麼一件事情,是因為小哥覺得自己用了好多年 Linux,也用過很多 Live-CD(能夠在不安裝到硬碟的前提下,體驗 Linux 作業系統的東西)。

但他對其背後的基本原理知之甚少,所以決定動手研究一下。

小哥的第一個目標是執行 Nomad Diskmag 程式

Diskmag 這個遠古東西不知道有人瞭解嗎?

它的全稱叫 disk magazine,也就是磁碟雜誌,是一種在上世紀 80-90 年代,以軟盤形式發行的電子雜誌。90 年代後就被線上出版物所取代了。

小哥已經用 bash 指令碼搞定了前端介面,就差封面、目錄和 cat 每個檔案的正文了。

為了執行他寫的指令碼,需要一個可用的 Linux 發行版,也就是一個可以在軟盤上執行的系統。

因為在 64 位系統上編譯 32 位程式碼有點棘手。為了更簡單,小哥用他的 32 位 CPU 的舊筆記本來做這一切。

可以使用 32 位系統的 VirtualBox,如果要用 64 位,新增命令“ARCH=x86”,例如:make ARCH=x86 tinyconfig。

下面就是把現代 Linux 作業系統裝進一張 1.44MB 軟盤的大概過程:

1、建立並進入你想要儲存檔案的目錄

2、配置和構建定製核心

使用最新 Linux 核心(版本 5.13.0-rc2):

gitclone--depth=1https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

進行最小配置:

maketinyconfig

新增額外配置:

makemenuconfig

從選單中選擇以下選項:

將設定儲存並退出,等待編譯完成,最後核心將在 arch/x86/boot/bzImage 中構建,把它移到主目錄。

3、 新增工具

如果沒有工具,核心只會啟動,無法執行任何操作。小哥使用 BusyBox(最流行的輕量級工具之一),下載並解壓:

wgethttps://busybox.net/downloads/busybox-1.33.1.tar.bz2

進入目錄,進行啟動配置:

makeallnoconfig

然後選擇你想要的工具:

makemenuconfig

每個選單項都顯示各工具需佔用多少 KB,合理選擇哦。

小哥的選擇:

儲存配置並退出,編譯完成後_install 目錄下會建立一個包含所有檔案的檔案系統,把它移到主目錄。

4、新增目錄結構

有了核心和基本工具,仍然需要一些額外的目錄結構:

cd../filesystemmkdir-pv{dev,proc,etc/init.d,sys,tmp}sudomknoddev/consolec51sudomknoddev/nullc13

接下來建立幾個配置檔案,啟動後顯示歡迎訊息:

cat>>welcome<<EOFSomewelcometext...EOF

然後配置處理啟動、退出和重啟的 Inittab 檔案 & 實際的初始化指令碼,並使初始化指令碼可執行,並將所有檔案的所有者設定為 root。(限於篇幅命令已省略,具體可檢視此連結

最後,將此目錄壓縮為一個檔案。

可通過從主目錄執行 QEMU(在 GNU/Linux 平臺上廣泛使用的模擬處理器)對以上所有內容進行測試。

5、下面就是把這一切放進軟盤了

建立指向核心和檔案系統的 Syslinux 引導檔案(boot file):

cat>>syslinux.cfg<<EOFDEFAULTlinuxLABELlinuxSAY[BOOTINGFLOPPINUXVERSION0.1.0]KERNELbzImageENDinitrd=rootfs.cpio.gzEOFchmod+xsyslinux.cfg

建立空軟盤映像:

ddif=/dev/zeroof=floppinux.imgbs=1kcount=1440mkdosfsfloppinux.imgsyslinux--installfloppinux.img

Mountit!並將syslinux、核心和檔案系統複製到軟盤映像:

sudomount-oloopfloppinux.img/mntsudocpbzImage/mntsudocprootfs.cpio.gz/mntsudocpsyslinux.cfg/mntsudoumount/mnt

完成!

現在你就有了自己的發行版映像 floppinux.img,你可以燒錄到軟盤,然後在真正的硬體上啟動它了!

啟動耗時 1 分多

小哥花了不到 3 分鐘燒錄成功,然後開始了首次啟動,成功,大概只花了 1 分多鐘。

小哥(老哥)表示,在這種裸機的現代硬體上,唯一能阻止啟動速度的就是軟碟機的實際速度。它們最大原始速度為 125KB/s。實際上可能會更慢。

下面是軟盤佔有空間總結,可以看到還剩 272KiB。

網友熱議:“92 年的時候我可是需要兩張 5.25”的軟盤”

硬體開源專案網站 Hackaday 對小哥的創造進行了報道,並點評道:

當然,為了將最新的 Linux 核心和 BusyBox 構建到大約 1MB 的空間,必須做出一些讓步,所以 Floppinux 肯定不是任何人所說的日常驅動程式。一旦系統啟動,除了編寫一些 shell 指令碼之外,就沒有什麼可做的了。

即使你沒有軟盤,也值得跟著他的教程,在 QEMU 中啟動映像,看看如何從零開始正式構建一個 Linux 系統。這事不僅可以用來吹牛,這樣一個最小安裝的所有元件如何組合在一起的知識,對學習嵌入式 Linux 裝置也很有用。

而在 Hacker News 論壇上很多人紛紛對小哥豎起大拇指,有人表示最令他驚訝的就是用的最新版的 Linux 核心和 BusyBox。而且這對其他嵌入式系統也很有用。

有人說,92 年的時候我可是需要兩張 5.25 英寸的軟盤來執行 Linux!

開發者介紹

文中的主角“小哥”叫 Krzysztof Jankowski,來自波蘭,85 後,是一名專業的遊戲開發者和數字藝術家。

25 年前就開始用 QBASIC 程式設計,喜歡 FOSS、畫素畫(pixel art)、樹莓派,、遊戲引擎等。

去年,他創辦了自己的公司 Cyfrowy Nomada,與 beffio 簽訂了高階遊戲引擎開發合同。他成為一名專業的遊戲開發商的夢想成為現實。

他和他的夥伴們開發的遊戲“自由坦克”(Tanks of Freedom)不知道有人玩過沒?

GitHub 傳送門:點此直達