void fsboot(int devnr) { int size; unsigned int cmdline_adr, initrdstart_adr, initrdend_adr; printf("I: Booting from filesystem...\n"); if(!fatfs_init(devnr)) { printf("E: Unable to initialize filesystem\n"); return; } if(tryload("BOOT.BIN", SDRAM_BASE) <= 0) { printf("E: Firmware image not found\n"); fatfs_done(); return; } cmdline_adr = SDRAM_BASE+0x1000000; size = tryload("CMDLINE.TXT", cmdline_adr); if(size <= 0) { printf("I: No command line parameters found (CMDLINE.TXT)\n"); cmdline_adr = 0; } else *((char *)(cmdline_adr+size)) = 0x00; initrdstart_adr = SDRAM_BASE+0x1002000; size = tryload("INITRD.BIN", initrdstart_adr); if(size <= 0) { printf("I: No initial ramdisk found (INITRD.BIN)\n"); initrdstart_adr = 0; initrdend_adr = 0; } else initrdend_adr = initrdstart_adr + size - 1; fatfs_done(); printf("I: Booting...\n"); boot(cmdline_adr, initrdstart_adr, initrdend_adr, rescue, SDRAM_BASE); }
static void load(char *filename, char *addr, char *dev) { char *c; unsigned int *addr2; if((*filename == 0) || (*addr == 0)) { printf("load <filename> <address>\n"); return; } addr2 = (unsigned *)strtoul(addr, &c, 0); if(*c != 0) { printf("incorrect address\n"); return; } if(!fatfs_init(BLOCKDEV_MEMORY_CARD)) return; fatfs_load(filename, (char *)addr2, 16*1024*1024, NULL); fatfs_done(); }
static void ls(char *dev) { if(!fatfs_init(BLOCKDEV_MEMORY_CARD)) return; fatfs_list_files(lscb, NULL); fatfs_done(); }