Il developer Shiny Quagsire ha mantenuto la parola data, pubblicando per intero il codice sorgente di Linux per la console ibrida Nintendo Switch.
Il progetto è ancora altamente Work in Progress, mancano i driver per l’utilizzo e la comunicazione della porta USB, il supporto WiFi/Bluetooth, il supporto audio e quant’altro. In sostanza ci troviamo di fronte ad un sistema operativo nudo e crudo.
Repo for Switch Linux is live hopefully I didn't forget anything, https://t.co/8oPwWNP26N
— Shiny Quagsire (@ShinyQuagsire) April 21, 2018
Requisiti
- Boot Loader u-boot in esecuzione da takeover TrustZone o bootrom hax. Al momento non è disponibile, tuttavia è possibile trovare una versione di u-boot compatibile con Switch qui.
- Una scheda SD correttamente formattata. Le istruzioni sono disponibili in Compilazione, installazione e configurazione poco sotto.
Note su PSCI
- Il componente TrustZone di Horizon OS di Nintendo può fornire chiamate PSCI che funzionano per Linux (fornite le patch fornite nel repository). Per impostazione predefinita, la struttura del dispositivo è configurata per Linux in esecuzione da u-boot pacchettizzato nel package2 di Nintendo, con tutte le chiamate PSCI inviate a SMC #1 anziché SMC #0.
- L’utilizzo di altri firmware fidati con PSCI su SMC #0 dovrebbe essere in grado di rimuovere la necessità di queste patch, tuttavia non è attualmente testato.
Note sul debug
- Per impostazione predefinita, la guida Joy-Con destra viene utilizzata per l’uscita di registrazione UART, con il pin 5 come TX della console e il pin 8 come RX della console. Vedi qui per i dettagli.
Compilazione, installazione e configurazione
L’installazione di u-boot dipenderà dai metodi di caricamento utilizzati. Tuttavia, una volta installato u-boot, è possibile utilizzare le seguenti istruzioni:
- Assicuratevi che la scheda SD sia formattata con partizionamento MBR, con una prima partizione FAT32/exFAT e una seconda per ext3/ext4. Se ext4 presenta problemi di avvio, provate ext3.
- Scaricate da questo link l’immagine generica ALARM e seguite le istruzioni fornite per installare il filesystem sul filesystem ext3/ext4 sulla scheda SD. Potrebbe essere necessario un box Linux per fare questi passaggi.
- Clonate linux-next digitando:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
cd linux-next && git checkout v4.15
- Applicate le patch fornite nella repository digitando:
git am -3 -k <patch file>
- NVIDIA richiede microcodice per i loro sottosistemi host1x/DRM. Questo dovrebbe essere compilato nel kernel o in initramfs per la schermata iniziale init.
- Scaricate il pacchetto linux-firmware da qui.
mkdir extra_firmware
- Copiate i file
nvidia/tegra210/vic04_ucode.bin
envidia/tegra210/xusb.bin
dal pacchetto inlinux-next/extra_firmware/nvidia/tegra210/vic04_ucode.bin
elinux-next/extra_firmware/nvidia/tegra210/xusb.bin
- Va notato che sebbene ciò possa essere utile per un facile debug, le immagini del kernel generate saranno sporche e non strettamente conformi a GPL. Si consiglia, per le versioni basate su immagini, che questi file vengano installati su initramfs.
- Prossimamente: Potrebbe essere meglio non avere un initramfs e averli estratti dalla partizione root effettiva, con Linux-firmware installato su di esso.
- Assicurarsi di avere un cross-compiler AArch64 installato.
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
mkdir -p build/hac-001/
make O=build/hac-001/ hac_defconfig
make O=build/hac-001/ -j4 Image
- Copiare il file immagine da:
build/hac-001/arch/arm64/boot/Image
nella cartella diboot/
FAT sulla partizione FAT della scheda SD. - In questa repository,
mkimage -A arm -T script -O linux -d u-boot/boot.txt u-boot/boot.scr
e copiareboot.scr
nella directoryboot/
sulla partizione FAT della scheda SD. make O=build/hac-001/ -j4 modules
make O=build/hac-001/ modules_install INSTALL_MOD_PATH=/path/to/ALARM/rootfs/
, potrebbe essere necessario eseguire come root (con le variabili di ambiente nuovamente impostate).- ALARM ha un initramfs predefinito che deve essere avvolto per u-boot.
mkimage -T ramdisk -C gzip -d /path/to/initramfs-linux.img /path/to/FAT/boot/initramfs.uImage
- All’interno della repository,
cd device-tree && sh build.sh && cp tegra210-hac-001.dtb /path/to/FAT/boot/
- La tua directory
boot/
FAT dovrebbe avereImage
,initramfs.uImage
etegra210-hac-001.dtb
- Avviare da u-boot. Se si verifica un errore, verrà aperto un dispositivo di archiviazione di massa USB per la scheda SD.
Prossimamente
- Supporto USB.
- Supporto WiFi/BT (?).
- Ottenere nuovo lavoro
- Supporto audio.
- Supporto touchscreen.
- DVFS funziona?
- DisplayPort? Cambia i driver del dock?
- Probabilmente molte più cose.