mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 14:57:46 -04:00

git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@312 be3aeb3a-fb24-0410-a615-afba39da0efa
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
|
|
extern char **g_argv;
|
|
|
|
/* Call this MMU Hack kernel module after doing mmap, and before doing memset*/
|
|
int mmuhack(void)
|
|
{
|
|
char kocmd[1024];
|
|
int i, mmufd;
|
|
|
|
/* some programs like some versions of gpSP use some weird version of mmuhack.o
|
|
* which doesn't seem to work. What's even worse they leave their mmuhack loaded on exit.
|
|
* So we must remove whatever may be left and always reload _our_ mmuhack.o */
|
|
system("/sbin/rmmod mmuhack");
|
|
|
|
strcpy(kocmd, "/sbin/insmod ");
|
|
strncpy(kocmd+13, g_argv[0], 1023-13);
|
|
kocmd[1023] = 0;
|
|
for (i = strlen(kocmd); i > 13; i--)
|
|
if (kocmd[i] == '/') { i++; break; }
|
|
strcpy(kocmd+i, "mmuhack.o");
|
|
|
|
printf("Installing NK's kernel module for Squidge MMU Hack (%s)...\n", kocmd);
|
|
system(kocmd);
|
|
mmufd = open("/dev/mmuhack", O_RDWR);
|
|
if(mmufd < 0) return 0;
|
|
|
|
close(mmufd);
|
|
return 1;
|
|
}
|
|
|
|
|
|
/* Unload MMU Hack kernel module after closing all memory devices*/
|
|
int mmuunhack(void)
|
|
{
|
|
int ret;
|
|
printf("Removing NK's kernel module for Squidge MMU Hack... "); fflush(stdout);
|
|
ret = system("/sbin/rmmod mmuhack");
|
|
printf("done (%i)\n", ret);
|
|
|
|
return ret;
|
|
}
|