[Tutorial] Actualiza el XBRebooter sin usas el nanddumper

1, 2, 3, 4
Buenos dias a todos los rebooteros. Este tutorial sirve para instalar el XBR desde el xell directamente o para actualizar el rebooter sin necesidad de volver a usar el nand dumper. Este tutorial no es valido para las consolas jasper.

Empezemos, para hacer esto necesitaremos:

Una 360 con el exploit realizado
Gento Live CD
lflash (Para bajarlo segundo boton Guardar como)
La imagen de XBR preparada para vuestra placa (Esto lo teneis que conseguir vosotros)
Un teclado y raton USB
Para poder usar este tutorial necesitamos tener acceso al Xell por lo que los que tengamos el XBR necesitamos poder cargar el Xell, para ello necesitamos o bien el mando multimedia o un mando con cable.

Bien comencemos. Primero que nada grabamos en un CD/DVD la imagen del gentoo livecd y en un pendrive formateado en FAT el lflash.c. Una vez que tenemos todo listo encendemos la consla con el cd metido y el usb puesto, si tenemos el XBR necesitamos encender la consola con el boton guia del mando (la X central) conectado al puerto USB trasero o con el del mando multimedia. Una vez que hemos encendido la consola esta empezara a cargar el live cd de gentoo (puede tardar un poco). Una vez que termine de caargar y tengamos delante nuestra el escritorio nos vamos a la parte superior izquierda y hacemos click sobre Applications, Accesories, Terminal cuando lo hagamos nos saldra una pantalla negra tipo MS-DOS. Ahora tenemos que ejecutar una serie de comandos tal cual los pongo:

sudo passwd (tenemos que meter un password que tenga numeros y letras)
su - (aqui nos pedira volver a cambiar el password, si lo se es un engorro)

mkdir /mnt/usb
dmesg | grep -i "SCSI device"
mount /dev/sda1 /mnt/usb (por defecto es sda1 pero en caso de tener mas particiones o unidades de almacenamiento puede que sea sda2 sdb1 etc)
cd /mnt/usb
gcc lflash.c -o lflash
./lflash backup.bin XBR.bin (o el nombre que le pusierais al XBR).

Una vez que termine el flasheo apagamos la consola y cuando la volvamos a encender ya tendremos la consola actualizada.

Si encontrais algun fallo en el tutorial por favor comentadlo y lo corregire.

Saludos
Este es el proceso que he seguido yo y funciona perfecto.

Algunas cosas:
1. El xbr.bin debe estar preparado con los badblocks remapeados en su sitio. Yo para eso uso el nandpro y lo hago a mano, pero se puede usar el bad block mover (creo que se llama así).

2. A la instrucción
dmesg | grep -i "SCSI device

le falta un " al final:
dmesg | grep -i "SCSI device"

Vale para saber el nombre del pendrive usb (sda, sdb, sdc...) Por tanto, en la instrucción:
mount /dev/sda1 /mnt/usb

debemos poner sda1,sdb1,sdc1 o lo que corresponda (el 1 es porque suponemos que es la primera partición del disco, si no también habría que cambiarlo).

3. Aquí os dejo el fichero lflash.c (copiar y pegar en un fichero de texto con el nombre lflash.c).

   /* placed in public domain, written by Felix Domke <tmbinc@elitedvb.net> */
   /* USE ON YOUR OWN RISK. */
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <byteswap.h>
#include <string.h>

extern void *mmap64 (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) __THROW;

volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync)
{
   int axs_mem_fd = -1;
   unsigned long long page_addr, ofs_addr, reg, pgmask;
   void* reg_mem = NULL;

   /*
    * looks like mmap wants aligned addresses?
    */
   pgmask = getpagesize()-1;
   page_addr = physaddr & ~pgmask;
   ofs_addr  = physaddr & pgmask;

   /*
    * Don't forget O_SYNC, esp. if address is in RAM region.
    * Note: if you do know you'll access in Read Only mode,
    *   pass O_RDONLY to open, and PROT_READ only to mmap
    */
   if (axs_mem_fd == -1) {
      axs_mem_fd = open("/dev/mem", O_RDWR|(sync ? O_SYNC : 0));
      if (axs_mem_fd < 0) {
            perror("AXS: can't open /dev/mem");
            return NULL;
      }
   }

   /* memory map */
   reg_mem = mmap64(
      (caddr_t)reg_mem,
      size+ofs_addr,
      PROT_READ|PROT_WRITE,
      MAP_SHARED,
      axs_mem_fd,
      page_addr
   );
   if (reg_mem == MAP_FAILED) {
      perror("AXS: mmap error");
      close(axs_mem_fd);
      return NULL;
   }

   reg = (unsigned long )reg_mem + ofs_addr;
   return (volatile void *)reg;
}

int iounmap(volatile void *start, size_t length)
{
   unsigned long ofs_addr;
   ofs_addr = (unsigned long)start & (getpagesize()-1);

   /* do some cleanup when you're done with it */
   return munmap((unsigned char*)start-ofs_addr, length+ofs_addr);
}

#define STATUS  1
#define COMMAND 2
#define ADDRESS 3
#define DATA    4
#define LOGICAL 5
#define PHYSICAL 6

volatile unsigned int *flash;

void sfcx_writereg(int reg, int value)
{
   flash[reg] = bswap_32(value);
}

unsigned int sfcx_readreg(int reg)
{
   return bswap_32(flash[reg]);
}

void readsector(unsigned char *data, int sector, int raw)
{
   int status;
   sfcx_writereg(STATUS, sfcx_readreg(STATUS));
   sfcx_writereg(ADDRESS, sector);   
   sfcx_writereg(COMMAND, raw ? 3 : 2);

   while ((status = sfcx_readreg(STATUS))&1);

   if (status != 0x200)
   {
      if (status & 0x40)
         printf(" * Bad block found at %08x\n", sector);
      else if (status & 0x1c)
         printf(" * (corrected) ECC error %08x: %08x\n", sector, status);
      else if (!raw)
         printf(" * illegal logical block %08x\n", sector);
      else
         printf(" * Unknown error at %08x: %08x. Please worry.\n", sector, status);
   }

   sfcx_writereg(ADDRESS, 0);

   int i;
   for (i = 0; i < 0x210; i+=4)
   {
      sfcx_writereg(COMMAND, 0);
      *(int*)(data + i) = bswap_32(sfcx_readreg(DATA));
   }
}

void flash_erase(int address)
{
   sfcx_writereg(0, sfcx_readreg(0) | 8);
   sfcx_writereg(STATUS, 0xFF);
   sfcx_writereg(ADDRESS, address);
   while (sfcx_readreg(STATUS) & 1);
   sfcx_writereg(COMMAND, 0xAA);
   sfcx_writereg(COMMAND, 0x55);
   while (sfcx_readreg(STATUS) & 1);
   sfcx_writereg(COMMAND, 0x5);
   while (sfcx_readreg(STATUS) & 1);
   int status = sfcx_readreg(STATUS);
   if (status != 0x200)
      printf("[%08x]", status);
   sfcx_writereg(STATUS, 0xFF);
   sfcx_writereg(0, sfcx_readreg(0) & ~8);
}

void write_page(int address, unsigned char *data)
{
   sfcx_writereg(STATUS, 0xFF);
   sfcx_writereg(0, sfcx_readreg(0) | 8);

   sfcx_writereg(ADDRESS, 0);

   int i;

   for (i = 0; i < 0x210; i+=4)
   {
      sfcx_writereg(DATA, bswap_32(*(int*)(data + i)));
      sfcx_writereg(COMMAND, 1);
   }

   sfcx_writereg(ADDRESS, address);
   sfcx_writereg(COMMAND, 0x55);
   while (sfcx_readreg(STATUS) & 1);
   sfcx_writereg(COMMAND, 0xAA);
   while (sfcx_readreg(STATUS) & 1);
   sfcx_writereg(COMMAND, 0x4);
   while (sfcx_readreg(STATUS) & 1);
   int status = sfcx_readreg(STATUS);
   if (status != 0x200)
      printf("[%08x]", status);
   sfcx_writereg(0, sfcx_readreg(0) & ~8);
}



extern volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync);
extern int iounmap(volatile void *start, size_t length);

int dump_flash_to_file(const char *filename)
{
   printf(" * Dumping to %s...\n", filename);
   
   FILE *f = fopen(filename, "wb");
   
   int i;
   for (i = 0; i < 16*1024*1024; i += 0x200)
   {
      unsigned char sector[0x210];
      readsector(sector, i, 1);
      if (!(i&0x3fff))
      {
         printf("%08x\r", i);
         fflush(stdout);
      }
      if (fwrite(sector, 1, 0x210, f) != 0x210)
         return -1;
   }
   printf("done!   \n");
   fclose(f);
   return 0;
}

int verify_flash_with_file(const char *filename, int raw)
{
   FILE *f = fopen(filename, "rb");
   if (!f)
      return -1;

   if (raw == -1) /* auto */
   {
      fseek(f, 0, SEEK_END);
   
      if (ftell(f) == 16*1024*1024 / 0x200 * 0x210)
      {
         raw = 1;
         printf(" * detected RAW nand file, verifying in raw mode.\n");
      } else
      {
         raw = 0;
         printf(" * detected short nand file, verifying in cooked mode.\n");
      }
      fseek(f, 0, SEEK_SET);
   }
   
   printf(" * Verifying flash with %s...\n", filename);
   
   int i;
   for (i = 0; i < 16*1024*1024; i += 0x200)
   {
      unsigned char sector[0x210], sector_flash[0x210];
      if (!(i&0x3fff))
      {
         printf("%08x\r", i);
         fflush(stdout);
      }
      if (fread(sector, 1, 0x210, f) != 0x210)
         return i;
      readsector(sector_flash, i, raw);
      if (sector_flash[0x205] != 0xFF) /* bad sector */
      {
         printf(" * ignoring bad sector at %08x\n", i);
         continue;
      }
      if (memcmp(sector, sector_flash, 0x210))
      {
         printf(" * VERIFY error at %08x\n", i);
         return -2;
      }
   }
   printf("done!   \n");
   fclose(f);
   return i;
}

int flash_from_file(const char *filename, int raw)
{
   printf(" * Flashing from %s...\n", filename);

   FILE *f = fopen(filename, "rb");
   if (!f)
      return -1;

   if (raw == -1) /* auto */
   {
      fseek(f, 0, SEEK_END);
   
      if (ftell(f) == 16*1024*1024 / 0x200 * 0x210)
      {
         raw = 1;
         printf(" * detected RAW nand file, flashing in raw mode.\n");
      } else
      {
         raw = 0;
         printf(" * detected short nand file, flashing in cooked mode.\n");
      }
      fseek(f, 0, SEEK_SET);
   }
   
   int i;
   for (i = 0; i < 16*1024*1024; i += 0x4000)
   {
      unsigned char sector[0x210*32], sector_flash[0x210*32];
      memset(sector, 0xFF, sizeof(sector));
      if (!fread(sector, 1, 0x210*32, f))
         return i;

      printf("%08x\r", i);
      fflush(stdout);
      
      readsector(sector_flash, i, 0);
      
      int phys_pos;
      
      if (!raw)
      {
         phys_pos = sfcx_readreg(PHYSICAL);
      
         if (!(phys_pos & 0x04000000)) /* shouldn't happen, unless the existing image is broken. just assume the sector is okay. */
         {
            printf(" * Uh, oh, don't know. Reading at %08x failed.\n", i);
            phys_pos = i;
         }
         phys_pos &= 0x3fffe00;
      
         if (phys_pos != i)
            printf(" * relocating sector %08x to %08x...\n", i, phys_pos);
      } else
         phys_pos = i;

      flash_erase(phys_pos);
      int j;
      for (j = 0; j < 32; ++j)
         write_page(phys_pos + j * 0x200, sector + j * 0x210);
   }
   return 0;
}

int main(int argc, char **argv)
{
   flash = ioremap(0xea00c000, 0x1000, 1);
   
   printf(" * flash config: %08x\n", sfcx_readreg(0));
   
   sfcx_writereg(0, sfcx_readreg(0) &~ (4|8|0x3c0));
   
   if (sfcx_readreg(0) != 0x01198010)
   {
      printf(" * unknown flash config %08x\n", sfcx_readreg(0));
      return 1;
   }
   
   if (argc != 2 && argc != 3)
   {
      printf("usage: %s <current> [<new>]\n", *argv);
      return 2;
   }

   const char *orig = argv[1];
   int res = verify_flash_with_file(orig, 1);
   if (res == -1)
   {
      dump_flash_to_file(orig);
      res = verify_flash_with_file(orig, 1);
   }

   if (res != 16*1024*1024)
   {
      if (res == -2)
         printf(" * verify failed!\n");
      else if (res > 0)
         printf(" * verified correctly, but only %d bytes.\n", res);
      else
         printf(" * original image invalid\n");
      printf(" * I won't flash if you don't have a full, working backup, sorry.\n");
      return 1;
   }
   printf(" * verify ok.\n");
   
   if (argc > 2)
   {
      const char *image = argv[2];
      
      flash_from_file(image, -1);
      res = verify_flash_with_file(image, -1);
      if (res > 0)
         printf(" * verified %d bytes ok\n", res);
      else
         printf(" * verify failed! (%d)\n", res);
   }
   return 0;
}
En
dmesg | grep -i "SCSI device
te faltan las comillas de cierre si no me equivoco.
Arreglado, gracias por el aviso eso me pasa por ir con prisas.

SQuaVeR lo del badblock mover no lo he puesto porque no he querido explicar nada de la creacion del bin ya que hay muchos tutoriales que ya explican eso.

Saludos
Claro tío, si el tutorial está bien y se agradece :)

Yo personalmente lo único que cambiaría sería la frase:
La imagen de XBR preparada para vuestra placa (Esto lo teneis que conseguir vosotros)

por:
La imagen de XBR personalizada para nuestra placa y configuración (inyectados el kv, el config y remapeados los bad blocks).

Saludos :)
alguien podria editar el lflash.c para ke funcionen con las jaspers de 256/512
buenas

estoy intentando meterle el xbr.bin por este modo pero cuando llego a lo del

gcc lflash.c -o lflash (me lanza un error de que no es igual el tamaño o algo por el estilo)

y cuando pongo lo de

./lflash XBR.bin (me detecta que es una jasper 23010, pero me lanza el error de tipo desconocido

alguna sugerencia

gracias
navus escribió:buenas

estoy intentando meterle el xbr.bin por este modo pero cuando llego a lo del

gcc lflash.c -o lflash (me lanza un error de que no es igual el tamaño o algo por el estilo)

y cuando pongo lo de

./lflash XBR.bin (me detecta que es una jasper 23010, pero me lanza el error de tipo desconocido

alguna sugerencia

gracias



Arriba dice el creador del tuto que no es valido para Jasper.

Yo me parece que lo voi a probar en la mia es una Falcon.
Alguien lo tiene hecho asi en Falcon??

Saludos
oño no me habia quedado con esa parte del parafo [mad]


saludos
Estupendo tutorial, para ir actualizando sin tener que abrir la consola.
Excelente el tutorial, me ha salido a la primera en una falcon

Por cierto, edita lo del comando "su-" (es sin guión), puede hacer que alguien se equivoque en ese punto y se atasque
Lembo escribió:Excelente el tutorial, me ha salido a la primera en una falcon

Por cierto, edita lo del comando "su-" (es sin guión), puede hacer que alguien se equivoque en ese punto y se atasque


Excelente eso es lo que queria saber ahora si no es mucha molestia me puedes poner que metodo has usado para crear tu XBR es por hacerlo igual que tu.

Saludos y gracias
Y no hay forma de que funcione en una jasper 256?
ovsvts escribió:
Lembo escribió:Excelente el tutorial, me ha salido a la primera en una falcon

Por cierto, edita lo del comando "su-" (es sin guión), puede hacer que alguien se equivoque en ese punto y se atasque


Excelente eso es lo que queria saber ahora si no es mucha molestia me puedes poner que metodo has usado para crear tu XBR es por hacerlo igual que tu.

Saludos y gracias

Pues el que aparece en el readme del xbr:
1) Extract KV and Config blocks from orig.bin
nandpro orig.bin: -r16 rawkv.bin 1 1
nandpro orig.bin: -r16 rawconfig.bin 3de 2
2) Inject those blocks into XBR.bin
nandpro XBR.bin: -w16 rawkv.bin 1 1
nandpro XBR.bin: -w16 rawconfig.bin 3de 2
3) Flash result
nandpro lpt: -w16 XBR.bin


Espero que te vaya bien [bye]
No e caido en una cosa y seguro que es una pregunta tonta ¿se puede escribir en el gentoo sin teclado?

Saludos
ovsvts escribió:No e caido en una cosa y seguro que es una pregunta tonta ¿se puede escribir en el gentoo sin teclado?

Saludos

La verdad es que no lo se... busca en google si se puede o no
Muchas gracias!!! He intentado esta mañana meterle el XBR_03 pero no me detectaba el pc la consola por lpt, supongo que se habrá soltado alguna soldadura ya que los componentes que he usado son SMD y muy fáciles de partir. Lo que pasa es que tengo colegas en casa que han venido a comer y no he podido liarme a comprobar soldaduras. Probaré con este tuto a ver si puedo actualizarla!!! Aunque me venía bien para instalar el nanddumper permanente con rj45.

Ya comemtaré resultados!!!

Muchas gracias de nuevo y FELIZ 2010!!!


Salu2!!!
falcon con xbr actualizado con este tuto i funcionando correctamente
Este tutorial,porque no es valido para jasper?
Por que no tenemos version xbr para jasper 256 o es por otro motivo?
Una curiosidad, ¿cuánto tiempo tarda el flasheo con este método? supongo que menos que por medio del cable paralelo
una duda como se pone el simbolo | en gentoo k no puedo.
vale ya lo e encontrao.
Lembo escribió:Excelente el tutorial, me ha salido a la primera en una falcon

Por cierto, edita lo del comando "su-" (es sin guión), puede hacer que alguien se equivoque en ese punto y se atasque


Me falto un espacio es "su -", ya esta corregido.

DazMalaga escribió:Este tutorial,porque no es valido para jasper?
Por que no tenemos version xbr para jasper 256 o es por otro motivo?


No es valido para jaspers porque el lflash se programo antes de que saliera y por lo tanto no esta preparado para tratar con sus nands.
Aunque el que tenga una jasper de 16MB y quiera probar puede intentar cambiar la linea if (sfcx_readreg(0) != 0x01198010) por if (sfcx_readreg(0) != 0x00023010). Las jasper de 16MB no las carga por tener un flashconfig distinto de esta forma deberia cargarla, aunque que conste que no me hago responsable si falla algo (aunque en caso de fallar no deberia de pasar nada raro simplemente habria que reflashear con el dumper). Yo no lo he probado porque no tengo una jasper, sino lo haria yo mismo.

spainfer escribió:Una curiosidad, ¿cuánto tiempo tarda el flasheo con este método? supongo que menos que por medio del cable paralelo


Pues muy poco cosa de un minuto o asi.

Saludos
elroma escribió:una duda como se pone el simbolo | en gentoo k no puedo.
vale ya lo e encontrao.

Creo recordar que era pulsando Shift + ç

spainfer escribió:Una curiosidad, ¿cuánto tiempo tarda el flasheo con este método? supongo que menos que por medio del cable paralelo

Pues no tarda casi nada, cuestión de segundos lo que es escribir la nand. Lo que mas tiempo lleva es esperar a que cargue el Gentoo.
Lembo escribió:
elroma escribió:una duda como se pone el simbolo | en gentoo k no puedo.
vale ya lo e encontrao.

Creo recordar que era pulsando Shift + ç

spainfer escribió:Una curiosidad, ¿cuánto tiempo tarda el flasheo con este método? supongo que menos que por medio del cable paralelo

Pues no tarda casi nada, cuestión de segundos lo que es escribir la nand. Lo que mas tiempo lleva es esperar a que cargue el Gentoo.

efectivamente es como dices ya lo he hecho y todo bien solo que a los 15 de jugar al assasins creed 2 se la ido la señal de video y 3 luces rojas y la luz del medio parpadeando eso que es por calentamiento o error en la nand?¿
se puede "hacer" una lflash compatible con las jasper 256/512?
DazMalaga escribió:se puede "hacer" una lflash compatible con las jasper 256/512?

Si que se puede, es mas, ya que tienes el codigo fuente, porque no te animas y lo haces tu?
elroma escribió:
Lembo escribió:
elroma escribió:una duda como se pone el simbolo | en gentoo k no puedo.
vale ya lo e encontrao.

Creo recordar que era pulsando Shift + ç

spainfer escribió:Una curiosidad, ¿cuánto tiempo tarda el flasheo con este método? supongo que menos que por medio del cable paralelo

Pues no tarda casi nada, cuestión de segundos lo que es escribir la nand. Lo que mas tiempo lleva es esperar a que cargue el Gentoo.

efectivamente es como dices ya lo he hecho y todo bien solo que a los 15 de jugar al assasins creed 2 se la ido la señal de video y 3 luces rojas y la luz del medio parpadeando eso que es por calentamiento o error en la nand?¿


Prueba a meterle el backup de tu nand: si siguen las 3 luces rojas puedes pensar que es calentamiento y si se van prueba a revisar las soldaduras del jtag. Si el problema era el jtag para volverle a meter el XBR no hace falta que lo metas por lpt, simplemente métele el xell, carga gentoo y haz de nuevo este tuto.
Espero que sólo sea una mala soldadura... [beer]
Hola!!!

Tengo un problema. Cuando inicio el xell, con el dvd de gentoo y pen con iflash puestos, no me inicia linux. Sin embargo, si lo inicio con algún emu o el xmenu sí lo inicia sin problemas. A qué puede deberse? Estoy harto ya de probar!!!

A ver si alguien es capaz de echarme una mano... ya sólo me queda volver a grabar el livecd!!! Por cierto, es necesario que se grabe en cd o puede ser con dvd? es que me estoy volviendo loco y no hay manera de que me inicie linux...


Gracias por todo y salu2!!!


Edito: Bueno, pues ante la imposibilidad de actualizar siguiendo este tuto, he procedido a reparar las posibles soldaduras defectuosas y, después de mi particular odisea (tajada incluída), ahora mismo está el pc escribiendo la nand de la consola!!! [poraki] [poraki]

A ver si puedo jugar el Assassins Creed 2 de una vez por todas!!!

Edito2: ya tengo el nuevo XBR funcionando perfectamente. Estoy pasando el AC2, sin pasarlo por el 360GameHack, a ver si es capaz de funcionar ok!!! en un rato comento resultados!!!

Edito3: AC2 funcionando perfectamente!!! Ahora sí!!!! XBR4eva!!!! Mis felicitaciones y agradecimientos para el XBRteam!!! Un sueño hecho realidad... Espero no despertar nunca!!! [amor] [amor] [amor]


Salu2!!!
RastaMan Me ha pasado por Mp este iflash para jasper 256/512.
No lo he podido probar puesto que aun no tengo la xbox y no tenemos la version de xbr para jasper 256/512.

        /* placed in public domain, written by Felix Domke <tmbinc@elitedvb.net> */
            /* USE ON YOUR OWN RISK. */
        #include <stdio.h>
        #include <sys/stat.h>
        #include <fcntl.h>
        #include <unistd.h>
        #include <sys/mman.h>
        #include <byteswap.h>
        #include <string.h>

        int nandsize;

        extern void *mmap64 (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) __THROW;

        volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync)
        {
            int axs_mem_fd = -1;
            unsigned long long page_addr, ofs_addr, reg, pgmask;
            void* reg_mem = NULL;

            /*
             * looks like mmap wants aligned addresses?
             */
            pgmask = getpagesize()-1;
            page_addr = physaddr & ~pgmask;
            ofs_addr  = physaddr & pgmask;

            /*
             * Don't forget O_SYNC, esp. if address is in RAM region.
             * Note: if you do know you'll access in Read Only mode,
             *    pass O_RDONLY to open, and PROT_READ only to mmap
             */
            if (axs_mem_fd == -1) {
                axs_mem_fd = open("/dev/mem", O_RDWR|(sync ? O_SYNC : 0));
                if (axs_mem_fd < 0) {
                        perror("AXS: can't open /dev/mem");
                        return NULL;
                }
            }

            /* memory map */
            reg_mem = mmap64(
                (caddr_t)reg_mem,
                size+ofs_addr,
                PROT_READ|PROT_WRITE,
                MAP_SHARED,
                axs_mem_fd,
                page_addr
            );
            if (reg_mem == MAP_FAILED) {
                perror("AXS: mmap error");
                close(axs_mem_fd);
                return NULL;
            }

            reg = (unsigned long )reg_mem + ofs_addr;
            return (volatile void *)reg;
        }

        int iounmap(volatile void *start, size_t length)
        {
            unsigned long ofs_addr;
            ofs_addr = (unsigned long)start & (getpagesize()-1);

            /* do some cleanup when you're done with it */
            return munmap((unsigned char*)start-ofs_addr, length+ofs_addr);
        }

        #define STATUS  1
        #define COMMAND 2
        #define ADDRESS 3
        #define DATA    4
        #define LOGICAL 5
        #define PHYSICAL 6

        volatile unsigned int *flash;

        void sfcx_writereg(int reg, int value)
        {
            flash[reg] = bswap_32(value);
        }

        unsigned int sfcx_readreg(int reg)
        {
            return bswap_32(flash[reg]);
        }

        void readsector(unsigned char *data, int sector, int raw)
        {
            int status;
            sfcx_writereg(STATUS, sfcx_readreg(STATUS));
            sfcx_writereg(ADDRESS, sector);   
            sfcx_writereg(COMMAND, raw ? 3 : 2);

            while ((status = sfcx_readreg(STATUS))&1);

            if (status != 0x200)
            {
                if (status & 0x40)
                    printf(" * Bad block found at %08x\n", sector);
                else if (status & 0x1c)
                    printf(" * (corrected) ECC error %08x: %08x\n", sector, status);
                else if (!raw)
                    printf(" * illegal logical block %08x\n", sector);
                else
                    printf(" * Unknown error at %08x: %08x. Please worry.\n", sector, status);
            }

            sfcx_writereg(ADDRESS, 0);

            int i;
            for (i = 0; i < 0x210; i+=4)
            {
                sfcx_writereg(COMMAND, 0);
                *(int*)(data + i) = bswap_32(sfcx_readreg(DATA));
            }
        }

        void flash_erase(int address)
        {
            sfcx_writereg(0, sfcx_readreg(0) | 8);
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(ADDRESS, address);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0xAA);
            sfcx_writereg(COMMAND, 0x55);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0x5);
            while (sfcx_readreg(STATUS) & 1);
            int status = sfcx_readreg(STATUS);
            if (status != 0x200)
                printf("[%08x]", status);
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(0, sfcx_readreg(0) & ~8);
        }

        void write_page(int address, unsigned char *data)
        {
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(0, sfcx_readreg(0) | 8);

            sfcx_writereg(ADDRESS, 0);

            int i;

            for (i = 0; i < 0x210; i+=4)
            {
                sfcx_writereg(DATA, bswap_32(*(int*)(data + i)));
                sfcx_writereg(COMMAND, 1);
            }

            sfcx_writereg(ADDRESS, address);
            sfcx_writereg(COMMAND, 0x55);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0xAA);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0x4);
            while (sfcx_readreg(STATUS) & 1);
            int status = sfcx_readreg(STATUS);
            if (status != 0x200)
                printf("[%08x]", status);
            sfcx_writereg(0, sfcx_readreg(0) & ~8);
        }



        extern volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync);
        extern int iounmap(volatile void *start, size_t length);

        int dump_flash_to_file(const char *filename)
        {
            printf(" * Dumping to %s...\n", filename);
           
            FILE *f = fopen(filename, "wb");
           
            int i;
            for (i = 0; i < nandsize; i += 0x200)
            {
                unsigned char sector[0x210];
                readsector(sector, i, 1);
                if (!(i&0x3fff))
                {
                    printf("%08x\r", i);
                    fflush(stdout);
                }
                if (fwrite(sector, 1, 0x210, f) != 0x210)
                    return -1;
            }
            printf("done!   \n");
            fclose(f);
            return 0;
        }

        int verify_flash_with_file(const char *filename, int raw)
        {
            FILE *f = fopen(filename, "rb");
            if (!f)
                return -1;

            if (raw == -1) /* auto */
            {
                fseek(f, 0, SEEK_END);
           
                if (ftell(f) == nandsize / 0x200 * 0x210)
                {
                    raw = 1;
                    printf(" * detected RAW nand file, verifying in raw mode.\n");
                } else
                {
                    raw = 0;
                    printf(" * detected short nand file, verifying in cooked mode.\n");
                }
                fseek(f, 0, SEEK_SET);
            }
           
            printf(" * Verifying flash with %s...\n", filename);
           
            int i;
            for (i = 0; i < nandsize; i += 0x200)
            {
                unsigned char sector[0x210], sector_flash[0x210];
                if (!(i&0x3fff))
                {
                    printf("%08x\r", i);
                    fflush(stdout);
                }
                if (fread(sector, 1, 0x210, f) != 0x210)
                    return i;
                readsector(sector_flash, i, raw);
                if (sector_flash[0x200] != 0xFF) /* bad sector */
                {
                    printf(" * ignoring bad sector at %08x\n", i);
                    continue;
                }
                if (memcmp(sector, sector_flash, 0x210))
                {
                    printf(" * VERIFY error at %08x\n", i);
                    return -2;
                }
            }
            printf("done!   \n");
            fclose(f);
            return i;
        }

        int flash_from_file(const char *filename, int raw)
        {
            printf(" * Flashing from %s...\n", filename);

            FILE *f = fopen(filename, "rb");
            if (!f)
                return -1;

            if (raw == -1) /* auto */
            {
                fseek(f, 0, SEEK_END);
           
                if (ftell(f) == nandsize / 0x200 * 0x210)
                {
                    raw = 1;
                    printf(" * detected RAW nand file, flashing in raw mode.\n");
                } else
                {
                    raw = 0;
                    printf(" * detected short nand file, flashing in cooked mode.\n");
                }
                fseek(f, 0, SEEK_SET);
            }
           
            int i;
            for (i = 0; i < nandsize; i += 0x4000)
            {
                unsigned char sector[0x210*32], sector_flash[0x210*32];
                memset(sector, 0xFF, sizeof(sector));
                if (!fread(sector, 1, 0x210*32, f))
                    return i;

                printf("%08x\r", i);
                fflush(stdout);
               
                readsector(sector_flash, i, 0);
               
                int phys_pos;
               
                if (!raw)
                {
                    phys_pos = sfcx_readreg(PHYSICAL);
               
                    if (!(phys_pos & 0x04000000)) /* shouldn't happen, unless the existing image is broken. just assume the sector is okay. */
                    {
                        printf(" * Uh, oh, don't know. Reading at %08x failed.\n", i);
                        phys_pos = i;
                    }
                    phys_pos &= 0x3fffe00;
               
                    if (phys_pos != i)
                        printf(" * relocating sector %08x to %08x...\n", i, phys_pos);
                } else
                    phys_pos = i;

                flash_erase(phys_pos);
                int j;
                for (j = 0; j < 32; ++j)
                    write_page(phys_pos + j * 0x200, sector + j * 0x210);
            }
            return 0;
        }

        int main(int argc, char **argv)
        {
            flash = ioremap(0xea00c000, 0x1000, 1);
           
            printf(" * flash config: %08x\n", sfcx_readreg(0));
           
            sfcx_writereg(0, sfcx_readreg(0) &~ (4|8|0x3c0));
           
            int reg = sfcx_readreg(0);

            switch(reg)
            {
            case 0x00AA3020:
                nandsize = 512 * 1024 * 1024;
                break;
            case 0x008A3020:
                nandsize = 256 * 1024 * 1024;
                break;
            case 0x00023010:
                nandsize = 16 * 1024 * 1024;
                break;
            case 0x01198010:
                nandsize = 16 * 1024 * 1024;
                break;
            default:
                printf(" * unknown flash config %08x\n", reg);
                return 1;
            }
           
            if (argc != 2 && argc != 3)
            {
                printf("usage: %s <current> [<new>]\n", *argv);
                return 2;
            }

            const char *orig = argv[1];
            int res = verify_flash_with_file(orig, 1);
            if (res == -1)
            {
                dump_flash_to_file(orig);
                res = verify_flash_with_file(orig, 1);
            }

            if (res != nandsize)
            {
                if (res == -2)
                    printf(" * verify failed!\n");
                else if (res > 0)
                    printf(" * verified correctly, but only %d bytes.\n", res);
                else
                    printf(" * original image invalid\n");
                printf(" * I won't flash if you don't have a full, working backup, sorry.\n");
                return 1;
            }
            printf(" * verify ok.\n");
           
            if (argc > 2)
            {
                const char *image = argv[2];
               
                flash_from_file(image, -1);
                res = verify_flash_with_file(image, -1);
                if (res > 0)
                    printf(" * verified %d bytes ok\n", res);
                else
                    printf(" * verify failed! (%d)\n", res);
            }
            return 0;
        }
Buenas, a ver si alguien puede ayudarme, estoy intentando cargar el Gentoo pero no lo consigo.

- He grabado un DVD con la imagen del Gentoo usando imgburn.
- Tengo mi consola (Xenon) con el XBRebooter_1 instalado
- Meto el disco en la consola, la enciendo usando el Mando Multimedia dandole al boton del Media Center
- Carga el Xell, pero cuando llega a Fuseset_11:----------------- se queda ahi y no hace nada. (he visto que deberia cargar el USB justo despues de esto pero a mi no me hace absolutamente nada mas)

No tengo teclado USB y estoy intentando cargarlo solo usando un raton para ver si se puede usar algun tipo de teclado virtual para escribir.

Puede ser culpa de esto el que no me carge el Gentoo?, Tengo dañada la parte de la NAND que se encarga del Xell? Necesito vuestra ayuda.

Un saludo, y gracias de antemano.
Decir tambien que el XBR que tengo me va bien, lo unico raro que me hace es que al igual que a algunas personas no me deja instalar el XeXLoader en el disco duro (aparece medio segundo en la lista de juegos y desaparece).

Otra cosa, al tener el XBR no me hace falta la copia del KingKong parcheada no? o es este mi problema?
DazMalaga, gracias por el archivo le echare un ojo aunque no podre probar si funciona porque como dije no tengo una jasper, a ver si alguien lo prueba y si funciona lo pongo en el tutorial.

Matanza30 escribió:Buenas, a ver si alguien puede ayudarme, estoy intentando cargar el Gentoo pero no lo consigo.

- He grabado un DVD con la imagen del Gentoo usando imgburn.
- Tengo mi consola (Xenon) con el XBRebooter_1 instalado
- Meto el disco en la consola, la enciendo usando el Mando Multimedia dandole al boton del Media Center
- Carga el Xell, pero cuando llega a Fuseset_11:----------------- se queda ahi y no hace nada. (he visto que deberia cargar el USB justo despues de esto pero a mi no me hace absolutamente nada mas)

No tengo teclado USB y estoy intentando cargarlo solo usando un raton para ver si se puede usar algun tipo de teclado virtual para escribir.

Puede ser culpa de esto el que no me carge el Gentoo?, Tengo dañada la parte de la NAND que se encarga del Xell? Necesito vuestra ayuda.

Un saludo, y gracias de antemano.
Decir tambien que el XBR que tengo me va bien, lo unico raro que me hace es que al igual que a algunas personas no me deja instalar el XeXLoader en el disco duro (aparece medio segundo en la lista de juegos y desaparece).

Otra cosa, al tener el XBR no me hace falta la copia del KingKong parcheada no? o es este mi problema?


¿Cuando carga el Xell intenta leer el cd de gentoo? puede ser que este mal grabado y por eso no te lo pille. El KingKong no hace falta, eso es para el antiguo xploit.

Saludos
DazMalaga escribió:RastaMan Me ha pasado por Mp este iflash para jasper 256/512.
No lo he podido probar puesto que aun no tengo la xbox y no tenemos la version de xbr para jasper 256/512.

        /* placed in public domain, written by Felix Domke <tmbinc@elitedvb.net> */
            /* USE ON YOUR OWN RISK. */
        #include <stdio.h>
        #include <sys/stat.h>
        #include <fcntl.h>
        #include <unistd.h>
        #include <sys/mman.h>
        #include <byteswap.h>
        #include <string.h>

        int nandsize;

        extern void *mmap64 (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) __THROW;

        volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync)
        {
            int axs_mem_fd = -1;
            unsigned long long page_addr, ofs_addr, reg, pgmask;
            void* reg_mem = NULL;

            /*
             * looks like mmap wants aligned addresses?
             */
            pgmask = getpagesize()-1;
            page_addr = physaddr & ~pgmask;
            ofs_addr  = physaddr & pgmask;

            /*
             * Don't forget O_SYNC, esp. if address is in RAM region.
             * Note: if you do know you'll access in Read Only mode,
             *    pass O_RDONLY to open, and PROT_READ only to mmap
             */
            if (axs_mem_fd == -1) {
                axs_mem_fd = open("/dev/mem", O_RDWR|(sync ? O_SYNC : 0));
                if (axs_mem_fd < 0) {
                        perror("AXS: can't open /dev/mem");
                        return NULL;
                }
            }

            /* memory map */
            reg_mem = mmap64(
                (caddr_t)reg_mem,
                size+ofs_addr,
                PROT_READ|PROT_WRITE,
                MAP_SHARED,
                axs_mem_fd,
                page_addr
            );
            if (reg_mem == MAP_FAILED) {
                perror("AXS: mmap error");
                close(axs_mem_fd);
                return NULL;
            }

            reg = (unsigned long )reg_mem + ofs_addr;
            return (volatile void *)reg;
        }

        int iounmap(volatile void *start, size_t length)
        {
            unsigned long ofs_addr;
            ofs_addr = (unsigned long)start & (getpagesize()-1);

            /* do some cleanup when you're done with it */
            return munmap((unsigned char*)start-ofs_addr, length+ofs_addr);
        }

        #define STATUS  1
        #define COMMAND 2
        #define ADDRESS 3
        #define DATA    4
        #define LOGICAL 5
        #define PHYSICAL 6

        volatile unsigned int *flash;

        void sfcx_writereg(int reg, int value)
        {
            flash[reg] = bswap_32(value);
        }

        unsigned int sfcx_readreg(int reg)
        {
            return bswap_32(flash[reg]);
        }

        void readsector(unsigned char *data, int sector, int raw)
        {
            int status;
            sfcx_writereg(STATUS, sfcx_readreg(STATUS));
            sfcx_writereg(ADDRESS, sector);   
            sfcx_writereg(COMMAND, raw ? 3 : 2);

            while ((status = sfcx_readreg(STATUS))&1);

            if (status != 0x200)
            {
                if (status & 0x40)
                    printf(" * Bad block found at %08x\n", sector);
                else if (status & 0x1c)
                    printf(" * (corrected) ECC error %08x: %08x\n", sector, status);
                else if (!raw)
                    printf(" * illegal logical block %08x\n", sector);
                else
                    printf(" * Unknown error at %08x: %08x. Please worry.\n", sector, status);
            }

            sfcx_writereg(ADDRESS, 0);

            int i;
            for (i = 0; i < 0x210; i+=4)
            {
                sfcx_writereg(COMMAND, 0);
                *(int*)(data + i) = bswap_32(sfcx_readreg(DATA));
            }
        }

        void flash_erase(int address)
        {
            sfcx_writereg(0, sfcx_readreg(0) | 8);
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(ADDRESS, address);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0xAA);
            sfcx_writereg(COMMAND, 0x55);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0x5);
            while (sfcx_readreg(STATUS) & 1);
            int status = sfcx_readreg(STATUS);
            if (status != 0x200)
                printf("[%08x]", status);
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(0, sfcx_readreg(0) & ~8);
        }

        void write_page(int address, unsigned char *data)
        {
            sfcx_writereg(STATUS, 0xFF);
            sfcx_writereg(0, sfcx_readreg(0) | 8);

            sfcx_writereg(ADDRESS, 0);

            int i;

            for (i = 0; i < 0x210; i+=4)
            {
                sfcx_writereg(DATA, bswap_32(*(int*)(data + i)));
                sfcx_writereg(COMMAND, 1);
            }

            sfcx_writereg(ADDRESS, address);
            sfcx_writereg(COMMAND, 0x55);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0xAA);
            while (sfcx_readreg(STATUS) & 1);
            sfcx_writereg(COMMAND, 0x4);
            while (sfcx_readreg(STATUS) & 1);
            int status = sfcx_readreg(STATUS);
            if (status != 0x200)
                printf("[%08x]", status);
            sfcx_writereg(0, sfcx_readreg(0) & ~8);
        }



        extern volatile void * ioremap(unsigned long long physaddr, unsigned size, int sync);
        extern int iounmap(volatile void *start, size_t length);

        int dump_flash_to_file(const char *filename)
        {
            printf(" * Dumping to %s...\n", filename);
           
            FILE *f = fopen(filename, "wb");
           
            int i;
            for (i = 0; i < nandsize; i += 0x200)
            {
                unsigned char sector[0x210];
                readsector(sector, i, 1);
                if (!(i&0x3fff))
                {
                    printf("%08x\r", i);
                    fflush(stdout);
                }
                if (fwrite(sector, 1, 0x210, f) != 0x210)
                    return -1;
            }
            printf("done!   \n");
            fclose(f);
            return 0;
        }

        int verify_flash_with_file(const char *filename, int raw)
        {
            FILE *f = fopen(filename, "rb");
            if (!f)
                return -1;

            if (raw == -1) /* auto */
            {
                fseek(f, 0, SEEK_END);
           
                if (ftell(f) == nandsize / 0x200 * 0x210)
                {
                    raw = 1;
                    printf(" * detected RAW nand file, verifying in raw mode.\n");
                } else
                {
                    raw = 0;
                    printf(" * detected short nand file, verifying in cooked mode.\n");
                }
                fseek(f, 0, SEEK_SET);
            }
           
            printf(" * Verifying flash with %s...\n", filename);
           
            int i;
            for (i = 0; i < nandsize; i += 0x200)
            {
                unsigned char sector[0x210], sector_flash[0x210];
                if (!(i&0x3fff))
                {
                    printf("%08x\r", i);
                    fflush(stdout);
                }
                if (fread(sector, 1, 0x210, f) != 0x210)
                    return i;
                readsector(sector_flash, i, raw);
                if (sector_flash[0x200] != 0xFF) /* bad sector */
                {
                    printf(" * ignoring bad sector at %08x\n", i);
                    continue;
                }
                if (memcmp(sector, sector_flash, 0x210))
                {
                    printf(" * VERIFY error at %08x\n", i);
                    return -2;
                }
            }
            printf("done!   \n");
            fclose(f);
            return i;
        }

        int flash_from_file(const char *filename, int raw)
        {
            printf(" * Flashing from %s...\n", filename);

            FILE *f = fopen(filename, "rb");
            if (!f)
                return -1;

            if (raw == -1) /* auto */
            {
                fseek(f, 0, SEEK_END);
           
                if (ftell(f) == nandsize / 0x200 * 0x210)
                {
                    raw = 1;
                    printf(" * detected RAW nand file, flashing in raw mode.\n");
                } else
                {
                    raw = 0;
                    printf(" * detected short nand file, flashing in cooked mode.\n");
                }
                fseek(f, 0, SEEK_SET);
            }
           
            int i;
            for (i = 0; i < nandsize; i += 0x4000)
            {
                unsigned char sector[0x210*32], sector_flash[0x210*32];
                memset(sector, 0xFF, sizeof(sector));
                if (!fread(sector, 1, 0x210*32, f))
                    return i;

                printf("%08x\r", i);
                fflush(stdout);
               
                readsector(sector_flash, i, 0);
               
                int phys_pos;
               
                if (!raw)
                {
                    phys_pos = sfcx_readreg(PHYSICAL);
               
                    if (!(phys_pos & 0x04000000)) /* shouldn't happen, unless the existing image is broken. just assume the sector is okay. */
                    {
                        printf(" * Uh, oh, don't know. Reading at %08x failed.\n", i);
                        phys_pos = i;
                    }
                    phys_pos &= 0x3fffe00;
               
                    if (phys_pos != i)
                        printf(" * relocating sector %08x to %08x...\n", i, phys_pos);
                } else
                    phys_pos = i;

                flash_erase(phys_pos);
                int j;
                for (j = 0; j < 32; ++j)
                    write_page(phys_pos + j * 0x200, sector + j * 0x210);
            }
            return 0;
        }

        int main(int argc, char **argv)
        {
            flash = ioremap(0xea00c000, 0x1000, 1);
           
            printf(" * flash config: %08x\n", sfcx_readreg(0));
           
            sfcx_writereg(0, sfcx_readreg(0) &~ (4|8|0x3c0));
           
            int reg = sfcx_readreg(0);

            switch(reg)
            {
            case 0x00AA3020:
                nandsize = 512 * 1024 * 1024;
                break;
            case 0x008A3020:
                nandsize = 256 * 1024 * 1024;
                break;
            case 0x00023010:
                nandsize = 16 * 1024 * 1024;
                break;
            case 0x01198010:
                nandsize = 16 * 1024 * 1024;
                break;
            default:
                printf(" * unknown flash config %08x\n", reg);
                return 1;
            }
           
            if (argc != 2 && argc != 3)
            {
                printf("usage: %s <current> [<new>]\n", *argv);
                return 2;
            }

            const char *orig = argv[1];
            int res = verify_flash_with_file(orig, 1);
            if (res == -1)
            {
                dump_flash_to_file(orig);
                res = verify_flash_with_file(orig, 1);
            }

            if (res != nandsize)
            {
                if (res == -2)
                    printf(" * verify failed!\n");
                else if (res > 0)
                    printf(" * verified correctly, but only %d bytes.\n", res);
                else
                    printf(" * original image invalid\n");
                printf(" * I won't flash if you don't have a full, working backup, sorry.\n");
                return 1;
            }
            printf(" * verify ok.\n");
           
            if (argc > 2)
            {
                const char *image = argv[2];
               
                flash_from_file(image, -1);
                res = verify_flash_with_file(image, -1);
                if (res > 0)
                    printf(" * verified %d bytes ok\n", res);
                else
                    printf(" * verify failed! (%d)\n", res);
            }
            return 0;
        }


De hecho no solo es para las jasper, soporta los dos tipos de flash de 16Mb el de 256 y el de 512. Lleva el control de los 4 flashconfig implementados y ajusta el tamaño de la nand a procesar de acuerdo al flashconfig. Pero que conste que el codigo no es mio, andaba ya publicado por el foro solo le añadi el flashconfig de las Xenon.
Raugo, no, no hace absolutamente nada, no intenta leer de el disco ni nada.

Hay que grabarlo de algun modo en concreto?, Lo e grabado en un DVD porque no tengo CD's a mano, y e probado tanto a velocidad maxima como a 2x. Lo grabo a 1x a ver que pasa?
Hola

Es posible cargar el gentoo por usb? Es que tengo el lector roto y no tengo el firm original para hacer un spoof

se os ocurre alguna manera de cargar el linux?
Gracias
RastaMan escribió:De hecho no solo es para las jasper, soporta los dos tipos de flash de 16Mb el de 256 y el de 512. Lleva el control de los 4 flashconfig implementados y ajusta el tamaño de la nand a procesar de acuerdo al flashconfig. Pero que conste que el codigo no es mio, andaba ya publicado por el foro solo le añadi el flashconfig de las Xenon.


Si, eso he visto que tiene los flashconfig de todas las placas. A ver si alguien lo prueba y ve si funciona bien porque el que hay en el tutorial de Pitisaurio segun lei en xboxscene tenia problemas a la hora de escribir en la nand.

Matanza30 escribió:Raugo, no, no hace absolutamente nada, no intenta leer de el disco ni nada.

Hay que grabarlo de algun modo en concreto?, Lo e grabado en un DVD porque no tengo CD's a mano, y e probado tanto a velocidad maxima como a 2x. Lo grabo a 1x a ver que pasa?


Pues es raro, el xell por defecto al cargar lee lo que hay en el DVD igual tienes algun problema con el lector o con el xell. Puedes probar a cargarlo por TFTP, yo no lo he echo nunca pero segun lei lo que hay que hacer es conectar por cable de red la consola y el PC configurando las IPs, usando un cliente TFTP enviamos el fichero vmlinux. Como dije no lo hice nunca, aunque probablemente cuando vuelva de vacaciones lo hare ya que tengo que actualizar mi consola y el lector lo tengo quitado.

-+Dave+- escribió:Hola

Es posible cargar el gentoo por usb? Es que tengo el lector roto y no tengo el firm original para hacer un spoof

se os ocurre alguna manera de cargar el linux?
Gracias


No se puedes cargar por USB, puedes probar lo del TFTP que dije mas arriba, sino tambien puedes poner un lector cualquiera (incluso uno de PC si lo alimentas externamente) ya que al xell le da igual todo eso.

Saludos
Tengo un lector MS-28 de una xbox con 3 luces rojas, puedo ponerlo y tratar de cargarlo? Hace falta que le ponga la key de la consola origianl o al xell le da igual.

Gracias.
-+Dave+- escribió:Tengo un lector MS-28 de una xbox con 3 luces rojas, puedo ponerlo y tratar de cargarlo? Hace falta que le ponga la key de la consola origianl o al xell le da igual.

Gracias.


Al xell todo eso le da igual, el se lo traga todo.

Saludos
Hice los pasos del tutorial. Sin embargo en el paso de "su -", omiti el - (por que con el - puesto no me daba permisos y marcaba error en los password al querer cambiarlo).
Aparentemente todo se habia realizado correctamente... pero en el ultimo paso, marco una serie de bad blocks al final del programa, al rededor de 20 bad blocks.

Cabe mencionar que las 2 veces que he flasheado por medio de lpt no me ha dado errores la nand, ni de lectura ni escritura.

Es una placa falcon, utilize el XBR_3a. Puede cargar xell al presionar "eject". Pero al encenderla, al rededor de unos 6-8 sgundos aparecen las 3 luces rojas con error 0020.

Alguna recomendacion?

Edit: El error era mio... bueno mas bien de la consola, le hice un reflow y en cuanto la encendi funciono... asi que el tutorial funciona perfecto.
Aragan escribió:Hice los pasos del tutorial. Sin embargo en el paso de "su -", omiti el - (por que con el - puesto no me daba permisos y marcaba error en los password al querer cambiarlo).
Aparentemente todo se habia realizado correctamente... pero en el ultimo paso, marco una serie de bad blocks al final del programa, al rededor de 20 bad blocks.

Cabe mencionar que las 2 veces que he flasheado por medio de lpt no me ha dado errores la nand, ni de lectura ni escritura.

Es una placa falcon, utilize el XBR_3a. Puede cargar xell al presionar "eject". Pero al encenderla, al rededor de unos 6-8 sgundos aparecen las 3 luces rojas con error 0020.

Alguna recomendacion?


¿Estás seguro de que tu nand no tenía ningún bad block?
¿Comparaste con el degraded cuando las extraiste?
¿Fueron las dos copias de la nand totalmente iguales?
Si no es así búscate un programa que reasigna los bad blocks (no recuerdo ahora mismo el nombre)
Si estás seguro de que no tienes ningún bad block, asegúrate de haber introducido bien la kv y la config en la imagen de xbr

Después de todo esto métele por lpt el xell solamente e intenta hacer el proceso de nuevo. Si no, métele el xbr por lpt (aunque sea más lento, que le vamos a hacer... [carcajad] )
PD: Yo usé el comando "su" sin guión y funcionó bien, no creo que tenga nada que ver con los bad blocks
Ya puse el xbr nuevo con el gentoo les cuento mi lector es un samusm-ms28 pero batalla al leer los cds así que le puse un Hitachi de un Xbox muerto entraba rápido y cargaba pero parece que hay parte de boot de Linux marca errores y se queda en root(): esto lo solucione cambiando mi lectora original y tocándole el potenciómetro para aumentar la intensidad de las lecturas de cds.
Otra cosa que me paso si inicia con el conector de mi teclado/mouse inalámbricos me dice hub usb detectado y ahí se queda el live cd de gento, si inicia con una usb conectada te marca kernel panic
Enfin ya que inicie gento con todo ese contratiempo
La intente flashear con los comandos y copialndo el archivo que nos dieron en la guía y nunca lopude copilar medaba un error en la línea 50 asi que un amigo que ya lo había actualizando lepedi su archivo a.out que genero al copilarlo pongo el comando ./a.out backup.bin XBR.bin y medetecta la placa pero me decía que no pudo comprobar la backup.bin entonces decidí borrar el .bin a backup y empezó el proceso.
Marca varios errores en los bloques a mi amigo le salieron igual aunque en si en el xbr no me a dado ningún problema eso si cambia la forma de meterte al xell ya que a mi ya no me entra con el usb trasero sino con el botón de eject
También les recomiendo darle un update al xell con updxell-20090911 está en xbins solo dejan el archivo como updatexell.bin sin ningún otro archivo como xenón.elf y empieza a actualizar
Atencion señores!!!!
Nueva manera de cargar el xell y el gentoo sin mando multimedia ni mando ni ná. Solo el teclado y mouse (tambien arranca sin ellos conectados).

Conectar la consola con el cable de componentes, copuesto o VGA (nada de HDMI)
Con la consola apagada. Encender la consola con el boton de abrir la bandeja.
La consola arrancará y nostrará la pantalla azul (xell, cpukey, etc)
Si queremos arrancar el el gentoo hay que cerrar la bandeja con el cd puesto cuando la luz central verde del frontal de la xbox se apague, si lo haces despues no cargará el cd.
El sistema ha sido probado con una zephyr y con una falcon. 100% funcional
me podrian decir cuanto tarda mas o menos en flashear el gentoo? gracias
Intento arrancar Linux pero se queda pillado durante la carga de este.
Aquí es donde se queda pillado:
Imagen

Y estos son los colores, es raro que sea: rojo, naranja verde y apagado?
Imagen

Como info adicional:
- El hdd de la 360 esta desconectado
- Esta conectada la memory unit en el puerto 1
- En los usb delanteros estan el mouse y teclado
- No hay nada en el usb trasero
- El cd linux lo he grabado hace 10 mins a 10x con imgburn (a la mínima velocidad que podia)
- Lleva mas de 5 minutos trabado en la imagen que he puesto xD (vamos, que no creo que avance ni en media hora)

Espero vuestra ayuda, gracias por adelntado.
Saludos !

Edito:
Desconectando la memory unit ahora pasa de ahi, pero se queda pillada en una linea que pone Freeing memory 1580 kb o algo así. Según le pique llega hasta aquí o se queda pillada en la primera imagen.
amm esos colores ami me los da el minimal... que vercion de gentoo estas usando

si no mal recuerdo dura menos de 2 minutos la actualizacion
Estoy usando "gentoo-xenon-minimal-2006.1.iso", hay alguna otra? Si es así, podrias indicarme donde puedo conseguilra?

Gracias !

Edito: vale he visto que el tutorial usa otra, voy a probarla !
gentoo-livecd-xenon-beta-v2.iso en free60 pesa creo que un poco mas de 600mb lo puedes quemar tambien en dvd no hay problema
napsterMisaKi escribió:gentoo-livecd-xenon-beta-v2.iso en free60 pesa creo que un poco mas de 600mb lo puedes quemar tambien en dvd no hay problema


Gracias napsterMisaKi :D

Por cierto, espero que se actualice el tutorial con la informacion de chechill, sino habra gente que desmontará la consola y la flasheará durante media hora...puediendo evitar esos dos inconvenientes xD
sip de echo pero valga se soluciona rondando por los foros un poco xD!!
Confirmo que la versión original de lflash funciona en Jasper de 16MB. Simplemente hay que cambiar la línea:
if (sfcx_readreg(0) != 0x0119810)


por la siguiente:

if (sfcx_readreg(0) != 0x00023010)


Probado con la versión del XBR XBR_Jasper16_8955_3a

Salu2 :p
pues ya lo logre, estubo complicado puesto que no tengo raton usb, pero con el puro teclado lo logre

mkdir /mnt/usb
dmesg | grep -i "SCSI device"
mount /dev/sda1 /mnt/usb (por defecto es sda1 pero en caso de tener mas particiones o unidades de almacenamiento puede que sea sda2 sdb1 etc)
cd /mnt/usb
gcc lflash.c -o lflash
./lflash backup.bin XBR.bin (o el nombre que le pusierais al XBR).

mi problema era que el lflash.c que use tenia el nombre lflash_lflash.c por eso no pasaba de ai me di cuenta y puse , gcc lflash_lflash.c -o lflash y logre pasar, puse el ultimo comando y listo flasheo el xbr y yua estoy jugando dead rising pal en mi consola ntsc (antes se trababa en la pantalla de pulsar start, gracias por la info.
179 respuestas
1, 2, 3, 4