Linux 在 Atari Jaguar 上:將現代核心移植至 64 位元主機硬體

Linux 在 Atari Jaguar 上:將現代核心移植至 64 位元主機硬體

Atari Jaguar,這款於 1993 年推出、宣稱為 64 位元強力主機的遊戲機,現在已支援現代的 Linux 核心。透過利用 uClinux 進行無 MMU 運作,並實作 Execute‑In‑Place(XIP)以管理有限的記憶體,系統能夠開機進入功能完整的 Busybox shell。

使用 XIP 與 uClinux 克服記憶體限制

將 Linux 移植到 Atari Jaguar 的主要挑戰在於僅有 2 MB RAM 的嚴重記憶體限制。為了讓核心能夠容納,專案採用了 uClinux——一種為沒有記憶體管理單元(MMU)的處理器設計的 Linux 變種。這讓系統能使用平坦記憶體模型(Flat Memory)而非虛擬記憶體。

為了進一步優化 RAM 使用,核心被分割成兩個記憶體區段,使用 Execute‑In‑Place(XIP):

  • ROM(卡帶): 儲存只讀區段,如 .rodata.text
  • RAM: 儲存動態區段,如 .data.bss

透過告訴 Linux 核心 RAM 與 ROM 的邊界位置,核心會自動處理重定位,避免在開機過程中因記憶體不足(OOM)而當機。

硬體 Bringup:UART、計時器與向量處理

開機核心需要兩個基本元件:輸出方法與系統計時器。

透過 Jerry IC 的序列輸出

Jaguar 的「Jerry」IC(DSP)具備 TXD 與 RXD 腳位。開發者撰寫了一個小型 console driver,透過位元翻轉(bit‑bang)這些腳位,實作類 UART 的序列輸出,以捕捉 earlyprintk 訊息,這對除錯開機序列相當重要。

系統計時器與排程器

Jerry IC 也提供兩個計時器。其中一個被重新利用為可程式化間隔計時器(PIT),讓 Linux 核心校準延遲迴圈、設定排程器並管理系統時脈。這需要覆寫 Motorola 68000 CPU 的板級初始化。

向量重定位

因為 ROM 被映射在 0x80000 而非 0x0,Motorola 68000 CPU 在重設時會嘗試跳至位於 0x0 的向量基底暫存器(VBR)。為防止系統當機,開發者實作了將中斷向量 memcpy 到 RAM 基底的程式碼。

工具鏈挑戰與編譯器修正

標準的交叉編譯器常會與基礎的 Motorola 68000 發生相容性問題。專案遇到了兩個主要的工具鏈障礙:

  1. 未對齊的記憶體存取: Ubuntu 套件庫中提供的 m68k-linux- 交叉編譯器會產生未對齊的記憶體存取指令,而基礎的 68000 無法處理,導致立即當機。此問題透過使用從原始碼自行建置、專門針對 m68k-elf- 的編譯器解決。
  2. Flat Binary: 由於系統缺乏 MMU,標準 ELF 檔案無法使用。專案使用 buildroot(具體而言是 linuxmd 專案於 2026 年 5 月的修補)來產生 FLAT binary。

實作使用者空間與根檔系統

為了取得可用的 shell,專案將一個 cpio 打包的根檔系統直接嵌入 vmlinux 映像中。

Busybox 與記憶體最佳化

Busybox 被選為使用者空間環境,因為它支援 nommu 目標。然而,即使使用 Busybox,記憶體仍相當緊張。為防止在執行 init 時發生 OOM panic,進行了以下最佳化:

  • 簡化 Init: init 腳本被縮減為僅執行 #!/bin/busybox sh 的簡單 shebang,以避免 --install 指令帶來的記憶體開銷。
  • uClibc Malloc 策略: 透過 buildroot 的 menuconfig,將 uClibc 函式庫的 malloc 策略改為 malloc-simple。此舉可防止較複雜的配置策略所產生的額外 metadata 消耗剩餘的 RAM。

硬體部署

在實機上部署時,必須將 vmlinux 二進位檔編譯為相對於 0x80000 的固定偏移,以符合 Jaguar 卡帶標頭的需求。這需要在 CONFIG_ROM_STARTCONFIG_ROM_LENGTHCONFIG_ROMVECCONFIG_ROMSTART 中加入 8 KB 的偏移。

此外,還實作了一個簡易的 console driver 給「Tom」IC(GPU/Blitter),讓核心能直接在實機螢幕上輸出文字。

社群見解

愛好者之間的討論突顯了 Motorola 68000 架構的歷史意義,該架構曾驅動從原始 Macintosh 到 Sega Genesis 的各種裝置。一位貢獻者指出,Linux 原始碼樹中仍保留 68k 支援,主要是因為它在印表機、汽車與 PDA 等領域的廣泛歷史部署。

社群提供的其他技術建議包括:

  • RAM 擴充: 可自行製作卡帶以在 8 MB 位址空間中加入額外 RAM。
  • GPU/DSP 利用: 完全發揮 Jaguar 的 GPU 與 DSP,將使專案超脫「光榮的 Atari ST」體驗。

摘要: 開發者 cakehonolulu 成功將 Linux 7.2.0‑rc1+ 移植至 Atari Jaguar,克服記憶體限制與工具鏈問題,於原始硬體上啟動 Busybox shell。

標題: Linux 在 Atari Jaguar 上:將現代核心移植至 64 位元主機硬體

Sources