Página 1 de 1

¿Qué es el Kermit?

Publicado: 04 Abr 2012, 11:07
por Kravenbcn
Davee, quien consiguió ejecutar un de HEN PSP en PS Vita con la ayuda de desarrolladores Some1 y Proxima, se encuentra estudiando el funcionamiento interno del emulador de PSP en la Vita. En particular, está buscando en una librería llamada sceKermit, específica para Vita, que tiene a su cargo, entre otras cosas, permitir la comunicación entre el emulador y hardware de PS Vita.

Al parecer Kermit es responsable de este hardware:

Tarjeta de memoria
Sistema de archivos flash
DMA
LCD
GE
IDStorage
Audio
Cámara
Control de Potencia
USB
OSK
WLAN
RTC
Más ...

Interesantemente, la comunicación kermit no se utiliza para auriculares o entradas del controlador remoto.

Para entender cómo funciona el kermit, es importante explorar el uso de la API:

Código: Seleccionar todo

int sceKermit_driver_4F75AA05(KermitPacket *packet, u32 cmd_mode, u32 cmd, u32 argc, u32 allow_callback, u64 *resp)


Esta función es la función de envío de comandos. Se acepta un paquete kermit inicializado a mínimos de 64 bytes (no hay argumentos hay que rellenar) un modo de comandos que describe el conjunto de comandos cmd: la orden real, el número de argumentos después de la cabecera del paquete de 16 bytes. También permite pasar un valor booleano para permitir que las devoluciones de llamada cuando se espera para la finalización y una respuesta de 64 bits.

Lo que es importante tener en cuenta es que los argumentos de paquetes son de 64 bits de ancho (no 32) y "little endian" codificado. Hay un máximo de 13 argumentos que se pueden pasar a la máquina.

A veces, es necesario enviar más de los 13 argumentos valor de los datos. Aquí es donde kermit proporciona una API para la memoria. Se muestra a continuación:

Código: Seleccionar todo

void sceKermitMemory_driver_AAF047AC(KermitPacket *packet, u32 argc, u8 *buffer, u32 buffer_size, u32 io_mode);
void sceKermitMemory_driver_80E1240A(u8 *data, u32 len);
void sceKermitMemory_driver_90B662D0(u8 *data, u32 data_size);


Estas funciones proporcionan los fundamentos para la transmisión de datos al host. sceKermitMemory_driver_AAF047AC es el comando básico. Se acepta un paquete antes de la transmisión para albergar a la cantidad de argumentos, un puntero al buffer de entrada/salida y un indicador para el modo. Esto permite al kermit recibir el buffer de datos al procesar el comando, o tener un lugar para la salida de los datos.

sceKermitMemory_driver_80E1240A y sceKermitMemory_driver_90B662D0 son los opuestos el uno del otro, proporcionando de entrada y salida respetivamente. Esta API es increíblemente simple y se utiliza para enviar múltiples buffers de kermit antes y después de un comando.

Más información y código fuente: https://github.com/DaveeFTW/vita_kermitç

Fuente

Re: ¿Qué es el Kermit?

Publicado: 26 Dic 2012, 13:23
por Ryone
No he entendido absolutamente nada pero me ha parecido muy interesante.

Re: ¿Qué es el Kermit?

Publicado: 28 Dic 2012, 10:41
por gokuhs
Hace bastante que Davee lo liberó. ¿Alguien sabe si se ha investigado algo mas sobre esto?