這些是我關於在 Pomera DM250、DM250X、DM250XY 和 DM250US 上安裝 OpenBSD-current 的筆記與預編映像檔。
我的許多工作尚未提交至上游,因此目前安裝需要自訂核心與 U-Boot 映像檔,這些都可以在此取得。OpenBSD 的支援仍在持續改進中,隨時可能不穩定。請自行承擔安裝風險。這些風險包括:
如果因軟體錯誤導致電池完全耗盡,裝置可能無法正確開機,也無法為電池充電(見下文)。
如果裝置無法正常啟動至 U-Boot,您可能需要透過 USB 纜線進行復原,這也可能需要拆開裝置(見復原)。
這是可選但建議的步驟。在進行任何操作之前,應使用 EKESETE.net 提供的工具與說明來完整備份 eMMC。
日規的 DM250、DM250X 和 DM250XY 擁有相同的內部結構:Rockchip RK3128 SoC、1 GB RAM、8 GB eMMC、全尺寸 SD 卡插槽、AMPAK AP6212A Wi-Fi 和藍牙晶片,以及 1024x600 LVDS 顯示器。較新的 DM250US 使用略有不同的電路板,增加了一個獨立的電池充電晶片。
DM250 的原廠 U-Boot 會偵測開機後立即按下的右 Shift + 左 Alt 組合鍵,並從其 recovery_kernel 分割區啟動復原 Linux 核心,而非正常核心分割區。復原核心會啟動 recovery_boot 分割區的 initramfs 映像檔,該映像檔會掛載 SD 卡並執行其根目錄下的任何 _sdboot.sh 腳本。
如果在開機時按住 Shift + Alt 過久,它會改為啟動其圖形化原廠硬體測試程式。復原核心和腳本在啟動和執行時不會在控制台上顯示任何輸出。按住右 Shift + 左 Alt + 電源鍵,數到 3 秒後放開,應該就能從 SD 卡啟動復原核心和 _sdboot.sh。
一旦新的 U-Boot 映像檔寫入 eMMC(即使在進行 OpenBSD 安裝程式之前),DM250 將無法再啟動原始的 Linux 核心或復原系統。您需要透過 EFI 啟動某個東西,將備份的 U-Boot 映像檔寫入 eMMC,才能回到原廠軟體。更多資訊請參閱復原。
日規 DM250 型號在連接 USB-C 電源線時無法完全關機(即使是原廠 Linux 軟體)。這意味著即使您執行 halt -p 並讓它自行關機,它也會立即重新開機。我的 U-Boot 會在首次啟動時偵測到蓋子是否關閉,如果關閉,它會停止開機程序。這樣一來,它就不會在您將裝置放在桌上充電時開機進入 OpenBSD(但它仍會啟動到 U-Boot)。DM250US 沒有這個限制,可以在充電時保持關機狀態。
即使連接了 USB-C 纜線,也需要一個功能正常的電池才能提供足夠的電力。如果電池完全耗盡,它可能無法啟動到足夠的程度以進入 U-Boot,進而無法指示充電晶片進入更高的充電模式。預設情況下,它會進行涓流充電,但由於它會在連接電源後立即嘗試開機,它可能會快速耗盡剛添加到電池的電力來嘗試開機。總之,不要讓電池完全耗盡。
這些說明假設您正在運行 OpenBSD(任何架構)。您需要一張幾 GB 的 SD 卡,在此假設為 sd1。
使用 GPT 分割區佈局格式化 SD 卡,創建一個至少 100MB 的 EFI 分割區,其餘部分分配給 OpenBSD 分割區。
U-Boot 和 OpenBSD 將使用該 EFI 分割區作為其韌體分割區,但原廠 Pomera 復原軟體將其視為普通的 MSDOS 分割區,並執行其中包含的 /_sdboot.sh 腳本。
將標準的 OpenBSD armv7 EFI 開機載入程式獲取到 SD 卡的 EFI 分割區,路徑為 /efi/boot/BOOTARM.EFI。
將適當的 U-Boot 映像檔獲取到 EFI 分割區,路徑為 /uboot.img。這些 U-Boot 映像檔嵌入了從我的 Linux 樹狀結構建置的適當二進位裝置樹副本。
將此安裝腳本獲取到 EFI 分割區,路徑為 /_sdboot.sh。一旦 DM250 啟動到復原模式,原廠復原分割區的開機系統將執行此腳本。該腳本會掛載 SD 卡的 EFI 分割區,將 eMMC 的所有韌體檔案備份到 SD 卡,將當前 eMMC 的 U-Boot 分割區備份到 SD 卡,然後將 SD 卡上的新 U-Boot 映像檔寫入 eMMC。
切換到 SD 卡的 OpenBSD 分割區,並將最新的 OpenBSD armv7 快照磁碟映像檔獲取到該分割區。
獲取當前的 bwfm 韌體,以便在安裝後擁有可用的 Wi-Fi。
獲取我的 bsd.rd RAM 磁碟映像檔和 bsd 核心。
您的 SD 卡現在已準備就緒。卸載它。
將準備好的 SD 卡插入 DM250。如果已連接電源,請拔掉電源。如果已開機,請關閉電源。
按住右 Shift + 左 Alt + 電源按鈕。一旦顯示 Pomera 標誌,等待約兩秒鐘後放開。Pomera 標誌將消失,復原核心應該會啟動。它將執行 SD 卡上的 _sdboot.sh 腳本,該腳本會備份現有的 U-Boot 分割區到 SD 卡並寫入新的 U-Boot。在執行過程中螢幕上不會顯示任何內容,但應該只需要大約 30 秒。完成後,裝置將重新啟動。
此時,它將啟動支援 EFI 和 DM250 的視訊及鍵盤驅動程式的新 U-Boot。如果它正確偵測到 eMMC 和 SD 卡,它將啟動 OpenBSD EFI 開機載入程式。
輸入 b bsd.rd 以啟動安裝程式。
當提示輸入根磁碟時,輸入 ? 以查看是哪個磁碟。eMMC 應該是 sd1,顯示 7.3G。如果安裝到 eMMC,請使用整個磁碟選項,讓它創建一個新的 MBR,並將 EFI 分割區偏移 16MB,這樣就不會覆蓋磁碟開頭的 Rockchip ID 區塊或 U-Boot。
您可以接受自動分配的分割區佈局,或者只創建一個大的根分割區和一個交換分割區。當提示輸入 sets 的位置時,指定 disk,然後回答 no 它未掛載,輸入 sd0(SD 卡),然後是 partition a。sets 的路徑將是 /。
繼續安裝,忽略來自 signify 的錯誤。安裝程式應該會自動識別並安裝 bwfm 韌體。
結束時,它會嘗試重新連結核心,這使用了上游核心物件檔案,因此將自訂核心複製回 /bsd 非常重要。
您還需要禁用 reorder_kernel,它會在每次開機時運行,以免將核心還原為上游版本。
首次開機時會報告一個關於 bwfm 和 loadfirmware 的錯誤。您需要將在刷新 U-Boot 時備份到 SD 卡 EFI 分割區的 firmware/nvram_ap6212a.txt 檔案複製過來。
U-Boot 編譯時支援開機標誌,因此您可以將一個點陣圖放在 EFI 分割區的根目錄下,命名為 logo.bmp,以便在開機時顯示。要顯示 OpenBSD 的 Puffy 標誌,您可以使用此圖像。
在日規 DM250 型號上,USB-C 連接埠附近的兩個 LED 在開機後可以切換。創建一個 /etc/rc.securelevel 文件,將它們設置為可以從普通的 kern.securelevel 訪問:
重新啟動後,可以使用 gpioctl 工具來控制它們:
在 DM250US 上,這些 LED 直接由電池充電晶片控制,無法手動控制。
如果您想在安裝之外進行更多修改,您需要 Git 克隆我的 OpenBSD rk3128 樹狀結構、我的帶有視訊和鍵盤驅動程式的 U-Boot pomera-dm250 樹狀結構,以及包含 DTB 來源檔案的 Linux 樹狀結構。
這是可選的,需要能夠在 armv7 機器上進行編譯(或進行交叉編譯,如果您知道如何操作),或者您可以直接下載我已經建置的最新映像檔。
獲取一個現有的 bsd.rd,解壓縮其安裝檔案系統,從我的 rk3128 樹狀結構建置 RAM 磁碟核心,然後將檔案系統插入新核心。
bsd.rd 文件現在是一個可開機的安裝映像檔,帶有自訂核心。
如果裝置無法開機,請按住電源按鈕約 10 秒鐘以完全關閉電源,然後放開並再按幾秒鐘以查看它是否能開機。
如果在按下電源按鈕後幾秒鐘螢幕背光沒有亮起,則表示裝置已完全損壞或無法啟動至 U-Boot。RK3128 SoC 可以偵測到此故障並進入其「MaskROM」模式。如果您將 USB-C 纜線連接 DM250 和電腦,它將作為 USB 裝置連接:
使用 xrock,您可以上傳一個 RAM 初始化 blob 和我製作的一個自訂 U-Boot 映像檔,該映像檔會自動啟動 U-Boot 的 USB 大容量儲存模式:
DM250 將會初始化,您應該會看到螢幕亮起並顯示有關 eMMC 的資訊。在連接的電腦上,一個新的 USB 大容量儲存裝置會連接:
現在您可以直接透過 USB 存取 DM250 的 eMMC,就像它是一個 USB 磁碟一樣。
如果您想回到原廠 DM250 Linux 軟體,並且您已備份,您可以輕鬆地將這些 .img 文件還原到這個新的 USB 磁碟,並確保它們位於正確的偏移量。我製作了一個自動化此過程的還原腳本:
如果 U-Boot 啟動到 RK3128 無法進入 MaskROM 模式但又不足以使用的程度,您可以透過在開機時短接 eMMC 晶片旁邊的 TP501 測試點來強制其進入 MaskROM 模式。更多資訊和顯示圖片請參閱我的初步筆記。
最後,如果您發現自己身處一個黑暗的房間,很可能要被格魯(grue)吃掉了,請聯繫我,我會盡力協助您恢復到可用的狀態。