
作者 | Dmitry.GR 翻譯 | 鄭麗媛出品 | CSDN(ID:CSDNnews)
原文連結:https://dmitry.gr/?r=05.Projects&proj=36.%208pinLinux

“長期以來,我一直在嘗試用最少的元件構建一臺能執行 Linux 的微型計算機。我也嘗試過極限簡化和各種有趣的形態設計,而這次我想做一次新的嘗試:用最簡單的方式,即只用三個 8 引腳晶片,來組裝出一臺可執行 Linux 的迷你電腦套件。”
設計一臺“最小化”的極簡電腦
(1)初步構思
曾幾何時,人們可以買到 DIY 套件,然後自己在家中親手組裝出一臺能與市售計算機媲美的裝置——可如今,這樣的時代早已一去不返。
現在的計算機由成百上千顆複雜的大型晶片構成,這些晶片不僅沒有公開的資料手冊,還透過複雜的電源傳輸拓撲結構供給數百瓦的電力。而現代作業系統對硬體的要求也愈發苛刻:GB 級別的 RAM、TB 級別的儲存空間、始終線上的網路連線……簡直像是為了“更好地監控你”而生。
那麼問題來了:如果想在家就能動手組裝一臺現代計算機,可能嗎?我認為,只要能執行 Debian Linux、能用 vi 編輯器、能用 gcc 編譯器並能執行 make 命令,就已經夠“現代”了——於是這成為了我的目標。
基於我之前的探索,我知道這其實並不需要太高的配置:8MB 記憶體 + 1 MIPS(百萬條指令每秒)的處理能力就足夠了。儲存方面更簡單,SD 卡早就能輕鬆滿足容量需求。雖然現在的電腦大多沒有序列埠了,但對於嵌入式系統來說,序列埠仍是最簡單的介面方式,用 USB 轉序列埠即可代替傳統序列埠。
因此,最終我設定的目標如下:至少 8MB 的 RAM、至少 1 MIPS 的處理能力、SD 卡儲存、USB 介面(用於序列埠通訊)。
在硬體設計方面,我希望能設計出一種在家也能輕鬆焊接組裝的計算機,讓焊接經驗幾乎為零、僅擁有一把 RadioShack 45W 電烙鐵的人也能做到。整機要小巧、可愛且低成本。為了降低焊接難度,我決定只使用 8 引腳晶片,這本身也是一次趣味挑戰。由於每顆晶片至少要保留電源和地線引腳,剩下最多隻能用 6 個引腳來實現功能。這一限制對整個電路設計影響非常大,也造成了很多侷限。
在外形上,我決定將其設計為一個小巧的圓形電路板,在頂部邊緣設定一個 USB-C 介面,如下圖所示。這就是最終能正常工作的版本,也確實是我親手用 RadioShack 45W 電烙鐵焊接完成的!

(2)零件選擇
事實上,能支援 USB 通訊的 8 引腳晶片幾乎沒有,不過勉強說的話,應該有“一種半”。
第一種是真正可用的解決方案:PL2303GL。這是一款非常小巧、實用的 USB 轉序列埠橋接晶片,無需任何外部元器件,還能額外輸出 100mA 的 3.3V 穩壓電壓,非常方便!它的表現完全符合預期,我個人非常喜歡。Prolific 官方也為幾乎所有主流和小眾作業系統都提供了驅動支援。唯一稍微麻煩一點的是,在 macOS 上,這些驅動程式需要從 App Store 安裝,但整個過程也還算簡單。需要一提的是,它的前代型號 PL2303SA 其實也可以用,但由於它已經停止生產(EOL),因此我並不推薦。
那所謂的“半個晶片”又是什麼意思呢?這就要提到 V-USB 專案了——它讓 ATTINYx5 系列晶片也可以實現 USB 通訊功能。雖然只能支援低速(Low-Speed) USB ,並且會佔用大量 CPU 資源,但它的確可以工作。問題在於:現有的 USB 轉序列埠協議基本都要用 BULK 傳輸端點,而 USB 規範中明令禁止在低速裝置中使用 BULK 端點。如果我們要完全遵守 USB 標準,那就得用中斷端點(Interrupt Endpoint)自己設計一個通訊協議,併為所有主流作業系統編寫驅動程式——這個工作量實在太大,我也沒什麼興趣。所幸,所有主流作業系統實際上並未嚴格執行這一規則,即便是低速 USB 裝置用上了 BULK 端點,也依然能正常識別和通訊。所以,我們可以直接用 V-USB 模擬序列埠裝置(ACM 介面),基本上都能用。
至於 RAM 的選擇,其實沒什麼好猶豫的,SOIC-8 封裝的 PSRAM 就是最合適的解決方案。目前常見的供應商包括 ISSI、APMEMORY 和 Vilsion,他們已經吹了一年多說自己要出 16MB 的 PSRAM 晶片了,但到現在都沒實現承諾,所以很可能是在畫餅。好在 8MB 的晶片貨源充足、價格便宜,在各大電商平臺花幾美元就能買到。因此,我最終決定直接用 8MB 的 RAM 來構建這臺 Linux 小電腦。
最後一個問題是:該選用哪款微控制器?透過引數篩選功能,我最終把目光放到了 STM32G0 系列。按理說,STM 晶片應該作為最後的選擇,因為它們從不認真釋出完整準確的勘誤手冊。STM32G030 第一個被淘汰,因為其中一個引腳被硬設為 RESET,只剩 5 個 I/O 太侷限了。STM32G031J4M6 看起來還行,這是一款比較新的晶片,也許 STM 這次有點靠譜,把以往的各種坑都填了?再說了,這個專案計劃中也不會用到太多片上外設,也許會沒問題?32KB 快閃記憶體、8KB RAM——這兩個數字秒殺所有其他選項!Cortex-M0+ 核心也讓它成為效能方面最強的候選之一。官方資料顯示,這款晶片主頻為 64MHz,稍加努力能達到 80MHz,再下點狠手,甚至能跑到 150MHz。假設我能避開勘誤表中各種已知/未知的 bug,這毫無疑問是最強選擇——雖然我不太喜歡 STM,但也只能這樣了。
硬體設計
(1)控制檯
UART 的引腳幾乎無法與其他功能複用。試圖將 UART 的 RX 引腳複用會帶來資料丟失的風險——當“其他功能”正在執行時,如果此時正好有序列埠資料到來,就會被錯過。而將 UART 的 TX 引腳複用也同樣不靠譜:無論“其他功能”切換得有多快,只要產生低電平脈衝,PC 就可能誤判這是一位序列埠字元。如果是短暫的低電平,PC 通常會將其識別為 0xFF。
理論上來說,可以透過啟用奇偶校驗來掩蓋這些干擾,但這並不是可靠方案。更何況,2025 年了誰還會用奇偶校驗呢?說到底,UART 引腳由於缺乏更高層的協議、片選訊號或獨立時鐘,基本不適合與其他功能複用。
所以,這 6 個引腳中,已經被佔用掉 2 個了。我也只能無奈接受這個現實……
(2)RAM
所有的 SPI PSRAM 晶片都支援 QSPI 模式,以提高傳輸速度。但遺憾的是,QSPI 需要 6 個引腳,而現在只剩下 4 個了。好在多數 PSRAM 也支援雙線 SPI 模式,這種模式下 MOSI 和 MISO 會同時傳輸,一次時鐘週期內傳送 2 位資料,是普通 SPI 速率的兩倍。更棒的是,它不需要比普通 SPI 多佔任何引腳,並且可以與其他裝置共享 SPI 匯流排——因為在未被選中(deselected)時,這些裝置不會驅動 MISO,也不會嘗試讀取 MOSI。
不過,STM32G031 並不原生支援 dual-SPI。如果想用,只能透過軟體模擬實現。但問題來了:軟體實現 dual-SPI 的速度是否能趕上硬體 SPI 模組?硬體 SPI 模組可以以 CPU 時鐘一半的速率執行,並能連線 DMA 單元實現持續的資料傳輸。
要想用純 CPU 模擬實現同樣的吞吐,需要保證每次傳輸週期只消耗 4 個指令週期,這幾乎是 CPU 的極限操作,再快就不可能了。既然最快也只是“勉強追平”硬體 SPI,那又何必折騰?結論:RAM 還是用普通 SPI 訪問就好。不過,這下就直接用掉了最後剩下的 4 個引腳了。唉……
(3)SD 卡
所以,情況變得棘手了:沒有引腳剩餘,但還要連一個 SD 卡。
SD 卡可以使用 SPI 通訊,只需再提供一個引腳用於片選訊號即可,但已經沒有多餘的引腳了。我考慮了幾種方案,最簡單的做法是,在 RAM 的 nCS 上接一個反相器(inverter),並將其輸出作為 SD 卡的 nCS 訊號。我把這個思路被做了原型測試,發現效果還不錯。但有兩個問題:首先,有些 SD 卡不能接受那種“被選中但沒有資料傳送”的情況。如果兩次 RAM 訪問之間沒有寫入資料,對 SD 卡來說就像是這種異常操作,存在相容性隱患。其次是反相器需要一個額外的 IC 或至少一個三極體,這會增加 BOM 複雜度。對於想 DIY 這塊板子的初學者來說,板子上的元件越多,組裝就越困難。因此這個方案被貼上了“最壞方案”標籤,暫時擱置,還得繼續尋找更好的解決方法。
由於這個裝置的資料產出速率不高,UART 的波特率其實可以設得很低。於是可以考慮:是否能把 UART 的 TX 引腳加個低通濾波器,然後同時用作 SD 卡的 nCS?只要 SD 命令足夠短、時鐘頻率足夠高,選通訊號的時間視窗就可以被濾波器“放過去”。這個方法在理論上可行,但實際上非常脆弱。我進一步計算發現,如果想符合 SD 協議初始化要求,UART 的波特率必須低至 300bps 或更低,而即便如此,一旦 SD 卡響應速度稍慢,系統就容易崩潰,因為 SD 協議中明確禁止在讀取響應過程中取消片選訊號。所以,這個方案甚至比第一個還差。
正當我準備回到最初那個“最壞方案”時,又突然冒出一個更瘋狂的想法:RAM 是否介意被選中後又立即取消,而不執行任何命令或資料傳輸?實驗表明:不介意,這項測試在所有 SPI RAM 晶片上都通過了!
為啥?因為SD 卡除了支援 SPI,還支援 SDIO 協議。SDIO 不用 4 根單向線,而是用 1 根時鐘線(CLK)和 2 根雙向線(CMD 和 DAT)。如果是 4-bit 模式,會額外加 3 根 DAT,但本專案中只用 1-bit 模式即可。儘管 SDIO 協議在公開 SD 規範中並沒有詳細說明,但可以透過觀察推理出來——這個方案雖然在引腳上節省不了多少,但帶來了新的可能性組合。
於是問題變成:是否能把 SDIO 的 3 根訊號線與 RAM 的引腳複用?經過反覆推演,終於找到“可行對映”:RAM 的 nCS → SD 的 CLK;RAM 的 CLK → SD 的 CMD;RAM 的 MOSI → SD 的 DAT。分析各自訪問行為後發現:當訪問 RAM 時,SD 卡看到的是 CLK 拉低,而當 RAM 被取消片選,CLK 就拉高。RAM 的 SPI 設定為 Mode 3,CLK 空閒態為高電平,所以每次訪問 RAM,對 SD 來說都像是 CMD 線上傳送了一個“1”位。這正好對應 SDIO 協議中命令間隙的空閒狀態,是安全的。
同樣,SD 卡在命令之間不會讀或寫 DAT 線,所以 RAM 的 MOSI 訊號不會被誤判。反過來看,當訪問 SD 卡時,需要切換 CLK 和寫入 CMD、DAT,對 RAM 來說就是快速選中再取消——RAM 也能接受這個行為。完美!
需要注意的是,這個方案的前提是 SD 卡事務必須“一次性完成”,過程中不能訪問 RAM。這就意味著不能用多塊讀寫(multi-block),考慮到目前這種引腳緊張的現狀,這是可以接受的。
好了,這就是一個潛在可行的解決方案!接下來是實驗驗證,結果是——成功!當然了,由於 STM32G031 沒有對應的硬體模組,因此 SDIO 的訪問是完全手工 bit-bang 實現的。最終我寫的彙編程式碼達到了每位 14 個 CPU 週期的傳輸效率,總的來說表現還不錯。
(4)再回到控制檯
現在所有的 I/O 介面理論上都能塞進 6 個引腳裡了,是時候正式分配每個引腳的功能了。
部分引腳的功能已經確定:RAM 要用標準 SPI,對應的那幾根線就直接保留給它。SD 卡與 RAM 共享這些線,也無需額外分配。還剩下引腳 7 和引腳 8,這兩個引腳正好是 SWD 除錯介面,在開發早期用於除錯非常方便。另外透過排除法,它們也也需要作為序列埠。引腳 8 作為 A14 可以充當 USART2.TX,透過啟用 USART 的“引腳交換”功能,可以將其轉換為 USART2.RX。因為如果沒有硬體協助的話,UART 接收是很麻煩的,所以引腳 7 就留給 TX。這個引腳並不支援 USART 的任何替代功能,但沒關係,我們可以用 bit-bang 的方式手工實現 UART 傳送。
有趣的是,之前在考慮共享引腳方案時,我還想著讓 UART 儘可能慢;而現在,為了手動實現 UART,波特率又得儘可能快——因為傳送期間 CPU 必須專注“盯著發”,不能被打斷。每傳送一個字元(以 115200bps 計算)大約只需 87 微秒。理論上我們也可以透過定時中斷逐位傳送每個字元,但中斷帶來的時間抖動可能造成序列埠誤碼。幸好,大多數情況下裝置並不會頻繁輸出,所以現在這個方案已經很好了。UART 傳送 bit-bang 實現效果良好,引腳分配也已完成,接下來就可以進入軟體開發階段了。
但你可能會問,初次燒錄怎麼辦?在這種“非常規引腳佈局”下,STM32 官方的引導載入程式(bootloader)怎麼可能支援?確實不支援,所以我在板子上設計了 4 個可焊接跳線橋(solder bridge),透過跳線配置可以切換序列埠的連線方式:在“開發模式”下,bootloader 可用,但 RAM 和 SD 卡都無法工作;在“正式模式”下,ROM bootloader 失效,但專案可以正常啟動。幸好,本專案帶有自定義 bootloader,所以在初次燒錄之後,以後就無需依賴 ROM bootloader 了。

關於軟體的故事
(1)模擬器
早在專案開始前,我就已經寫好了一個可以啟動 Linux 的 MIPS 模擬器,整個程式碼用 ARMv6M 組合語言編寫,要在新專案中複用這部分程式碼並不難。
為了進一步提升效能,我還寫了一個 MIPS 到 ARMv6M 的 JIT(即時編譯器),執行效果也不錯。但不幸的是,這個 JIT 編譯器的體積太大,編譯後的程式碼有 46KB,而我在這個專案中可用的翻譯快取只有 6KB,因此效能提升效果並不明顯。最終,我選擇將這個 JIT 暫時擱置,留待日後再用。
在這次專案中,STM32G031 晶片的 32KB 快閃記憶體被劃分為兩個區域:8KB 分配給載入程式(bootloader),24KB 用於主程式(main application)。除了一些必要的最佳化和適配,主模擬器程式碼基本保留了原樣。
(2)引導載入程式(bootloader)
那麼,為什麼需要一個載入程式呢?原因其實很簡單:板子上已經沒有多餘的引腳用於除錯;專案還處於開發階段,需要一種方式來升級韌體、修復 bug 或新增新功能。最直接有效的方案就是設計一個支援 SD 卡、能夠識別 FAT 檔案系統、並在檢測到新版本時自動升級韌體的 bootloader。
之所以 bootloader 的大小會達到 8KB(實際上是 6.5KB,但由於快閃記憶體塊大小為 2KB,所以向上取整到了 8KB),是因為它必須包含完整的 SDIO 驅動、FAT 檔案系統驅動、快閃記憶體寫入程式碼以及大量的日誌記錄以排查更新時的各種問題。當然,它還內嵌了一個基於 bit-bang 實現的 UART 傳送模組。bootloader會檢查主程式映象中偏移地址 16 處的數值,這是主程式的版本號。只有當更新檔案中的版本號高於當前主程式,並且通過了一些基本校驗,才會執行更新。至於bootloader 自身的版本號,則被記錄在偏移地址 8 處,僅用於顯示啟動資訊。符合條件的韌體更新檔名為 FIRMWARE.BIN,一旦透過校驗,就會被應用。
bootloader 本身在晶片復位後執行,其預設頻率為 16MHz。而主程式執行時的頻率是可調的,方便使用者嘗試超頻。但頻繁地手動修改程式碼、重新編譯並燒錄韌體,太費勁了。這個問題可以透過一個小技巧輕鬆解決:既然 bootloader 已經掛載了 FAT 檔案系統用於檢查更新,那麼順便也可以掃描是否存在以 CLOCK 開頭命名的檔案或資料夾。如果有,它後面的數字就會被解析為主程式的執行頻率(單位 MHz)。如果這個值不在合理範圍(32–200MHz)內,或者找不到相關檔案,則預設設為 132MHz。
(3)SD 卡分割槽與啟動過程
和我之前幾個基於 MIPS 模擬器的專案一樣,本專案的啟動流程也借鑑了 PC 啟動過程的設計。系統首先讀取 SD 卡的第一個扇區(sector),將其載入到記憶體前幾個位元組中,然後跳轉執行;這個一級引導程式碼會繼續尋找一個分割槽型別為 0xBB 的分割槽,並將其完整載入至記憶體地址 0x80001000,然後再次跳轉;此時,二級載入程式開始執行,它具備日誌和序列埠輸出功能;它會掃描所有分割槽,找到被標記為“active”的那個,嘗試將其掛載為 FAT16 檔案系統;如果該分割槽中存在名為 VMLINUX 的檔案,它會將其作為 ELF 檔案載入,並跳轉至其入口地址;如果該檔案是一個有效的 Linux 核心,就會進入 Linux 系統啟動流程。
傳遞給核心的啟動引數(command line)被硬編碼在 bootloader 中,不支援動態修改。它指定核心將 /dev/pvd3 作為根檔案系統,並以 /sbin/uMIPSinit 作為 init 程式,同時它還會嘗試將 /dev/pvd1 掛載為 /boot 目錄。
仔細閱讀上文可以發現,雖然系統要求根檔案系統必須在第 3 個分割槽(pvd3),但其它分割槽順序其實並沒有強制要求——這是刻意為之的設計。對於這個專案,FAT 分割槽是第一個,bootloader 分割槽是第二個,Linux 根檔案系統是第三個。為什麼呢?當插入具有多個分割槽的 SD 卡時,Windows 和 macOS 會掛載第一個分割槽, 而Linux 會掛載所有分割槽,這意味著:
-
FAT 分割槽既可以被 PC 端輕鬆訪問,也能被啟動後的 Linux 系統掛載到 /boot,用於檔案傳輸和更新;
-
無論從 PC 還是從 Linux 內部,都可以透過修改 CLOCK 檔案來調整 CPU 頻率,極大提升了靈活性。
bootloader 在開始執行任何操作之前,首先會靜靜地等待 6 秒鐘。這段延遲是在重新配置引腳前進行的,目的是為使用者留出一段時間連線偵錯程式(SWD),因為開發板上預留了一個 4 針的除錯介面。超過 6 秒後,bootloader 會重新配置引腳,此時 SWD 功能不再可用,偵錯程式無法再連線。此外,作為一種後備機制,bootloader 還會透過設定 option bytes 選項位元組,實現如下行為:如果將 BOOT0 引腳(第 8 引腳)拉高,晶片將從 ROM 啟動;
停用晶片的 RESET 引腳(在本專案中作為普通 GPIO 使用)和 BOR(低電壓復位,在本專案中沒有用)。一切就緒後,bootloader 會嘗試初始化與 SD 卡的通訊,檢查更新檔案,最後正式啟動系統。
效能如何?
STM32G031 官方標稱的最高執行頻率是 64MHz,那為什麼這裡還要討論讓它跑到 150MHz 呢?原因是:只要適當應用一些“黑科技”,STM32G031 實際上超頻能力非常強。STM32G031 的 CPU 核心電壓由內部穩壓器供電,而這個電壓可以透過 PWR->CR1 暫存器進行調整。ST 官方文件中提到了兩種電壓設定:VOS2(對應 1.0V 的 Vcore),在這種設定下晶片只能跑到 16MHz;VOS1(對應於 1.2V 的 Vcore),這種情況下晶片只能跑到 64MHz。
實際測試表明,在 VOS1 模式下,STM32G031 可以穩定執行在 75MHz 左右,這已經算是一次不錯的超頻了,但還不算驚豔。然而,早期文件(以及同系列晶片的資料)中還提到了 VOS0 模式,對應 1.35V 的 Vcore。如果我們強行嘗試開啟這個電壓模式,會怎樣?結果讓人驚喜——真的能用,而且超頻潛力大幅提高:大多數晶片在 136MHz 時仍能穩定執行,個別體質優良的晶片甚至能衝上 180MHz!當然,Flash 的訪問速度並不會隨著頻率提升而同步加快,因此必須正確設定 Flash 的等待週期(wait state),雖然這會影響一些速度提升,但綜合來看還是值得的。
在主頻達到 148MHz 時,這顆 STM32 模擬執行的 MIPS CPU,大致等效於 1.65MHz 的 MIPS R3000(停用 FPU)。它算不上效能怪獸,但能在大約一分鐘內啟動,並且vi、make、objdump 和 gcc 等工具都能正常工作——這是一個完整的 Debian 系統,你甚至可以透過 /boot 目錄匯入 .deb 包並安裝,一切都能跑起來。
最後組裝!
(1)獲取零件
你可以選擇自己購買零件,並把 PCB 板送到自己喜歡的打板廠打樣焊接。另外,我們也正在尋找合作廠商來打包成套件發售,如果你有相關線索可以聯絡我——這可能是極佳的 DIY 禮物!

(2)初步焊接
接下來是你們最關心的部分:如何自己動手焊出這塊板子。你手上這塊板子,其實我已經儘量把它設計成容易組裝的。我們推薦的焊接順序如下:
-
先焊 SD 卡座,對準位置後,一次焊一根引腳,然後焊四個固定角腳(焊的時候耐心一點);
-
焊接所有電容器,總共 4 個而且數值一樣,很好認,分別裝到 C1~C4 位置;
-
焊接所有電阻器,也是相同阻值,依次裝到 R2 ~ R7 位置(注意:沒有 R4),暫時不要焊 R101、R102、R201、R202,這幾個後面還有其他用途;
-
焊接主控晶片 STM32G031J6,放在標記為 U1 的位置,且方向很重要(第一個引腳上有一個小小的 ST Logo 標記,對應 PCB 板上那個小圓點);
-
焊接 USB 轉序列埠晶片(PL2303GL),放在標記為 U3 的位置。在這個晶片上,引腳 1 通常用晶片頂部的一個小凹坑標識,對齊板子上的標記後焊接即可。
(3)二次焊接
這個階段要給 STM32 刷入 bootloader。為此,可以下載 STM 提供的燒錄工具(Windows 使用者可使用官方 flasher,其他系統可以用開源的 stm32flash 工具)。準備一根 USB-C 線,用兩根細導線橋接電路板上標記為 R101 和 R201 的位置,此時確保 SD 卡未插入且尚未焊接 RAM 晶片。然後,將板子透過 USB-C 接入電腦,系統應識別到一個虛擬序列埠,使用燒錄工具寫入 BOOTLOADER.BIN 檔案(路徑和序列埠名稱視系統而定)。
燒錄完成後,移除用於橋接 R101 和 R201 的焊接導線,改為連線 R102 和 R202,這也是序列埠引腳的最終正確配置。最後,焊接 RAM 晶片(APS6408 或 VTI7064,位置為 U2),此晶片的引腳 1 也有一個小凹坑標識,將其對齊 PCB 上的小圓點並焊接即可。至此,硬體部分組裝完成!
燒錄主韌體並完成首次啟動
我們需要使用磁碟映象寫入工具,將提供的系統映象寫入一張容量不小於 1GB 的 SD 卡中,具體如下:
(1)Windows:使用 [Win32 Disk Imager];
(2)macOS:使用系統自帶的“磁碟工具”(Disk Utility);
(3)Linux:使用 dd 命令。
這個系統映象裡已經包含了完整的啟動流程:包括第一階段的 MIPS 啟動程式、第二階段的 MIPS 啟動程式、包含 Linux 核心與韌體的分割槽,以及一個 Debian 根檔案系統(rootfs)。
映象寫入完成後,彈出並重新插入 SD 卡,電腦會識別並掛載 FAT 檔案系統分割槽。此時,請將下載包中的主韌體 FIRMWARE.BIN 複製進 SD 卡的 FAT 分割槽中。這個步驟的作用是讓啟動載入程式在第一次啟動時自動識別並燒錄該韌體。如果你沒有重新編譯韌體,其實這個步驟可以跳過,因為映象本身已經包含了這個檔案。不過即便重複操作也不會有任何副作用,可以放心執行——如此,一切便準備就緒!
插入 SD 卡,再次將 USB-C 資料線連線至電腦,開啟你喜歡的序列埠終端軟體,並將其配置為 115,200 bps,8N1 格式。幾秒鐘後,你將看到序列埠終端開始列印啟動資訊,這是多個啟動階段依次執行的過程。第一次啟動時,STM32 的熔絲(fuse)將被寫入配置,此時可能需要你在序列埠資訊停止時重新插拔一次 USB-C 介面。由於熔絲是非易失性的,因此只需執行一次即可。大約 20 秒後,你將看到 Linux 核心啟動的列印資訊,整個啟動過程大約需要 1 分鐘,最終你將看到一 shell 提示符。考慮到系統僅有 8MB 的記憶體,因此建議你在登入後先執行 swapon /swapfile 命令啟用交換空間,啟用過程大約需要幾十秒,完成後你就可以執行更多命令和程式了!
最後,感興趣的開發者可以自行下載這個壓縮包:https://dmitry.gr/images/uMIPS.8PL.zip,裡面包含了該專案所需的全部內容,期待各位的 DIY 之旅!
官方站點:www.linuxprobe.com
Linux命令大全:www.linuxcool.com

劉遄老師QQ:5604215
Linux技術交流群:2636170
(新群,火熱加群中……)
想要學習Linux系統的讀者可以點選"閱讀原文"按鈕來了解書籍《Linux就該這麼學》,同時也非常適合專業的運維人員閱讀,成為輔助您工作的高價值工具書!