A Linux distribution for the Sega Dreamcast: a 7.x kernel, a BusyBox base and about 140 userland packages, booting from a GD-ROM on the original 200 MHz SH4 with 16 MB of RAM. Tested on real hardware.
The kernel is built in a Docker environment, the userland is cross-compiled with T2 SDE.
Boot log
Linux 7.2.9 on a real Dreamcast, captured on the serial console (ttySC1, 115200 baud). There is also a video of the boot and the raw dmesg.
Linux version 7.2.9 (root@build) (sh4-linux-gcc (GCC) 15.2.0, GNU ld 2.45.1) #8 PREEMPT Wed Oct 7 2026
Booting machvec: Sega Dreamcast
Kernel command line: console=ttySC1,115200 panic=3 ip=dhcp
Zone ranges:
Normal [mem 0x000000000c000000-0x000000000cffffff]
PVR=040205c1 CVR=00000000 PRR=00000000
I-cache : n_ways=1 n_sets=256 way_incr=8192
D-cache : n_ways=1 n_sets=512 way_incr=16384
virtual kernel memory layout:
lowmem : 0x8c000000 - 0x8d000000 ( 16 MB) (cached)
.text : 0x8c001000 - 0x8c34b470 (3369 kB)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
intc: Registered controller 'sh7750' with 20 IRQs
Calibrating delay loop (skipped)... 199.50 BogoMIPS PRESET (lpj=399012)
CPU: SH7750
Memory: 11336K/16384K available (3365K kernel code, 205K rwdata, 424K rodata, 148K init, 93K bss, 4436K reserved)
Performance Events: sh7750 support registered
Advanced Linux Sound Architecture Driver Initialized.
DMA: Registering g2_dmac handler (4 channels).
PCI host bridge to bus 0000:00
pci 0000:00:00.0: [11db:1234] type 00 class 0x020000 conventional PCI endpoint
PCI: Fixing up device 0000:00:00.0
maple: bus core now registered
NET: Registered PF_INET protocol family
TCP: Hash tables configured (established 1024 bind 1024)
sq: Registering store queue API.
maple (null): detected Dreamcast Mouse: function 0x200: at (0, 0)
maple (null): detected Dreamcast Controller: function 0x1: at (1, 0)
maple (null): detected Dreamcast Controller: function 0x1: at (2, 0)
maple (null): detected Keyboard: function 0x40: at (3, 0)
maple (null): detected Visual Memory: function 0xE: at (2, 1)
squashfs: version 4.0 (2009/01/31) Phillip Lougher
Console: switching to colour frame buffer device 80x30
fb0: NEC PowerVR2 (rev 1.1) frame buffer device, using 600k/8192k of video memory
fb0: Mode 640x480-16 pitch = 1280 cable: VGA video output: VGA
sqremap: NEC PowerVR2 [2048 pages] va 0xe0000000 pa 0xa5000000
SuperH (H)SCI(F) driver initialized
sh-sci.1: ttySC1 at MMIO 0xffe80000 (irq = 56, base_baud = 0) is a scif
printk: legacy console [ttySC1] enabled
pvr2_dc: /dev/pvr ready (VRAM 8MB, regs, TA FIFO, CH2-DMA submit)
Dreamcast_visual_memory 2:01.E: VMU LCD at (2, 1) registered as vmu_lcd0
lan_adapter (uninitialized): no MB86967 found (slot empty or modem fitted?)
Dreamcast_visual_memory 2:01.E: VMU device at partition 0 has 200 user blocks with a root block at 255
8139too 0000:00:00.0 eth0: RealTek RTL8139 at 0x(ptrval), 00:d0:f1:03:21:ca, IRQ 99
PPP generic driver version 2.4.2
SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256).
gdrom: CD-ROM DRIVE from SE with firmware 6.42
gdrom: Registered with major number 254
cdrom: Uniform CD-ROM driver Revision: 3.20
input: Keyboard as /devices/maple/3:00.40/input/input0
input: Dreamcast Mouse as /devices/maple/0:00.200/input/input1
input: Dreamcast Controller as /devices/maple/1:00.1/input/input2
input: Dreamcast Controller as /devices/maple/2:00.1/input/input3
AICA AICA: ALSA Driver for Yamaha AICA Super Intelligent Sound Processor
random: crng init done
8139too 0000:00:00.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC1E1
Sending DHCP requests ., OK
IP-Config: Got DHCP answer from 192.168.0.1, my address is 192.168.0.38
device=eth0, hwaddr=00:d0:f1:03:21:ca, ipaddr=192.168.0.38, mask=255.255.255.0, gw=192.168.0.1
ALSA device list:
#1: Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast
Freeing unused kernel image (initmem) memory: 148K
Run /init as init process
ISO 9660 Extensions: RRIP_1991A
root@dreamcast:/$
Features
- Framebuffer console
- 640×480
pvr2fbconsole on the PowerVR2. Plug in a TV or monitor and a Dreamcast keyboard and you have a terminal. - Networking and NFS
- The Broadband Adapter (HIT-0400, RTL8139) and the LAN Adapter (HIT-0300) are both supported: TCP/IP, NFS mounts and remote login.
- VMU
- The Visual Memory Unit is readable and writable as a block device, with the
vmufatfilesystem and the VMU LCD. - GD-ROM
- Native GD-ROM driver. Boot and mount the disc directly, or run from GDEMU or dcload.
- Maple bus
- Controllers, keyboards and mice are probed and show up as standard input devices.
- Userland
- About 140 packages on the GD-ROM, mounted writable through overlayfs, in
musloruClibcbuilds. mksh is the default shell, andfbdoomis included. - Kernel
- A current 7.x SH4 kernel with a built-in initramfs, so there is no separate initrd. A custom
initof about 5 KB brings the system up. - Upstream first
- Kernel changes are sent to mainline where that makes sense, instead of being kept in a private fork.
Downloads
Images are on the releases page. Burn the CDI, put it on a GDEMU, or load the raw binary with dcload.
v7.2.9, October 2026
- Kernel update to Linux 7.2.9, with largely the same userland as 7.1.3.
- Prototype modem driver, an initial adaptation of the KallistiOS driver.
- Improved keypress detection and a new boot screen.
- A bit more free RAM from a trimmed kernel config, and a fix for a boot race when a VMU is plugged in.
| Image | Contents | Use |
|---|---|---|
base-busybox |
Kernel and initrd with a minimal BusyBox shell. NFS, GD-ROM mounts and more. | Smallest bootable system, debugging |
with-userland |
Full system, about 140 packages on GD-ROM via overlayfs. musl or uClibc. |
The complete distribution |
userland |
Only the userland files, no kernel. | Building your own images |
kernel-boot.bin |
Plain executable. | Loading via dcload-serial |
1ST_READ.BIN |
Scrambled executable. | Burning a self-booting CD |
Heritage
Linux on the Dreamcast is not new. In 2000 and 2001 the GNU/Linux on SEGA Dreamcast team got a full distribution with a 2.4 kernel running on this console. The Linux-SH developers later carried that work into the mainline kernel, which is why a 7.x kernel boots on this hardware today. This project builds on the work of the people who got there first:
- Niibe Yutaka
- Started the Linux/SuperH port in 1998, with the GNU toolchain and the sh3/sh4 architecture support that every Dreamcast kernel since has been built on.
- Yaegashi Takeshi
- Author of the original GNU/Linux on SEGA Dreamcast: the patched 2.4.5 kernel and a Debian-based live CD with working X11, networking and framebuffer, in 2001.
- Paul Mundt
- Long-time upstream maintainer of the SuperH architecture (
arch/sh), and the reason Dreamcast support is in the mainline kernel. - Adrian Glaubitz
- The current SuperH maintainer, who stepped in to keep
arch/shfrom being removed from the kernel and still looks after it. - Adrian McMenamin
- Wrote much of the Dreamcast's mainline hardware support: the VMU maple-bus driver, the
vmu-flashMTD device and thevmufatfilesystem. - Marcus Comstedt
- His reverse-engineering and documentation of the boot process, the
IP.BINformat and themakeipandscrambletools make it possible to build a self-booting disc. - Adrian O'Grady
- Packaged and shared the unofficial DcLinux DiscJuggler image (DcLinux-010605, 2001).
Thanks also to the Linux-SH kernel developers, the homebrew and dcemulation scene, and the GCC, binutils, glibc and T2 SDE maintainers.


