# RPI4 在 FreeBSD


## 正文

紀錄跟 RPI4 有關的 FreeBSD 開發問題。

## 遇到的坑

### USB 鍵盤在 Single user mode 不能運作

請參考 [Single user mode on Pi 3](https://forums.freebsd.org/threads/single-user-mode-on-pi-3.92412/)。

FreeBSD 在進到一般模式，我可以用 USB 鍵盤，但在 OK prompt 打 `boot -s` 進到 Single user mode 之後無法使用 USB 鍵盤。

主要我們可以先知道 RPI4 開機：

1. RPI GPU Firmware：核心（SoC）通電後，由 GPU 先啟動，負責初始化基本硬體（如 HDMI、SD 卡）
2. U-Boot / UEFI：為了讓 FreeBSD 這種通用系統能跑，RPI 會先載入一個模擬 UEFI 的環境
3. FreeBSD Loader：這是你看到「獸人選單」的地方。它負責從磁碟讀取核心並傳遞參數
4. FreeBSD Kernel：真正接管硬體，處理進度排程、驅動程式與你的 MAC 模組

在一般開機環境，核心初始化完成後，會啟動 init 進程 (PID 1)，init 啟動後的第一件事，就是去讀一個重要的檔案：/etc/ttys，這個檔案裡列出了系統所有的終端機介面（比如 HDMI 的 ttyv0 到 ttyv8，串口的 ttyu0 等），init 會在每一個開啟的介面上都派駐一個 getty（登入服務）。

但在 Single user mode，只有 Kernel，並且會發現預設 `boot_serial="YES"`，核心就只會在串口那邊開一個 Shell。雖然它看得到 USB 鍵盤（所以 Scroll Lock 能動），但核心並沒有把「讀取鍵盤輸入」這個功能跟這個 Shell 連接起來。

所以我們要做的就是，在 OK prompt 把 `boot_serial` 改成 NO。

