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