Linux for the Sega MegaDrive

Linux for the Sega MegaDrive

LinuxMD 프로젝트가 Sega MegaDrive(북미에서는 Sega Genesis로 알려짐)에 Linux 커널을 포팅하는 데 성공했습니다. 이 성과는 Mega EverDrive 카트리지의 기능을 활용하여 콘솔의 기본 메모리 제한을 우회하고 현대적인 커널이 부팅되는 데 필요한 하드웨어 환경을 제공함으로써 가능해졌습니다.

Hardware Requirements and Memory Management

Sega MegaDrive에서 Linux를 실행하려면 1980년대의 원래 사양을 넘어 시스템의 기능을 확장할 수 있는 특정 하드웨어가 필요합니다. 이 프로젝트는 특수 SSF2 매퍼를 통해 4MB의 RAM을 제공하는 Mega EverDrive Core or Pro 카트리지를 기반으로 합니다. 이는 기본 MegaDrive RAM이 Linux 커널을 실행하기에 불충분하기 때문에 매우 중요합니다.

주요 하드웨어 요구 사항은 다음과 같습니다:

  • A Sega MegaDrive/Genesis 콘솔.
  • A Mega EverDrive Core or Pro 카트리지.
  • 시리얼 콘솔 액세스를 위해 EverDrive를 PC에 연결하는 USB 케이블.

MegaDrive의 Motorola 68000 CPU에는 메모리 관리 장치(MMU)가 없기 때문에, 이 프로젝트는 -nommu 옵션으로 컴파일된 커널을 사용합니다. 이를 통해 Linux가 플랫 메모리 모델(flat memory model)에서 실행될 수 있으며, 이는 하드웨어 수준의 메모리 보호 기능이 없는 하드웨어에서 커널을 실행하는 유일한 방법입니다.

Software Stack and Build Process

LinuxMD 환경은 커스텀 툴체인, 부트로더, 그리고 경량 루트 파일시스템의 조합으로 구축되었습니다. 빌드 프로세스는 다음과 같은 여러 단계로 구성됩니다:

  1. Toolchain: 68000 CPU용 바이너리를 생성할 수 있는 m68k-linux 툴체인을 생성하기 위해 Buildroot를 사용하여 빌드되었습니다.
  2. Bootloader: 커널 이미지의 초기 로딩을 처리하기 위해 U-Boot를 사용합니다.
  3. Kernel: Linux 커널 이미지 (vmlinux.lz4)가 컴파일되고 로드됩니다.
  4. Root Filesystem: smolutils가 포함된 erofs 이미지가 rootfs로 사용됩니다.
  5. Utility Tools: 시리얼 콘솔 통신을 위해 EverDrive와 상호작용하는 medtool이라는 커스텀 툴이 사용됩니다.

실제 하드웨어가 없는 사람들을 위해, 이 프로젝트에는 MegaDrive와 EverDrive의 특정 매퍼 및 타이머 레지스터를 에뮬레이션하는 QEMU fork가 포함되어 있습니다. 다만, 저자는 QEMU가 실제 하드웨어보다 CPU를 훨씬 더 빠르게 에뮬레이션한다는 점을 언급했습니다.

System Performance and Interface

기능적으로는 작동하지만, 현재 포팅 버전은 상당한 성능 병목 현상에 직면해 있습니다. 저자는 시스템이

Sources