如何從零開始構建計算機軟體系統?

假定有一台工作正常、配件齊全、性能良好的 x86 架構的計算機,今拆除其硬碟,換上一塊空白的硬碟。同時再假定你擁有所有開源軟體工具鏈,以及其歷史各發布版本的源代碼(包括 gcc、glibc、binutils、linux、grub等開源軟體和工具鏈),但這些源代碼是印刷在紙上的,可以通過鍵盤輸入(不計鍵盤輸入的時間)。在不藉助外部存儲設備,也不得從網路下載數據的前提下,能否最終在該計算機的硬碟上安裝好 linux 操作系統?

如果允許你事先向硬碟中寫入至多 512 個位元組的數據呢?


找到了有人提到的美國朋友,侵刪

---------------------------------------------------------------------------------------------------------------

很久以前,那還是我用win98的時候有次我系統崩潰了,因為我是電腦白痴,我朋友給我介紹了一個高手來幫我修電腦。

  他看了一下電腦,問我有沒有98的盤,我說沒有。

  他想了一下,叫我把固定電話拿給他,我想修電腦要電話幹什麼,但人家是高手,我也不好說什麼,就把電話拔下來給他了。

  他把電話線空著的一頭接在電腦的一個插孔內,然後進入了dos,然後就開始在電話上不停地按著鍵,他按鍵的速度非常快,但是只按0,1兩個鍵,我搞不 懂這有什麼用,但也不敢問,看了半個多小時,他還是不停地按這兩個鍵,我漸漸地有些困,我問他這東西要搞多久,他說要幾個小時,我給他倒了杯茶,就一個人 去隔壁睡覺了。

  醒來的時候,一看已經過了4個多小時,我起身到隔壁,看見他正在98裡面調試,過了一會兒,他說,你試試,我坐上椅子用了一下,真的好了,我當時也不 懂電腦,謝過,人家就走了。後來我慢慢對電腦有了了解,終於了解,原來當時那位高手是用機器語言編了一個98系統,我後來問我朋友那位高手的下落,我朋友 說前幾年去了美國之後,杳無音訊……

接著還有

  很久以前,那還是我用winXP的時候有次我系統崩潰了,因為我是電腦白痴,我朋友給我介紹了一個高手來幫我修電腦。

  他看了一下電腦,問我有沒有XP的安裝盤,我說沒有。

  他想了一下,叫我把一張空的DVD刻錄盤和一根針拿給他,我想修電腦要刻錄盤和針幹什麼,但人家是高手,我也不好說什麼,就把DVD刻錄盤拿一張來給他了。

  他把針頭對著刻錄盤戳,他戳的速度非常快,但是只戳深或淺,我搞不懂這有什麼用,但也不敢問,看了半個多小時,他還是不停的戳著DVD刻錄盤,我漸漸地有些困,我問他這東西要搞多久,他說要幾個小時,我給他倒了杯茶,就一個人去隔壁睡覺了。

  醒來的時候,一看已經過了4個多小時,我起身到隔壁,看見他正在Xp裡面調試,還裝上了office、photoshop、迅雷等軟體……過了一會 兒,他說,你試試,我坐上椅子用了一下,真的好了,我當時也不懂電腦,謝過,人家就走了。後來我慢慢對電腦有了了解,終於了解,原來當時那位高手是用針頭 刻了一個單面雙層的DVD,在裡面刻上了Xp、office、photoshop、魔獸世界的安裝程序,我後來問我朋友那位高手的下落,我朋友說前幾年去 了美國之後,杳無音訊……

還有

  很久以前,那還是我用winXP的時候有次我不小心把D盤格了,因為我是電腦白痴,我朋友給我介紹了一個高手來幫我恢複數據。

  他看了一下電腦,問我有沒有備份過Ghost,我說沒有。

  他想了一下,叫我把一塊磁鐵拿給他,還問我D盤裡有什麼東西,我想修電腦要磁鐵幹什麼,但人家是高手,我也不好說什麼,就把磁鐵給他了,還告訴他我D盤裡全是火影忍者的動畫。

  他把硬碟拆了,用磁鐵在上面畫圈,他畫圈的速度非常快,但是只有碰到或不碰到,我搞不懂這有什麼用,但也不敢問,看了半個多小時,他還是不停地在硬碟上畫著圈,我漸漸地有些困,我問他這東西要搞多久,他說要幾個小時,我給他倒了杯茶,就一個人去隔壁睡覺了。

  醒來的時候,一看已經過了4個多小時,我起身到隔壁,看見他正在D盤裡面調試,裡面全是火影忍者的動畫片,過了一會兒,他說,你試試,我坐上椅子用了 一下,真的好了,我當時也不懂電腦,謝過,人家就走了。後來我慢慢對電腦有了了解,終於了解,原來當時那位高手是用磁鐵直接在硬碟上寫數據,憑著驚人的記 憶力將火影忍者的動畫片都寫入了硬碟,我後來問我朋友那位高手的下落,我朋友說前幾年去了美國之後,杳無音訊……

還有

  就在最近,我剛裝上的Vista突然自己崩潰了,雖然我會寫很多程序,但是Vista崩潰了我也沒有辦法,我朋友給我介紹了一個高手來幫我修電腦。

  他看了一下電腦,問我有沒有Vista的安裝盤,我說沒有。

  他想了一下,叫我拿一根沒用的網線和一把剪刀,我想修電腦要網線和剪刀幹什麼,但人家 是高手,我也不好說什麼,就拿了一根沒用的網線和一把剪刀給他。

  他把網線一頭戳到網卡上,剪斷另外一頭,然後就在哪裡不停的撥弄那八根線。他撥弄的速度非常快,但是撥弄得線總是不一樣,我搞不懂這有什麼用,但也不敢問,看了半個多小時,他還是不停的撥弄著網線。我漸漸的有些困,我問他這東西要搞多久,他說要幾個小 時,我給他倒了杯茶,就一個人去隔壁睡覺了。

醒來的時候,一看已經過了4個多小時,我起身到隔壁,看見他正在Vista裡面調試,還裝給 裝好了Visual Studio 2005 Team Suit、Ms SqlServer 2005 Enterprise Edition、BT,還邊下載邊看American片……過了一會兒,他驚覺我站在後面,不好意思地對我說,你試試。我坐上椅子用了一下,真的好了,我當時太震驚了,整個人傻在那裡,謝過人家就走了。 後來我讀到了前面那兩篇文章,終於醒悟,原來當時那位高手是用網線模擬網路啟動,下載 了整個Vista,還有Visual Studio 2005 Team Suit、Ms SqlServer 2005 Enterprise Edition、 BT,以及他正在看的American片,我後來問我朋友那位高手的下落,我朋友說前幾年去了美國之後,杳無音訊……


想起當年用 DOS 的 DEBUG 命令手動改 MBR 的年代……

Linus 他們早期寫 Linux 的時候也是手動寫 bootloader 進去,直到後來 LILO / GRUB 什麼的成熟起來了。

回到問題,說不計算鍵盤輸入的時間,是否可以考慮爲硬盤裏已經存了所有軟體的源代碼了呀。

那感覺先 bootstrap 個 MSDOS.SYS/http://COMMAND.COM ,然後 bootstrap 個 FreeDOS ,然後在上面 bootstrap 個 GCC 工具鏈,然後再 bootstrap 個 LFS ,應該能在一年內做到吧。

要是把我關監獄裡並允許我帶個大硬盤的電腦我可以考慮一下試一試……


純空白硬碟應該是不行了,現在的PC機里沒有BASIC解釋器,沒有可啟動代碼的話就死在那裡了……

預先寫512位元組的內容也就能寫一個分區表和MBR。

512位元組的話,應該夠寫一個從鍵盤讀取16進位輸入到內存,然後執行的程序了。因為有BIOS中斷調用,寫盤什麼的也都可以了。後面就可以通過這個程序放進DOS/FreeDOS之類的COM,再根據 @fc farseer 說的bootstrap Linux。

估計需要個USB3.0的鍵盤……


1、使用事先準備好的代碼,人肉計算出一個完整的操作系統在硬碟上每一個bit都是什麼內容

2、用512位元組寫一個超級簡單的操作系統,通過在鍵盤上輸入1和0來覆蓋硬碟內容

3、打進去

大約三千年可以做完


那就得找我那個會用網線和電話的同學了……


pxe


那麼問題來了,你那塊空白的硬碟算外部存儲設備么


這給你一瓶鹽酸和一瓶氫氧化鈉以及一堆不知名礦物與氣體讓你製備所有化學試劑有什麼區別


這純屬浪費時間


我選擇網路啟動。


推薦閱讀:

如何把兩台電腦連接在一起,並行執行?
Windows 10 已經推出 1 年多了到底跟 Windows 7 比怎麼樣?
為什麼電腦的風扇背對 CPU 吹,而人是把風扇面對自己吹?

TAG:開源軟體 | 計算機 | 計算機系統 | 源代碼 |