2021年3月10日 星期三

如何安裝 FUZIX OS 在 Raspberry Pi Pico?

網頁最後修改時間:2021/03/10


2014 年 12 月 31 日萬聖節當日,Alan Cox 透過 Google+ 宣布了 Fuzix OS,一個主要為 Zilog Z80 處理器架構而設計的作業系統(小型 V 核心系統)。

最近,David Given 成功的將 Fuzix OS 移植到了 ESP8266 和板載 RP2040 的 Raspberry Pi Pico(下面簡稱 RPi-Pico)上,您可以在這些板子上面執行 Unix 指令和程式。

參考頁面:

而本篇,將主要針對 RPi-Pico 安裝 Fuzix 的部分來做說明:


*********************************************************************************

若須購買 Pico,可參考:Raspberry Pi Pico RP2040 開發板分類賣場

有賣場布拉格網頁可參考,可用於 MicroPython 的週邊裝置:

    *********************************************************************************


    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

    寫在前頭:

    Fuzix OS 移植到 Pico 開發板在 2021/03/03 有了重大的進展!除了原先的 Boot-from-SD card 版本,新增了 Boot-from-NAND filesystem 版本。新的版本不再需要記憶卡放置檔案系統,而是將整個整個 Fuzix OS 直接放置在 Pico 的 Flash 中執行,但同時也支援外接記憶卡作為外接磁碟使用。

    下文將以 2021/03/05 之後發佈的 Fuzix OS for RPi-Pico 版本, 說明編譯以及安裝的步驟。

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*


    ** Fuzix OS for RPi-Pico 還在開發階段,因此執行時或許會有一些怪怪的地方或是掛機,所以若是選擇跟著本文來做安裝使用,請斟酌後確定自己搞定這些問題再來做!


    【(01)參考接線】

    Fuzix OS for RPi-Pico 起初版本(又可稱為 Boot-from SD card filesystem 版本)是分為兩個檔案來做安裝:fuzix.uf2 和 filesystem.img。前者,安裝在 RPi-Pico;後者,要先分割記憶卡的磁區,然後再把 filesystem.img 整個映像檔拷貝到指定的分割磁區中(這個動作要在 Linux 作業系統下完成?)。由於這個版本安裝的關係,參考接線就如下圖所示。

    Fuzix OS for Pico 參考接線圖

    由於上述的安裝過程對於 Windows 作業系統下的用戶很不友善,因此在初版發佈不久後的一段時間,該移植版本的作者又發佈了 Boot-from-NAND 版本(根據論壇發佈紀錄的時間為 2021/03/05)。這個版本同樣可沿用了上面的參考接線圖,但不同的是:

    • 記憶卡變成是外接磁碟,可由作業系統掛載使用,但只支援 32MB 的磁碟大小(DOS Partition)而且不支援熱插拔(It's not hot swappable as the SD card is only probed at boot time);
    • 支援 console 由 UART0(@ 115200 bps)RPi-Pico 連接 USB 到 PC 同時輸出,但有一點要注意:不要同時在兩個地方同時輸入,會出現奇怪的事!
    • 作業系統的安裝跟燒錄的動作一樣,只要切換兩次 RPi-Pico 到 USB Mass Storgae 模式安裝兩個檔案(fuzix.uf2 和 filesystem.uf2)即可。

    所以說,Boot-from-NAND 版本的接線圖,就是完全不需要接線,只需要一條 Micro-USB 線就可以!

    由於 RPi-Pico 開發板上面並沒有系統重置按鈕,所以如果每次重置都需要插拔 Micro-USB 線,就會很不方便!因此強烈建議您,一定要在麵包板上加入一個重置按鈕(如網頁開頭照片所示),它會讓您在測試的過程中,保持心情的愉悅!


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    * (01-01)材料清單:

    基本上,使用 Fuzix OS for RPi-Pico Boot-from-NAND 版本的最簡接線,所需要的材料都可在 Raspberry Pi Pico MicroPython 入門學習套件 找到:

    • 【Raspberry Pi Pico 開發板】
    • 【透明全尺寸麵包板】
    • 【麵包板專用單芯插線】
    • 【觸動開關(Tact Switch)按鈕】

    如果是使用  Fuzix OS for RPi-Pico Boot-from SD card filesystem 版本(或是做為上述版本的擴充),那麼額外需要的材料有:

    • 【USB 轉 TTL(UART)線或模組】
    • 【記憶卡讀寫模組】
      文中使用的是 DC 5V 電壓輸入、其他通訊接腳可適用於 DC 3V3 和 5V 電壓準位的記憶卡讀寫模組。
    • 【記憶卡】
      不管使用的記憶卡多大,用於 Fuzix OS 的:
      • Boot-from-SD card filesystem 版本:2MB(swap space)+ 32MB(filesystem)
      • Boot-from-NAND 版本:32MB
    • 【麵包板連接測試跳線(公對公)】


    【(02)編譯給 RPi-Pico 用的 FUZIX 作業系統】

    只要是編譯給 RPi-Pico 要用的程式,那麼就要預先安裝好它所需要的開發工具(這部分可以參考官網裡的文件 Getting started with Raspberry Pi Pico 或是部落格網頁 Raspberry Pi Pico-C/C++ 開發環境建置(命令列和 Visual Studio Code) 裡的說明)。

    RPi-Pico 的編譯環境可以建置在 Linux 類的作業系統或是 Windows 作業系統下,本文則是選擇 在 Ubuntu (20.04.1) 作業系統下,完成 RPi-Pico for Fuzix OS 的編譯。


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    * (02-01)Boot from SD card filesystem

    Boot-from SD card filesytem 版本的編譯,是最早的一個版本,編譯的過程和說明可以參考 How to get started with FUZIX on Raspberry Pi Pico;網頁裡除了編譯過程的說明之外,對於製作給 Fuzix OS 用的記憶卡的磁區分割也說得很清楚,可做為參考和值得一看的網站。


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    * (02-02)Boot from NAND

    Boot-from-NAND 版本的編譯步驟與前一版本並無太大不同,差別在於最後編譯燒錄檔案的部分。Boot-from-SD card filesystem 版本的編譯,最終會產生 fuzix.uf2filesystem.img 兩個檔案;而 Boot-from-NAND 版本的編譯,最終是產生 fuzix.uf2filesystem.uf2 兩個檔案。

    *.uf2,就是能直接用拖拉的方式進行燒錄的檔案,下面就來看看怎麼編譯 Fuzix OS for RPi-Pico Boot-from-NAND 版本。

    首先,打開一個終端機介面,再切換目錄到使用者的 ~/Downloads 資料夾。

    • 進入資料夾後,輸入 git clone https://github.com/davidgiven/FUZIX.git 下載 Fuzix OS 的原始碼;
    • 下載完成後,切換目錄到 FUZIX 資料夾;
    • 接著,將下載的 FUZIX 的分支切換到 rpipico,這樣才能用到 Fuzix OS for RPi-Pico 的原始碼;
    • 切換目錄到 Kernal/platform_rpipico
    • 由於編譯時會用到 Makefile 文件,而且需要修改並指定 RPi-Pico SDK 的路徑,為了避免檔案被修改亂了沒原始檔可恢復,所以先將原始檔案做備份;
    • 打開 Makefile 進行修改;

    修改 Makefile 文件開頭處的 export PICO_SDK_PATH =(後面反白的區域就是實際的路徑)。

    修改完成後,Ctrl+O 儲存檔案;Ctrl+X 離開。

    編譯之前,先列出資料夾中的檔案,等一下編譯之後就可以看到,到底產生了哪幾個檔案?

    輸入 make image -j 開始編譯;-j 選項不帶參數,make 將不會限制可以同時執行的作業(jobs)數量。

    注意指令執行一開始,會先輸出 pico-sdk 的路徑(如下畫線處)。大部分編譯出現錯誤,都是這部分設定錯誤。所以若是出現編譯錯誤,請先檢查這個地方,是否沒有在 Makefile 裡正確的設定好?

    編譯需要一些時間,但也不會太久,耐心等等 ...

    編譯完成後,會在兩個地方建立檔案:

    • ~/Downloads/FUZIX/Kernal/platform_rpipico/build/
      此目錄會建立 fuzix.uf2
    • ~/Downloads/FUZIX/Kernal/platform_rpipico/
      此目錄主要是建立 filesystem.uf2

    下面是編譯前後,資料夾檔案文件的變化。

    到此,就完成 Fuzix OS for RPi-Pico Boot-from-NAND 版本的編譯,所建立的兩個 uf2 檔案,將在下一節說明如何同時燒錄進 RPi-Pico。


    【(03)在 RPi-Pico 安裝 Fuzix OS 】

    要 "同時" 將 fuzix.uf2filesystem.uf2 這兩個檔案燒錄進 RPi-Pico,不難也不簡單!因為 "同時" 這個詞的關係,大部分的人都會在切換 RPi-Pico 進入到 USB Mass Storage 模式後,就會直接把兩個檔案拖拉到 RPI-RP2 磁碟中,所以就會開始鬼打牆,一直重複、一直重複 ... 的無止盡的拖拉,然後一直弄不起來、弄不起來 ... 。如果您曾真的這樣做過,那麼其實您並不孤單,因為論壇上一堆人一開始都是這麼做,ME TOO!

    先這樣想,只要有檔案被拖拉到  RPI-RP2 磁碟,一但完成其中一個檔案的複製,RPi-Pico 其實就會自動燒錄韌體並重啟。所以不管一次拖拉多少個檔案,只有首先完成複製的檔案會被燒錄而已,其餘的就是不會被成功複製過去;也就是說,沒被完全複製的就不會被自動燒錄。

    「那要怎麼同時燒錄呢?」

    「其實不是 "同時" 燒錄,而是兩個都要 "同時" 間都在 RPi-Pico 裡」

    fuzix.uf2 啟動時會去尋找 Fuzix OS 的檔案系統(也就是 filesystem.uf2),所以我的方式是:

    • 插上 USB (同時按下 <BOOTSEL>),RPi-Pico 切換到 USB Mass-Storage 模式後,拖、拉 filesystem.uf2 到 RPI-RP2 磁碟中,並等待完成燒錄和自動重啟後,拔掉 USB。
    • 再次(同時按下 <BOOTSEL>),RPi-Pico 切換到 USB Mass-Storage 模式後,拖、拉 fuzix.uf2 到 RPI-RP2 磁碟中,並等待完成燒錄和自動重啟後,就完成 Fuzix OS 的安裝。

    根據作業系統所取得的 COM Port 號碼,設定並打開序列埠軟體,有兩種情況:

    • 直接使用 Micro-USB 線連接 RPi-Pico:
      開啟序列埠軟體時並不會看到什麼訊息輸出,因為插上 USB 的同時就已經開始執行,所以請先多按幾次 ENTER,應該就可以看到輸出。
    • 使用 USB 轉 TTL(UART)線或模組:
      先把它插到電腦後取得 COM Port 號碼,然後再把 RPi-Pico 通電執行,直接就能看到輸出。
    上述照兩種情況是同時存在的,但是強烈不建議同時開啟它們使用,用一個就好!

    由於 RPi-Pico 通電啟動的速度很快,MicroUSB 的通訊方式應該不可能取得到通電之後馬上的輸出,所以只能採 USB 轉 TTL 線或模組的方式,這樣就能(在通電後)看到如下的輸出:

    如果改採用 MicroUSB 線通訊的方式,連線軟體開啟後要先多按幾次 ENTER ,這時就會出現游標並停留在 Enter new data: 的地方,直接再按下 ENTER,就會跳至 login: 處,直接輸入 root(不用密碼)就能登入。

    登入之後的第一件事,要先讓刪除的功能能在終端機中可用,請先輸入:stty erase '^?',接著就請跟著下面畫線的部分自己做練習,熟悉一下指令。

    裡面也附加了幾個簡單的遊戲,如下圖所示。

    到此就完成 Fuzix OS 在 RPi-Pico 的安裝和測試,更多詳細的說明請參考 Fuzix 分支 rpipico


    【(04)結論】

    Fuzix OS for RPi-Pico 還在持續開發當中,不過對於作者將原本記憶卡儲存檔案系統的部分,變更為直接能在 RPi-Pico 開發板執行的這一步,表示高度的讚許!相信後續還會有更多功能應用被釋放出來,到時我們再來看看。


    .

    .


    <<部落格相關文章>>


    .

    .

    沒有留言:

    張貼留言

    留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

    發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

    不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !