7 月 18 日消息,用軟盤啟動 Linux 系統(tǒng)曾經(jīng)很“家常便飯”,當然那都是 90-00 年代的事了。
但現(xiàn)在,即使你還有一張能用的 3.5 英寸軟盤,可 1.44MB 的容量遠遠裝不下一個現(xiàn)代 linux 內(nèi)核,更不用說還得加上所有支持軟件了。
但奇人有招,波蘭一位游戲開發(fā)小哥只用一張軟盤就把現(xiàn)代 Linux 操作系統(tǒng)嵌進去了。
盤上還有幾百 KiB 的剩余空間,而且用的都是最新“組件”,包括今年 5.16 號才發(fā)布的 5.13.0-rc2 版本的 Linux 內(nèi)核。
一張軟盤裝下現(xiàn)代 Linux 系統(tǒng)
小哥把這個系統(tǒng)命名為 Floppinux,在它的官網(wǎng)上帶大家走了整個過程,包括從拉?。╬ull down)、編譯源代碼到創(chuàng)建最終的磁盤映像的所有命令。
而之所以做這么一件事情,是因為小哥覺得自己用了好多年 Linux,也用過很多 Live-CD(能夠在不安裝到硬盤的前提下,體驗 Linux 操作系統(tǒng)的東西)。
但他對其背后的基本原理知之甚少,所以決定動手研究一下。
小哥的第一個目標是運行 Nomad Diskmag 程序。
Diskmag 這個遠古東西不知道有人了解嗎?
它的全稱叫 disk magazine,也就是磁盤雜志,是一種在上世紀 80-90 年代,以軟盤形式發(fā)行的電子雜志。90 年代后就被在線出版物所取代了。
小哥已經(jīng)用 bash 腳本搞定了前端界面,就差封面、目錄和 cat 每個文件的正文了。
為了運行他寫的腳本,需要一個可用的 Linux 發(fā)行版,也就是一個可以在軟盤上運行的系統(tǒng)。
因為在 64 位系統(tǒng)上編譯 32 位代碼有點棘手。為了更簡單,小哥用他的 32 位 CPU 的舊筆記本來做這一切。
可以使用 32 位系統(tǒng)的 VirtualBox,如果要用 64 位,添加命令“ARCH=x86”,例如:make ARCH=x86 tinyconfig。
下面就是把現(xiàn)代 Linux 操作系統(tǒng)裝進一張 1.44MB 軟盤的大概過程:
1、創(chuàng)建并進入你想要保存文件的目錄
2、配置和構(gòu)建定制內(nèi)核
使用最新 Linux 內(nèi)核(版本 5.13.0-rc2):
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
進行最小配置:
make tinyconfig
添加額外配置:
make menuconfig
從菜單中選擇以下選項:
將設(shè)置保存并退出,等待編譯完成,最后內(nèi)核將在 arch/x86/boot/bzImage 中構(gòu)建,把它移到主目錄。
3、 添加工具
如果沒有工具,內(nèi)核只會啟動,無法執(zhí)行任何操作。小哥使用 BusyBox(最流行的輕量級工具之一),下載并解壓:
wget https://busybox.net/downloads/busybox-1.33.1.tar.bz2
進入目錄,進行啟動配置:
make allnoconfig
然后選擇你想要的工具:
make menuconfig
每個菜單項都顯示各工具需占用多少 KB,合理選擇哦。
小哥的選擇:
保存配置并退出,編譯完成后_install 目錄下會創(chuàng)建一個包含所有文件的文件系統(tǒng),把它移到主目錄。
4、添加目錄結(jié)構(gòu)
有了內(nèi)核和基本工具,仍然需要一些額外的目錄結(jié)構(gòu):
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
接下來創(chuàng)建幾個配置文件,啟動后顯示歡迎消息:
cat >> welcome << EOF Some welcome text... EOF
然后配置處理啟動、退出和重啟的 Inittab 文件 & 實際的初始化腳本,并使初始化腳本可執(zhí)行,并將所有文件的所有者設(shè)置為 root。(限于篇幅命令已省略,具體可查看此鏈接)
最后,將此目錄壓縮為一個文件。
可通過從主目錄運行 QEMU(在 GNU/Linux 平臺上廣泛使用的模擬處理器)對以上所有內(nèi)容進行測試。
5、下面就是把這一切放進軟盤了
創(chuàng)建指向內(nèi)核和文件系統(tǒng)的 Syslinux 引導(dǎo)文件(boot file):
cat >> syslinux.cfg << EOF DEFAULT linux LABEL linux SAY [ BOOTING FLOPPINUX VERSION 0.1.0 ] KERNEL bzImage END initrd=rootfs.cpio.gz EOF chmod +x syslinux.cfg
創(chuàng)建空軟盤映像:
dd if=/dev/zero of=floppinux.img bs=1k count=1440 mkdosfs floppinux.img syslinux --install floppinux.img
Mount it ! 并將 syslinux、內(nèi)核和文件系統(tǒng)復(fù)制到軟盤映像:
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
完成!
現(xiàn)在你就有了自己的發(fā)行版映像 floppinux.img,你可以燒錄到軟盤,然后在真正的硬件上啟動它了!
啟動耗時 1 分多
小哥花了不到 3 分鐘燒錄成功,然后開始了首次啟動,成功,大概只花了 1 分多鐘。
小哥(老哥)表示,在這種裸機的現(xiàn)代硬件上,唯一能阻止啟動速度的就是軟驅(qū)的實際速度。它們最大原始速度為 125KB/s。實際上可能會更慢。
下面是軟盤占有空間總結(jié),可以看到還剩 272KiB。
網(wǎng)友熱議:“92 年的時候我可是需要兩張 5.25”的軟盤”
硬件開源項目網(wǎng)站 Hackaday 對小哥的創(chuàng)造進行了報道,并點評道:
當然,為了將最新的 Linux 內(nèi)核和 BusyBox 構(gòu)建到大約 1MB 的空間,必須做出一些讓步,所以 Floppinux 肯定不是任何人所說的日常驅(qū)動程序。一旦系統(tǒng)啟動,除了編寫一些 shell 腳本之外,就沒有什么可做的了。
即使你沒有軟盤,也值得跟著他的教程,在 QEMU 中啟動映像,看看如何從零開始正式構(gòu)建一個 Linux 系統(tǒng)。這事不僅可以用來吹牛,這樣一個最小安裝的所有組件如何組合在一起的知識,對學(xué)習(xí)嵌入式 Linux 設(shè)備也很有用。
而在 Hacker News 論壇上很多人紛紛對小哥豎起大拇指,有人表示最令他驚訝的就是用的最新版的 Linux 內(nèi)核和 BusyBox。而且這對其他嵌入式系統(tǒng)也很有用。
有人說,92 年的時候我可是需要兩張 5.25 英寸的軟盤來運行 Linux!
開發(fā)者介紹
文中的主角“小哥”叫 Krzysztof Jankowski,來自波蘭,85 后,是一名專業(yè)的游戲開發(fā)者和數(shù)字藝術(shù)家。
25 年前就開始用 QBASIC 編程,喜歡 FOSS、像素畫(pixel art)、樹莓派,、游戲引擎等。
去年,他創(chuàng)辦了自己的公司 Cyfrowy Nomada,與 beffio 簽訂了高級游戲引擎開發(fā)合同。他成為一名專業(yè)的游戲開發(fā)商的夢想成為現(xiàn)實。
他和他的伙伴們開發(fā)的游戲“自由坦克”(Tanks of Freedom)不知道有人玩過沒?
GitHub 傳送門:點此直達
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。