Instalación de libtransistor y Mephisto para desarrollo de switch

Buenas, la idea de este hilo es crear una guía para instalar Libtransistor (Librería del team reswitched para homebrew de switch) y Mephisto(Emulador del team reswitched para correr el homebrew)

¿Que es Libtransistor?
Libtransitor es la librería creada por el team reswitched para crear homebrew que puede ser utilizado en consolas con software 3.0 mediante PegaSwitch.

¿Que es Mephisto?
Mephisto es un emulador, creado por el team reswitched, para poder depurar las aplicaciones homebrew creadas con la librería Libtransistor

¿Que conseguire con este tutorial?
Con este tutorial conseguirás dejar un entorno para desarrollar homebrew para switch.

Requisitos:
  • Manejar la linea de comandos de Linux
  • Un cerebro

Recomendado:
  • Una distribucion de linux basada en Debian (o en su defecto ocupar el subsitema linux de windows)
  • Conocimiento de C
  • Paciencia

Paso 1: Instalar las dependencias
  • Agregar los repositorios para instalar LLVM y Clang 5.0
    Editaremos el archivo que se encuentra en "/etc/apt/sources.list" y agregaremos los siguiente.
    deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main
    deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main
    # 4.0
    deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main
    deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main
    # 5.0
    deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main
    deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main


  • Agregar la key del repositorio
    Para agregar la key del repositorio pondremos el siguiente comando en nuestra terminal.


  • Actualizar e instalar las dependencias en el sistema
    Una vez ya hemos agregado los repositorios y la key tendremos que actualizar nuestro sistema e instalar las dependencias. Las dependencias que necesitaremos son build-essential python3 python3-pip cmake clang-5.0 lld-5.0. Esto en una sistema basado en debian se hace con los siguientes comandos.

    sudo apt-get update && upgrade
    sudo apt-get install build-essential python3 python3-pip cmake clang-5.0 lld-5.0

Paso 2: Descargar y compilar Libtransistor
  • Descargar el codigo fuente de Libtransistor
    Para descargar el codigo fuente de libtransistor lo que haremos sera clonarlo desde github, para eso lo primero que haremos sera dirigirnos al directorio en el que queremos dejar todo y poner el siguiente comando

    Luego de esto entraremos al directorio que se creo.

  • Compilar Libtransistor
    Luego de entrar al directorio instalaremos las dependencias de python necesitadas por libtransistor, eso se hace con el siguiente comando.
    pip3 install -r requirements.txt

    Después de instalar las dependencias de python tendremos que setear la variable de entorno LLVM_POSTFIX para poder compilar, yo recomiendo poner el valor dentro de nuestro .bashrc pero para hacer mas corto el tutorial pondremos la variable dentro del propio comando para compilar. Para compilar solo basta con ejecutar este comando.
    make LLVM_POSTFIX=-5.0


  • Ultimos retoques para Libtransistor
    Una vez que ya hemos compilado libtransistor deveriamos tener la libreria y unos ejemplos en la carpeta build/tests con la extension nro. Se recomienda poner en las variables de entorno la variable LIBTRANSISTOR_HOME apuntando al directorio donde esta libtransistor.

Paso 3: Descargar y compilar Mephisto
  • Dependencias de Mephisto
    Para poder compilar Mephisto tendremos que descargar una dependencia que es unicorn para esto se ocupan los siguientes comandos.
    git clone https://github.com/reswitched/unicorn
    cd unicorn
    UNICORN_ARCHS="aarch64" ./make.sh
    sudo ./make.sh install

    Una vez hecho esto tendremos instaladas las dependencias de Mephisto
  • Compilar Mephisto
    Para compilar mephisto lo primero que tendremos que hacer es clonar mephisto desde Github esto se hace con el siguiente comando.

    Una vez clonado entraremos al directorio de mephisto e instalaremos las dependencias de python. Esto se hace igual que con Libtransistor solo que esta vez necesitaremos Python 2.
    pip install -r requirements.txt

    Una vez se han terminado de instalar las dependencias podremos ejecutar make para compilar Mephisto.
    make


  • Probar Mephisto
    Después de compilar mephisto ya estamos listos para probar la instalación, lo probaremos con el ejemplo Hello World de libtransistor. Para ejecutar el ejemplo se hace con el siguiente comando.
    ctu --load-nro $LIBTRANSISTOR_HOME/build/test/test_helloworld.nro

Este tutorial ha llegado a su fin espero que les haya servido y cualquier duda estaré atento al hilo.

Cosar se despide.
Gracias por el tutorial!

Un saludo [beer]
Antes de nada gracias, ya hacía falta un tutorial así :). Una pregunta, ¿Libtransistor (la librería de comandos que se usa para crear homebrew) es la misma que se usa para portar Retroarch, con eso se podría portar emuladores fácilmente (siempre teniendo en cuenta las limitaciones del modo userland)?

Saludos
dante12345 escribió:Antes de nada gracias, ya hacía falta un tutorial así :). Una pregunta, ¿Libtransistor (la librería de comandos que se usa para crear homebrew) es la misma que se usa para portar Retroarch, con eso se podría portar emuladores fácilmente (siempre teniendo en cuenta las limitaciones del modo userland)?

Saludos


Si y no :/, cuando instalas libtransistor apartes estas instalando otras librerias como newlib y sdl-libtransistor por lo cual la mayoría de emuladores que funcionan con sdl seria facil portarlos, el problema es que no tenemos acceso al almacenamiento, como por ejemplo la sd, por lo cual no podriamos cargar las roms desde archivos, lo cual tendriamos que poner el codigo de la rom dentro del codigo (por ejemplo en un array de uint8_t) lo que haria ilegal distribuirlo por copyright.

Cosarh se despide
Es una idea, ¿pero qué tal el pasar el post a Wiki? Más que nada por si hay que actualizar y tú no puedes lo puede hacer cualquier otra persona.

Igualmente gracias por todo :)
@Destruktor La idea era crearlo como una wiki pero como era novato (rango) no tenia permisos para hacerlo XD XD

Cosarh se despide
Ostia, no habia visto este hilo hasta ahora. Creo que me animaré a hacer una maquina virtual con Debian para probar. Con conseguir hacer un hello world sería feliz XD
Buenas

Ante todo gracias. Pregunta ;

Se puede compilar en paralelo -j x?

Una vez se han terminado de instalar las dependencias podremos ejecutar make para compilar Mephisto.

make -j 17 ( en mi caso ) ??

Saludos
gracias por el tutorial, me ha interesado esto de crear homebrew para la switch.
cmhacks escribió:Buenas

Ante todo gracias. Pregunta ;

Se puede compilar en paralelo -j x?

Una vez se han terminado de instalar las dependencias podremos ejecutar make para compilar Mephisto.

make -j 17 ( en mi caso ) ??

Saludos


Claro que se puede compilar en paralelo, por cierto que proce tienes con 16 hilos?
buenas,

en el final del paso 1 me pide pasword , entiendo que es el pasword de mi ordenador o administrador pero no tengo pasword...qué se pone ahí??

siento la torpeza a ver si me iluminais
[Svc[0x27]] DEBUG: Debug String: Hello, World!
Que lindo mi hola mundo!!!!

Instalé todo en Ubuntu 16.04.4 LTS, y me encontre con los siguientes problemas:

Puede que haga falta instalar git:
sudo apt-get install git

Ubuntu no me trajo en los repos oficiales la librerería lld-5.0, por lo cual hay que agregar en "/etc/apt/sources.list"
deb http://cz.archive.ubuntu.com/ubuntu xenial-updates main

y despues ejecutar
sudo apt-get install lld-5.0

Posiblemente falte instalar lz4
sudo apt-get install liblz4-dev

Si no lo tienes, debes instalar alguna otra cosa de pyton (si falla el comando pip)
sudo apt install python-pip

Si da error "autoheader: not found", hay que instalar mas cosas:
sudo apt-get install autoconf

Para ejecutar ctu, puede que debas poner un ./ delante
./ctu --load-nro $LIBTRANSISTOR_HOME/build/test/test_helloworld.nro



@pplatoon es el password del usuario root. Si no lo tienes, estas en problemas.... pideselo a quien te instaló el linux. O reinstalalo y pon tu propia password.
discovery3 escribió:[Svc[0x27]] DEBUG: Debug String: Hello, World!
Que lindo mi hola mundo!!!!

Instalé todo en Ubuntu 16.04.4 LTS, y me encontre con los siguientes problemas:

Puede que haga falta instalar git:
sudo apt-get install git

Ubuntu no me trajo en los repos oficiales la librerería lld-5.0, por lo cual hay que agregar en "/etc/apt/sources.list"
deb http://cz.archive.ubuntu.com/ubuntu xenial-updates main

y despues ejecutar
sudo apt-get install lld-5.0

Posiblemente falte instalar lz4
sudo apt-get install liblz4-dev

Si no lo tienes, debes instalar alguna otra cosa de pyton (si falla el comando pip)
sudo apt install python-pip

Si da error "autoheader: not found", hay que instalar mas cosas:
sudo apt-get install autoconf

Para ejecutar ctu, puede que debas poner un ./ delante
./ctu --load-nro $LIBTRANSISTOR_HOME/build/test/test_helloworld.nro



@pplatoon es el password del usuario root. Si no lo tienes, estas en problemas.... pideselo a quien te instaló el linux. O reinstalalo y pon tu propia password.


ya imaginaba que sería complicado sin contraseña porque he intentado mil comandos para saltarla y nada...ok tendré que volver a instalar un linux y probar de nuevo. tengo muchas ganas de poder hacer cosillas

gracias , seguiré este hilo

p.d.

tengo todo hecho y la linea final del tuto me da error . es ahí donde tengo que tener la consola encendida y conectada a pegaswitch??

el comando ctu es el que ma da error antes de intentar cargar helloworld
@pplatoon Prueba googleando "ubuntu reset root password" o lo que sea según la distro que tengas. Hay formas de sobreescribirla usando un live-cd
(mensaje borrado)
pplatoon escribió:tengo todo hecho y la linea final del tuto me da error . es ahí donde tengo que tener la consola encendida y conectada a pegaswitch??

el comando ctu es el que ma da error antes de intentar cargar helloworld


Que error te da, pega todo el texto completo.
Este procedimiento no usa la consola para nada, ctu es un emulador de switch para pc. Tendrías que usar la switch si quieres ejecutar el hello world en alguna consola modificada...
discovery3 escribió:
pplatoon escribió:tengo todo hecho y la linea final del tuto me da error . es ahí donde tengo que tener la consola encendida y conectada a pegaswitch??

el comando ctu es el que ma da error antes de intentar cargar helloworld


Que error te da, pega todo el texto completo.
Este procedimiento no usa la consola para nada, ctu es un emulador de switch para pc. Tendrías que usar la switch si quieres ejecutar el hellow world en alguna consola modificada...


quería usar este tuto en una switch 3.0.0 para enviarle cosas. Pensaba que servía igual, no sabía que ctu es un emulador de switch por eso seguramente me da error al comando ctu porque no sabe qué carajo es o no lo tengo.

Este tuto para conectar con la switch serviría?? me gustaría poder enviarle cosillas...y trastear con ella y los comandos linux,

gracias de antemano
pplatoon escribió:quería usar este tuto en una switch 3.0.0 para enviarle cosas. Pensaba que servía igual, no sabía que ctu es un emulador de switch por eso seguramente me da error al comando ctu porque no sabe qué carajo es o no lo tengo.

Este tuto para conectar con la switch serviría?? me gustaría poder enviarle cosillas...y trastear con ella y los comandos linux,

gracias de antemano


Pos tienes que seguir otro tuto:
hilo_ho-tuto-homebrew-launcher-ya-disponible-solo-para-firmwares-3-0-0_2268951

Cuando tengas el homebrew launcher funcionando, en teoría podrías meter el archivo test_helloworld.nro que generaste con este tuto y correrlo en la switch como si fuese un juego
discovery3 escribió:
pplatoon escribió:quería usar este tuto en una switch 3.0.0 para enviarle cosas. Pensaba que servía igual, no sabía que ctu es un emulador de switch por eso seguramente me da error al comando ctu porque no sabe qué carajo es o no lo tengo.

Este tuto para conectar con la switch serviría?? me gustaría poder enviarle cosillas...y trastear con ella y los comandos linux,

gracias de antemano


Pos tienes que seguir otro tuto:
hilo_ho-tuto-homebrew-launcher-ya-disponible-solo-para-firmwares-3-0-0_2268951

Cuando tengas el homebrew launcher funcionando, en teoría podrías meter el archivo test_helloworld.nro que generaste con este tuto y correrlo en la switch como si fuese un juego


gracias discovery pero me expliqué mal. Yo ya tengo hbl funcionando en la consola desde que salió y puedo cargar cualquier *.nro en la consola mediante hbl lo que quería era pasar código directamente desde el ordenador para intentar volcar cosillas como un save o algo mas gordo no como un backup por si lo habías pensao pero si por ejemplo intentar volcar la nand

tú sabes que tuto debo seguir? hasta ahora todos me han dado uno u otro error y se que se puede hacer

si sabes algo ya me dices, gracias por tus respuestas
Mini-duda: ¿Que diferencia hay entre esto y lo que ofrece devkitPro?
buenas

tengo una duda que me surge a razi de hacer este tuto

tengo algunos errores desde la consola de comandos bash

cómo puedo desinstalar por completo todo y dejarlo de cero para volver a empezar??

gracias
pplatoon escribió:buenas

tengo una duda que me surge a razi de hacer este tuto

tengo algunos errores desde la consola de comandos bash

cómo puedo desinstalar por completo todo y dejarlo de cero para volver a empezar??

gracias


Todo, todo, como que no... Salvo que tengas un virtualbox con un snapshot antes de comenzar... XD
Las cosas que instalaste con apt-get no tiene sentido que las desinstales.
Los fuentes que bajaste, sí puedes borrarlos y volverlos a bajar.
discovery3 escribió:
pplatoon escribió:buenas

tengo una duda que me surge a razi de hacer este tuto

tengo algunos errores desde la consola de comandos bash

cómo puedo desinstalar por completo todo y dejarlo de cero para volver a empezar??

gracias


Todo, todo, como que no... Salvo que tengas un virtualbox con un snapshot antes de comenzar... XD
Las cosas que instalaste con apt-get no tiene sentido que las desinstales.
Los fuentes que bajaste, sí puedes borrarlos y volverlos a bajar.


se que quizás sea un off topic, moverlo al hilo correcto si quereis pero...a ver si pudieras ayudarme. Te explico;

básicamente en la consola bash me saltan errores cuando va a instalar el modulo wifi o todo lo relacionado con el acceso a la red (internet) ya sea por cable o por wifi, esos módulos siempre dan error y no se me instalan , hacen referencia a no tener ciertos permisos para crear las carpetas y archivos necesarios pero ya eliminé los ususarios y creé uno de cero que fuera root así que no se por qué simplemente salta el error. El caso es que no encuentro solución alguna a ese problema y no se si tras seguir estos pasos debo o no realizar instalación limpia de cero, Uso wiundows 10 y gente que hace lo mismo que yo en windows 7 no tiene problemas...tendrá algo que ver???

Todo esto surge a raiz de realizar el tutorial aquí descrito y he ido encontrándome estos problemas

ya dirás algo si se te ocurre, gracias de antemano
@pplatoon Igual digo una tontería porque no estoy muy puesto en esto, pero antes de poner ese comando que te da error de permisos de root, tendrías que ponerle un 'sudo', o mejor, un 'sudo su' y luego el password. Todo esto suponiendo que se use una base Linux.

Saludos
dante12345 escribió:@pplatoon Igual digo una tontería porque no estoy muy puesto en esto, pero antes de poner ese comando que te da error de permisos de root, tendrías que ponerle un 'sudo', o mejor, un 'sudo su' y luego el password. Todo esto suponiendo que se use una base Linux.

Saludos


gracias dante, si ya pongo sudo su para acceder a usuario root , sigo investigando . No en todo me da error es solamente cuando el sistema intenta instalar módulos relacionados con internet. Porbaré a desactivar el cortafuegos de windows a ver [beer]
Buenas,

Hace unos días me descargue y compile la librería de libtransistor, y vi que había un desarrollo "PEGASWITCH" que facilitaba el testeo del homebrew. El caso es que después de descargarlo y arrancarlo consigo que la switch se conecte con la consola de pegaswitch pero después no me funciona prácticamente ningún script ni '.nro'. Mi switch esta en la versión 2.1, y por lo que leí es una versión compatible.

Estoy ejecutando todo en la consola de linux de windows 10. Firewall deshabilitado.

El log que me devuelve pegaswitch al conectarse la switch es el siguiente:
System Version: 2.1.0
Pwning sdb module...
Starting sdbcore...
Unknown version: 2.1.0
Failed to initialize sdb
Pegaswitch loaded!
UA: Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.10 NintendoBrowser/5.1.0.13343
Connected to PC...


El error mas habitual que suele aparecer es el siguiente:
ERR [2261]: requires spl mitm. try `enable sdbcore`


Ya incluí en el fichero config.json
{"sdbcore":true}
pero igualmente sigue dando el mismo error.

Otros errores también frecuentes:

ERR [650]: IPCMessage(5737 = Error: 0x1669 (unknown in module Settings))


Como dato comentar que el script BackupAllSaves.js dentro de usefulscripts funciona correctamente.

A ver si alguien se encontró alguno de estos fallos y pudo corregirlo ;)


Muchas gracias
Saludos

EDITO:

Puse un tiquet en el github y me han comentado que el sdbcore no funciona en menos de firmware 3.0, que config.json tiene que tener {"sdbcore":false}, me falta probarlo.
Buenas a todos.

Tengo unas dudas, a ver si podéis ayudarme, tengo Ubuntu 16.04.4 64 bits, instalé libtransistor-base libtransistor y sdl-libtransistor, mi primera duda viene aquí ¿aún no hay manera de guardar assets en el nro (como en devkitpro con romfs)?, ¿existen ports de las librerías SDL_Image, SDL_Ttf ... ?

Saludos y gracias.
26 respuestas