Nintendo 3DS "Firmware personalizado"
Luma3ds parches y reimpligación de partes significativas del software del sistema que se ejecuta en todos los modelos de la familia de consolas Nintendo 3DS. Su objetivo es mejorar en gran medida la experiencia del usuario y apoyar el 3DS mucho más allá de su vida útil. Las características incluyen:
Luma3ds requiere que Boot9Strap se ejecute.
Una vez que se haya instalado Boot9Strap, simplemente descargue el último archivo de lanzamiento y extraiga el archivo en la raíz de su tarjeta SD para "instalar" o para actualizar Luma3Ds junto con el menú Homebrew y los certificadores enviados con ella. Reemplace los archivos existentes y fusione las carpetas existentes si es necesario.
Se puede acceder al menú de configuración LUMA3DS principal presionando SELECCIÓN en el arranque. El archivo de configuración se almacena en /luma/config.ini
en la tarjeta SD (o /rw/luma/config.ini
en la partición Ctrnand si Luma3ds se ha lanzado desde la partición Ctrnand, que ocurre cuando falta la tarjeta SD).
Se accede al menú ChainLoader presionando el inicio en el arranque o desde el menú de configuración. Se espera que las cargas útiles se encuentren en /luma/payloads
con la extensión .firm
; Si solo hay una de esas cargas útiles, se omitirá el menú de selección mencionado anteriormente. Las teclas de acceso rápido se pueden asignar a la carga útil, por ejemplo, x_test.firm
se cargará cuando se presione X al arranque.
El menú de superposición, Rosalina , tiene una combinación de botón predeterminada: L+Down+Select . Para una mayor flexibilidad, la mayoría de la configuración del menú Rosalina no se guardan automáticamente, de ahí la opción "Guardar configuración".
Los puertos GDB , cuando están habilitados, son 4000-4002
para los puertos normales. El uso de attach
en el modo "extendido remoto", junto con info os processes
se admite y se alienta (para la ingeniería inversa, también consulte monitor getmemregions
). El puerto para la función de inicio de ruptura es 4003
sin "extendido remoto". Tanto el GDB y el IDA Pro de Devkitarm (sin "soporte de paso" habilitado) son compatibles activamente.
Tenemos un wiki, sin embargo, actualmente está muy desactualizado.
Luma3ds consiste en múltiples componentes. Si bien el estilo del código dentro de cada componente es en su mayoría consistente, estos componentes se han escrito durante muchos años y pueden no reflejar cómo los mantenedores escribirían un nuevo código en nuevos componentes/proyectos:
Process9
e inyectar todos los demás componentes personalizados. Este fue el primer componente jamás escrito para este proyecto, en 2015NATIVE_FIRM
( Kernel11
). Se inyecta por el cargador Baremetal mencionado anteriormente en el núcleo conectando su código de inicio, luego se engancha en el resto del núcleo. Sus características incluyen llamadas al sistema de enganche (SVC), introducir nuevos SVC y engancharse en comunicaciones de interprocesos, para evitar las limitaciones en el diseño del sistema de Nintendo. Este es el componente que permite que Rosalina pause otros procesos en la entrada del menú superpuesto, por ejemplo. Esto fue escrito en un momento en que no teníamos ingeniería inversa al núcleo, y se lanzó originalmente en 2017 junto a Rosalina. Se han fusionado más ganchos para el soporte de "complemento de juegos" en 2023err:f
(pantalla de error fatal) reimplementación y mucho más. Introducido a mediados de 2017, y ha sufrido cambios continuos y ha recibido muchas contribuciones externas desde entoncesloader
que los cargue. La reimplementación permite la función GDB de inicio en Rosalina, así como para levantar las restricciones de control de acceso FS de la manera correcta. Introducido en 2019 ¡Todavía hay muchas más funciones y consolidación planeadas para Luma3D! Aquí hay una lista de lo que está actualmente en la tienda:
TwlBg
y AgbBg
. Esto permitirá mucho mejor y más configurable y mejorado para la pantalla superior en los juegos DS y GBA (excepto en 2DS antiguos). Actualmente se está desarrollando en privado en C ++ 23 (sin ETA). Si bien este es un esfuerzo bastante difícil, ya que esto requiere reescribir toda la pila de conductor en semi-metal (núcleo limitado sin IPC), esta es la característica más crítica para que Luma3ds tenga y hará que la reimpelementación del sistema del conductor trivialProcess9
para TWL_FIRM
y AGB_FIRM
para permitir más funciones en el modo de compatibilidad DS y GBA (los que requieren acceso a archivos)Kernel11
Kernel11
de Nintendo relacionado con unir un nuevo KDebugThread
a una creación de hilo de KThread
y otro hilo nulo-desferenciando thread->debugThread
. Esto hace que el motor de trucos se bloquee los juegos que crean y destruyen muchos hilos todo el tiempo (como Pokémon).Kernel11
se vuelva a implementar.Para construir Luma3ds, se necesita lo siguiente:
$PATH
dkp-pacman
(o, para distribuciones que ya proporcionan Pacman, agregue repositorios): https://devkitpro.org/wiki/devkitpro_pacman3ds-dev
Metapackage: sudo dkp-pacman -S 3ds-dev --needed
Mientras que las versiones de Luma3ds se incluyen con 3ds-hbmenu
, Luma3ds en realidad se compila en un solo archivo: boot.firm
. Simplemente cópielo a la raíz de su tarjeta SD (FTPD es la forma más fácil de hacerlo), y ya está.
Este software tiene licencia bajo los términos del GPLV3. Puede encontrar una copia de la licencia en el archivo License.txt.
En su lugar, los archivos en el trozo de GDB se presentan triple como MIT o "GPLV2 o cualquier versión posterior", en cuyo caso se especifica en el encabezado del archivo. Las reimplementos PM, SM, PXI también tienen licencia bajo MIT.
Luma3ds no sería lo que es sin las contribuciones y la retroalimentación constructiva de muchos. Nos gustaría agradecer en particular: