- Go to https://toolchains.bootlin.com
- Select arch: armv6-eabihf
- Select libc: glibc
- Download bleeding-edge
- Uncompress it (for example to
/opt
) - Add the
bin/
directory of the toolchain to$PATH
- In my case:
export PATH=$PATH:/opt/armv6-eabihf--glibc--bleeding-edge-2020.08-1
- In my case:
git clone https://github.com/crosstool-ng/crosstool-ng.git
- Run:
autoconf && ./configure --enable-local && make install
- Run
./ct-ng ct-ng menuconfig
- Go to Target options
- Target Architecture -> Select arm
- Floating point -> Select Hardware (FPU)
- Emit assembly for CPU -> Write mpcore
- Exit -> Exit -> Save? -> Yes
- Run
./ct-ng build
git clone https://github.com/buildroot/buildroot.git
- Download Buildroot .config to
buildroot/.config
- (You can add your custom scripts to
output/target/
)- Acutally, this is deprecated. Better to use the "filesystem overlay" option of Buildroot to add custom files to the rootfs.
- Set toolchain path (in my case
/opt/armv6-eabihf--glibc--bleeding-edge-2020.02-2/
):make menuconfig
- Navigate to
Toolchain --->
- Properly set the
Toolchain path
, save and exit
- Run
make
(-j N
)
git clone https://github.com/xerpi/linux_3ds.git
- Copy
buildroot/output/images/rootfs.cpio.gz
tolinux_3ds/
- Run
./make_3ds.sh
- Copy
arch/arm/boot/zImage
tosd:/linux/
- Copy
arch/arm/boot/dts/nintendo3ds_ctr.dtb
tosd:/linux/
Step 4: Build arm9linuxfw (optional, but needed for SD card support)
git clone https://github.com/xerpi/arm9linuxfw
- Run
make
- Copy
arm9linuxfw.bin
tosd:/linux/
Step 5: Build FIRM Linux Loader
git clone https://github.com/xerpi/firm_linux_loader
- Run
make
- Copy
firm_linux_loader.firm
tosd:/luma/payloads/
(the payload folder Luma3DS will look for)
- Power on the 3DS pressing
START
(or the button you have assocciated with the FIRM Linux Loader Luma3DS payload)
I made an upgraded version with additional customization tutorials.
https://gist.github.com/marcotw2/e3cf66bc2a69c499a5b36cf659674a14