TODO: 列出完整步驟和描述實驗平台
實驗環境組態: Ubuntu 24.04
升級到 Ubuntu 24.04 之後的版本會遇到:
因為直接把整個 meta-packages下載下來已經過時了,根據官網所揭露的資訊,使用 apt-get install qemu-system
與 apt-get install qemu-user-static
即可。
debootstrap
:此處要修改 debian 鏡像的來源,將http://deb.debian.org/debian-ports
改為 http://httpredir.debian.org/debian
,由於前者已失效,若未改正則會得到錯誤訊息 E: Invalid Release file, no entry for main/binary-riscv64/Packages
更正後如下:
注意在此命令中使用了 --foreign
,此選項可以使 debootstrap
僅執行安裝過程的第一階段: 下載所需的 package,但不進行解壓縮或配置,此舉可以在一個不同架構的環境下(x86)下載和準備所有必要的文件,然後在目標架構的環境下(riscv64)完成安裝。
若遇到 E: Release signed by unknown key (key id 6ED0E7B82643E131)
則需要要手動下載並導入鑰匙,由於錯誤訊息中指出具體的鑰匙 ID(6ED0E7B82643E131),我們可以直接從 Debian 的加密金鑰伺服器下載並手動導入這個鑰匙:
為何需要「鑰匙」呢?這牽扯到RSA加密演算法,為了..(待補充)
命令執行完後可以進入 rootfs
內檢查是否有配置成功,若缺乏
binfmt_misc 是一個用於告知 Linux 如何處理不同執行檔格式的核心模組,註冊後便可以夠識別並運行 riscv64
架構的執行檔。
此外,為了確保在使用 chroot 更改根目錄後,依然能在新的根目錄中執行 /usr/bin/qemu-riscv64-static
,須先將 qemu-riscv64-static
複製至 rootfs 的 /usr/bin/
在開始複製前可以用qemu-riscv64-static --version
檢查 qemu-riscv64-static
的版本:
確認是最新的後便可以複製到 rootfs
中
接著導入 binfmt
最後檢查是否註冊成功:
若未輸出:/proc/sys/fs/binfmt_misc/riscv64
則可以嘗試重啟 binfmt_misc
如果沒有這步驟的話 host 端(x86_64)會認不得 rootfs/bin/bash (riscv64),也就無法進入 chroot.
然而這個錯誤在更新 ubuntu 之後便消失了,原因待查明。
debootstrap
第二階段的 debootstrap
會在由 qemu 模擬的 riscv64 的環境下進行,如此一來便可以避免因 host 與 target 端不相容而產生錯誤。
進入 chroot
環境 :
執行 debootstrap
命令的 --second-stage
rootfs
配置 source.list 並將 source 改為 http://ftp.debian.org/debian
:
若未對其修正會遇到以下錯誤:
安裝套件包:
配置網路:
配置分區:
清理暫存:
退出 chroot
並解除 mount
:
輸出得到的 rootfs.img
照著 README 的教學執行 make 時會遇到錯誤:
顯示 DROPBEAR_SVR_PASSWORD_AUTH 需要 crypt(),查閱 manpage 可以得到:
crypt() is the password hashing function. It is based on the
Data Encryption Standard algorithm with variations intended
(among other things) to discourage use of hardware
implementations of a key search.
備份鏡像檔:
利用 Win32 Disk Imager 備份目前使用的 SD card 內容,將其備份為 backup.img 後再用 Win32 Disk Imager 燒錄至其他 SD card ,以便在其他 Tinker V 上運行。
同時連接多台 Tinker V :
為了要同時連接多台 Tinker V ,需要設定 wifi 路由器,使得每台 Tinker V 能被分配到固定的 ip 地址:
設定完 ip 地址後便可以不用 UART ,之後要使用時可以直接使用 ssh 連線來連接板子(當然,要接上電源與網路線)
為了避免搞混,我將板子的 hostname 改為其 ip 地址。
此外可以在板子 108 上用 ssh 連線到板子 105 上:
蠻酷的,之後如果要在板子之間傳遞資訊便可以不需要依賴 PC 端,但缺點是 wifi 路由器會很燙,建議買好一點的。
USB 連線:
先在 pc 端下載 Android Debug Bridge (adb)
可以在 pc 端用 adb devices -l
命令來檢查已連線至哪些 adb
伺服器。
有時會遇到未列出已連接的裝置,此時可以注意電腦與開發板是否過熱