Nintendo 3DS (nintendo-ctr)

From postmarketOS Wiki
Icon WARNING: This device is not recommended for future use with postmarketOS due to its armhf architecture. Alpine Linux (the distribution that postmarketOS extends) pmaports#599 has been considering dropping it.
The processor of the device may support the armv7 architecture. If so, you can modify the device package and change the architecture accordingly.
Nintendo 3DS
Nintendo 3DS
Nintendo 3DS
Manufacturer Nintendo
Name 3DS
Codename nintendo-ctr
Released 2011
Type handheld
Hardware
Chipset Nintendo CPU CTR
CPU 2x 268 MHz ARM11, 134 MHz ARM9
GPU DMP PICA200
Display 400x240, 320x200 w/ touchscreen
Storage 2 GB
Memory 128 MB
Architecture armhf
Software
Original software 3DS OS
postmarketOS
Category testing
Pre-built images no
Mainline partial
postmarketOS kernel 5.11-rc1
This device has been tested with postmarketOS, but its device package has not yet been added to the postmarketOS repositories.
This means that it cannot be selected in pmbootstrap.
Status: Boots, but doesn't work very well yet; not merged yet
Features
Internal storage
SD card
Battery
Broken
Screen
Works
Touchscreen
Works
Multimedia
3D Acceleration
Audio
Broken
Camera
Broken
Camera Flash
Connectivity
WiFi
Broken
NFC
Miscellaneous
FDE
HDMI/DP
Sensors
Accelerometer
Works
Magnetometer
Ambient Light
Proximity
Hall Effect
Haptics
Barometer


Icon WARNING: This device is not recommended for future use with postmarketOS due to its armhf architecture. Alpine Linux (the distribution that postmarketOS extends) pmaports#599 has been considering dropping it.
The processor of the device may support the armv7 architecture. If so, you can modify the device package and change the architecture accordingly.
Nintendo New 3DS
File:Nintendo-ktr.jpg
Nintendo 3DS
Manufacturer Nintendo
Name New 3DS
Codename nintendo-ktr
Released 2014
Type handheld
Hardware
Chipset Nintendo CPU LGR A
CPU 4x 804 MHz ARM11, 134 MHz ARM9
GPU DMP PICA200
Display 400x240, 320x200 w/ touchscreen
Storage 1 GB
Memory 256 MB
Architecture armhf
Software
Original software 3DS OS
postmarketOS
Category testing
Pre-built images no
Mainline partial
postmarketOS kernel 5.11-rc1
This device has been tested with postmarketOS, but its device package has not yet been added to the postmarketOS repositories.
This means that it cannot be selected in pmbootstrap.
Status: Boots, but doesn't work very well yet; not merged yet
Features
Internal storage
SD card
Battery
Broken
Screen
Works
Touchscreen
Works
Multimedia
3D Acceleration
Audio
Broken
Camera
Broken
Camera Flash
Connectivity
WiFi
Broken
NFC
Miscellaneous
FDE
HDMI/DP
Sensors
Accelerometer
Broken
Magnetometer
Ambient Light
Proximity
Hall Effect
Haptics
Barometer

The Nintendo 3DS is a handheld video game console released by Nintendo in 2011. A later revision, the New Nintendo 3DS, was released in 2014.

Contributors

Maintainer(s)

Users owning this device

  • AAT596 (Notes: Testing/Experimenting with Homebrew)
  • AlleM43 (Notes: New XL and Original, both on CFW)
  • Bastindo (Notes: Original 3DS with custom firmware)
  • BlackEyedSquid (Notes: Original Nintendo 3DS with Luma3DS CFW)
  • Coatlessali
  • Dolphinana (Notes: XL red, Luma3DS, can run GNU/Linux from firmware loader)
  • Earboxer (Notes: nintendo-ktr: New Nintendo 3DS XL)
  • Illen (Notes: Nintendo 3DS XL)
  • Jacobk (Notes: original model, couldn't figure out how to boot pmOS though)
  • Knuxify (Notes: New Nintendo 3DS XL)
  • Little-miss-synth (Notes: runs luma3ds, with 3dslinux as alt payload)
  • Neko (Notes: 2DS - Homebrewed)
  • Oliver193 (Notes: Old 3DS XL, 64GB SDXC, EU firmware, No cfw installed.)
  • Roboe (Notes: (second hand) aqua blue O3DS, CTR-001(EUR); version-hardware: CTR-S-EUR-C2, firmware: Sys 11.11.0-43E, storage: 32GB (SD card); never connected to the internet; running Luma3DS CFW chainloaded with boot9strap bootloader (not fastboot3DS!))
  • Roboe (Notes: (second hand) black-turquoise N2DS XL, JAN-001; version-hardware: JAN-S-C0, firmware: Sys 11.10.0-43E, storage: 128GB (microSD card); never connected to the internet; running Luma3DS CFW chainloaded with boot9strap bootloader (not fastboot3DS!))
  • Schrmh (Notes: 3DS on FW 1.0.0E; 3DS xl and new 3DS. Also have a GW card & Cubic Ninja)
  • Sputnik1973 (Notes: XL model super smash bros limited edition.)
  • Tfuxu (Notes: Owns a original CTR version in Cosmo Black color)
  • Thejsa (Notes: New Nintendo 3DS (nintendo-ktr) x2)
  • TryzenAlpensky (Notes: I own both O2DS and O3DS)
  • UltrasonicMadness
  • Veast (Notes: Untested)
  • Vladuwka12 (Notes: New 3DS. Running Luma3DS)
  • Zephyr1112 (Notes: Old 2DS, 16GB SDHC, latest EU firmware w/ Luma3DS)

Status

The device boots with the APKBUILDs from this pmaports fork. Unfortunately, due to the lack of SD card write support, pretty much nothing works (notably, it is impossible to log in in the console).

Support for the ARM11 MPCore chips, including the CPU in the Nintendo 3DS, has recently been dropped from the Linux kernel. Updating the kernel to the latest version would require bringing back support for these chips.

Software used

This port makes use of the 3DS Linux fork, arm9linuxfw and firm_linux_loader maintained by members of the linux-3ds organization on GitHub.

Installation

Note Note: Before you can run Linux on the console, you will first need to install Luma3DS. To do so, follow the guide on 3ds.hacks.guide. Avoid video tutorials as they may be obsolete.

This will not overwrite your 3DS's internal memory. The kernel is loaded off the SD card by the firm_linux_loader (which can be triggered at startup from Luma3DS's firmware selection menu).

Note Note: This is not yet available in the main pmaports repository; see WIP pmaports fork with 3DS-related packages.

In pmbootstrap init, choose:

  • nintendo-ctr if you own an Old 3DS, Old 3DS XL or Old 2DS.
  • nintendo-ktr if you own a New 3DS, New 3DS XL or New 2DS XL

Then, choose one of the following installation methods:

Method 1 - repartitioning your existing SD card

Icon WARNING: This procedure involves resizing partitions, which can cause data loss. Make sure you have a backup of your SD card's contents before doing this!
Note Note: it might be easier (and faster - resizing partitions can take a loooooong time) to remove all existing partitions, create the new partitions from scratch, then copy the files back to the partitions as explained in this method.

postmarketOS expects the SD card to have two partitions: a boot partition and a root partition. Since Linux and the main 3DS OS share the entire SD card, we need to repartition it to satisfy both of them.

Using your favorite repartitioning tool (explaining how to use them is out-of-scope for this guide - for starters, check out GParted, which is available in pretty much every Linux distro), modify the partitions on your SD card as such:

  • First partition - FAT32, label: pmOS_boot - this partition will function as the main 3DS SD card storage as well as the postmarketOS boot partition.
  • Second partition - ext4, label: pmOS_root - this is the root partition for postmarketOS.

The labels are important! They allow the postmarketOS initramfs to find the necessary partitions.

Once you're done with the re-partitioning:

  • Run pmbootstrap install and pmbootstrap export.
  • Run dd bs=512 skip=499712 if=/tmp/postmarketOS-export/nintendo-ctr.img of=/tmp/3ds-rootfs to extract the rootfs from the device image (replace ctr with ktr if you're using a New Nintendo 3DS.) Note that this assumes you have the boot partition size set to the default value of 256MB; if that is not the case, you can run fdisk -l /tmp/postmarketOS-export/nintendo-ctr.img and replace the skip value with the start value of the second partition.
  • Finally, run sudo dd bs=512 if=/tmp/3ds-rootfs of=/dev/mmcblk0p2 (replace mmcblk0 with your SD card's block device).

Now, we need to add the files necessary for booting. Mount the pmOS_boot partition, as we will be adding files to it.

The following commands will prepare a folder named "linux3ds" in your home directory ($HOME), which will contain all the necessary files:

codename="ctr" # replace with ctr or ktr depending on your console 
mkdir ~/linux3ds
mkdir ~/linux3ds/linux
mkdir -p ~/linux3ds/luma/payloads
pmbootstrap export
cp /tmp/postmarketOS-export/vmlinuz ~/linux3ds/linux/zImage
cp /tmp/postmarketOS-export/initramfs ~/linux3ds/linux/initramfs.cpio.gz
cp ~/.local/var/pmbootstrap/chroot_rootfs_nintendo-*tr/boot/nintendo3ds_*tr.dtb ~/linux3ds/linux
cp ~/.local/var/pmbootstrap/chroot_rootfs_nintendo-*tr/lib/firmware/3ds/arm9linuxfw.bin ~/linux3ds/linux
cp ~/.local/var/pmbootstrap/chroot_rootfs_nintendo-*tr/lib/firmware/3ds/firm_linux_loader.firm ~/linux3ds/luma/payloads
cp /tmp/postmarketOS-export/initramfs-extra ~/linux3ds/initramfs-extra

Copy the contents of the linux3ds folder to the root of the pmOS_boot partition.

Method 2 - on a separate SD card

This method uses a separate SD card just for postmarketOS, and allows us to use pmbootstrap install to partition the SD card.

Replace /dev/mmcblk0 in the following commands with your SD card's block device name.

  • Run pmbootstrap install --sdcard=/dev/mmcblk0.
  • Once it's done, run pmbootstrap export
  • Copy the necessary Luma3DS boot files (boot.firm, etc.) and the files necessary to boot postmarketOS (see the commands in the previous method) to the pmOS_boot partition.

Booting

While booting your 3DS (on the Luma3DS splash screen, if enabled) hold the Start button. If you only have one payload installed (luma/payloads only has firm_linux_loader.firm in it), Linux will boot automatically. Otherwise, a menu will pop up allowing you to select a firmware. Choose firm_linux_loader from the list.

You'll first see garbage on the screen, and after a few seconds the kernel logs should appear.

See also