Skip to content

Instantly share code, notes, and snippets.

@marius137
Last active July 22, 2025 17:11
Show Gist options
  • Save marius137/221747ea7648399b2a20e5cbc5b49e89 to your computer and use it in GitHub Desktop.
Save marius137/221747ea7648399b2a20e5cbc5b49e89 to your computer and use it in GitHub Desktop.
guide how to build and install 3dslinux

Prerequesites

I am using a clean debian 10 but every debian based distro should work. Non debian based distros might require some work (e.g. Different package names)

Installing required Packages.

  • Debian:
    • sudo apt install git build-essential flex bison gcc-arm-linux-gnueabi libssl-dev bc gcc-arm-none-eabi python3-pip
    • pip3 install -U git+https://github.com/TuxSH/firmtool.git

Add firmtool to PATH

  • Debian: export PATH=$PATH:/home/yourUserName/.local/bin

Building

I will build everything in a folder inside my home called 3dslinux. you can create one with mkdir ~/3dslinux

arm9linuxfw

Clone sources

cd ~/3dslinux
git clone https://github.com/linux-3ds/arm9linuxfw.git

Build

cd ~/3dslinux/arm9linuxfw
make

Linux

Clone Sources

cd ~/3dslinux
git clone https://github.com/linux-3ds/linux.git --depth=1

initrd

Use premade initrd (recommended)

cd ~/3dslinux/linux
wget https://github.com/linux-3ds/buildroot/releases/download/latest/rootfs.cpio.gz

Build your own initrd

Additional Dependencies
  • Lots of RAM and CPU Power.
    • I used a VM with 4 cores, 8GB ram and 20 GB swap and it took about 20 minutes
  • Debian sudo apt install rsync
Clone sources
cd ~/3dsliux
git clone https://github.com/linux-3ds/buildroot.git
Build
cd ~/3dslinux/buildroot
make nintendo3ds_defconfig
make all #this will take a long time depending on your hardware
Copying the rootfs into the kernel sources
cp ~/3dslinux/buildroot/output/images/rootfs.cpio.gz ~/3dslinux/linux

Building the Kernel

cd ~/3dslinux/linux
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j$(nproc) nintendo3ds_defconfig all

Linux Loader

Clone sources

cd ~/3dslinux
git clone https://github.com/linux-3ds/firm_linux_loader.git

Build

cd ~/3dslinux/firm_linux_loader
CC=arm-none-eabi-gcc make

Putting everything on your SDCard

I am assuming you are using Luma CFW. If you are on a different CFW you might have to put the payload somewhere else.

# Create required folders
mkdir -p /path/to/SD/luma/payloads # might be different if you are not on Luma
mkdir -p /path/to/SD/linux

# Copy Linux 
cp ~/3dslinux/linux/arch/arm/boot/zImage /path/to/SD/linux
cp ~/3dslinux/linux/arch/arm/boot/dts/nintendo3ds_ctr.dtb /path/to/SD/linux
cp ~/3dslinux/linux/arch/arm/boot/dts/nintendo3ds_ktr.dtb /path/to/SD/linux

# Copy arm9linuxfw
cp ~/3dslinux/arm9linuxfw/arm9linuxfw.bin /path/to/SD/linux

# Copy Linux loader
# NOTE: This might be different, depending on your CFW
cp ~/3dslinux/firm_linux_loader/firm_linux_loader.firm /path/to/SD/luma/payloads

Booting

NOTE: this is for Luma CFW, if you have a different CFW, the steps might be different.

  • Power off your 3ds
  • hold start and power on your 3ds
  • you should now see the Luma3DS chainloader and a list of payloads
  • use the D-Pad to select firm-linux-loader and press A to boot.
  • Your screen will look glitched for a few seconds, don't worry, this is normal
  • After a few seconds the top screen will show the bootlog and after a couple more seconds the bottom screen will show a keyboard.
  • log in with username root and password toor

Optional Steps

boot linux with a button Combo (Luma)

  • plug your SD Card into your computer
  • rename luma/payloads/firm_linux_loader.firm to luma/payloads/down_firm_linux_loader.firm
  • now you can boot linux by holding down on your D-Pad while powering on
@Rubikscripts
Copy link

Rubikscripts commented Jul 19, 2025

Hi @jayjayare,

According to this issue: https://github.com/linux-3ds/linux/issues/97, you first need to rename the rootfs.cpio.gz to **initramfs**.cpio.gz and then copy it into the linux directory of your SD card. I think the linux-3ds kernel mantainer is working on this. I had your same problem, and it's kind of strange that the mantainer didn't write that on the wiki...
Oh, and FYI, the user is root and the password is toor.

Let me know if it works for you! (and sorry for my bad English)
Bye!

@jayjayare
Copy link

Hi @jayjayare,

According to this issue: https://github.com/linux-3ds/linux/issues/97, you first need to rename the rootfs.cpio.gz to **initramfs**.cpio.gz and then copy it into the linux directory of your SD card. I think the linux-3ds kernel mantainer is working on this. I had your same problem, and it's kind of strange that the mantainer didn't write that on the wiki... Oh, and FYI, the user is root and the password is toor.

Let me know if it works for you! (and sorry for my bad English) Bye!

I seem to be having the same error on my new3ds after redoing this but renaming it to initramfs.cpio.gz before compiling. Must be an issue on my end but thanks for this information

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment