alparras escribió:hola:
abro este post para pedir a quienes hayan creado plugins, si pueden compartir las funciones, y "trucos" que se deben usar para que el ejecutable se pueda ejecutar en el firmware.
eso, si compartimos el conocimiento se puede aprender y mejorar entre todos
saludos
PD: si tienen paginas o cosas asi tb es bienvenido, si no todo tiene que venir digerido
Es tan fácil como tener un compilador y las librarias necesarias.
Tienes un código fuente como este:
#include
#include
#include
#include
#include
PSP_MODULE_INFO("2nd Recovery", 0x1000, 1, 1);
PSP_MAIN_THREAD_ATTR(0);
#define printf pspDebugScreenPrintf
/* Exit callback */
int exit_callback(int arg1, int arg2, void *arg)
{
sceKernelExitGame();
return 0;
}
/* Callback thread */
void CallbackThread(void *arg)
{
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
}
int SetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", (void*) CallbackThread, 0x11, 0xFA0, 0xa0000000, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
SceUID load_module(const char *path, int flags, int type)
{
SceKernelLMOption option;
SceUID mpid;
if (type == 0) {
mpid = 1;
} else {
mpid = 2;
}
memset(&option, 0, sizeof(option));
option.size = sizeof(option);
option.mpidtext = mpid;
option.mpiddata = mpid;
option.position = 0;
option.access = 1;
return sceKernelLoadModule(path, flags, type > 0 ? &option : NULL);
}
void *getModuleInfo(void);
int main(void)
{
SceUID modid;
SceModule *mod;
int i;
int ret;
int fd;
pspDebugInstallKprintfHandler(NULL);
pspDebugInstallErrorHandler(NULL);
pspDebugInstallStdoutHandler(pspDebugScreenPrintData);
pspSdkInstallNoPlainModuleCheckPatch();
SetupCallbacks();
while (1)
{
SceCtrlData pad;
sceCtrlReadBufferPositive(&pad, 1);
if (pad.Buttons & PSP_CTRL_CROSS)
{
modid = load_module("flash0:/kd/2recovery.prx", 0, 0);
mod = sceKernelFindModuleByUID(modid);
ret = sceKernelStartModule(modid, 0, NULL, &fd, NULL);
}
}
sceKernelExitDeleteThread(0);
return 0;
}
Eso se guarda como main.c desde cualquier IDE (o editor de texto) y se compila usando un makefile como este:
TARGET = 2nd recovery
OBJS = main.o MyLib.o
USE_PSPSDK_LIBC = 1
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS =
LIBS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = 2nd recovery
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Así es como tengo yo las variables de entorno pero cada cual las puede tener como quiera.
Esta línea "EXTRA_TARGETS = EBOOT.PBP" te crea un eboot, o lo que es lo mismo, un ejecutable prx con un param.sfo empaquetados.
Se puede crear diréctamente el prx (para no tener que extraerlo con el PBP Unpacker, por ejemplo) añadiendo la línea "BUILD_PRX=1"
Así ya te genera lo que se puede denominar el plugin.
Este en concreto sería para kernel 1.50 pero se pueden hacer para otros kernels (si es que necesitas usarlo, porque también pueden ir en modo usuario. Depende de a que recuersos quieras acceder).
Salu2.