* Drop the partition limit. It is calculed with ioctl()
* Query the user to strip or not the dumped pieces * Add new flag '-s' for serial port console
This commit is contained in:
1 parent
43d8d45919
commit
ec71146727
5 files changed
+112
-16
No files matched your search
+1
-1
@@ -1,5 +1,5 @@
|
||||
VERSION=0.2
|
||||
OBJ=main.o fiasco.o hexdump.o dump.o flash.o
|
||||
OBJ=main.o fiasco.o hexdump.o dump.o flash.o serial.o
|
||||
OBJ+=hash.o fpid.o query.o pieces.o utils.o devices.o
|
||||
BIN=0xFFFF
|
||||
CFLAGS+=-DVERSION=\"${VERSION}\" -Wall -g -I .
|
||||
|
||||
+16
-12
@@ -393,28 +393,32 @@ int reverse_extract_pieces(char *dir)
|
||||
char reply;
|
||||
chdir(dir);
|
||||
|
||||
nanddump("/dev/mtd0", is_n800()?0x200:0, 0x003600, "xloader.bin");
|
||||
//rf_extract("/dev/mtd0", is_n800()?0x200:0, 0x003600, "xloader.bin");
|
||||
nanddump("/dev/mtd0", 0x004000, 0x01ffff, "secondary.bin");
|
||||
nanddump("/dev/mtd0", is_n800()?0x200:0, 0, "xloader.bin");
|
||||
//rf_extract("/dev/mtd0", 0x004000, 0x01ffff, "secondary.bin");
|
||||
nanddump("/dev/mtd2", 0x000800, 0x200000, "zImage");
|
||||
nanddump("/dev/mtd0", 0x004000, 0, "secondary.bin");
|
||||
//rf_extract("/dev/mtd2", 0x000800, 0x200000, "zImage");
|
||||
nanddump("/dev/mtd3", 0x000000, 0x1D00000, "initfs.jffs2");
|
||||
nanddump("/dev/mtd2", 0x000800, 0, "zImage");
|
||||
//rf_extract("/dev/mtd3", 0x000000, 0x1D00000, "initfs.jffs2");
|
||||
printf("\nWARNING: the rootfs extraction on n800 is known to be buggy! feedback is welcome.\n\n");
|
||||
printf("Extract rootfs? (y/N): "); fflush(stdout);
|
||||
nanddump("/dev/mtd3", 0x000000, 0, "initfs.jffs2");
|
||||
|
||||
printf("\n\nExtract rootfs? (y/N): "); fflush(stdout);
|
||||
read(0, &reply, 1);
|
||||
if (reply=='y'||reply=='Y') {
|
||||
nanddump("/dev/mtd4", 0x000000, 0x6000000, "rootfs.jffs2");
|
||||
//rf_extract("/dev/mtd4", 0x000000, 0x6000000, "rootfs.jffs2");
|
||||
}
|
||||
else printf("*** Ignoring rootfs\n");
|
||||
nanddump("/dev/mtd4", 0x000000, 0, "rootfs.jffs2");
|
||||
} else printf("*** Ignoring rootfs\n");
|
||||
|
||||
printf("\n\nStrip dumped files? (y/N): "); fflush(stdout);
|
||||
read(0, &reply, 1);
|
||||
if (reply=='y'||reply=='Y') {
|
||||
rf_strip("xloader.bin");
|
||||
rf_strip("secondary.bin");
|
||||
rf_strip("zImage");
|
||||
// rf_strip("initfs.jffs2"); // do not strip initfs, is 2MB long
|
||||
//and can be useful for data recovery
|
||||
printf("Identifying extracted files...\n");
|
||||
rf_strip("initfs.jffs2");
|
||||
} else printf("*** Ignoring strip\n");
|
||||
|
||||
printf("\nIdentifying extracted files...\n");
|
||||
printf("%s: xloader\n", fpid_file("xloader.bin"));
|
||||
printf("%s: secondary.bin\n", fpid_file("secondary.bin"));
|
||||
printf("%s: zImage\n", fpid_file("zImage"));
|
||||
|
||||
+6
-3
@@ -68,7 +68,7 @@ char *root_devices[] = {
|
||||
|
||||
void show_title()
|
||||
{
|
||||
printf("0xFFFF v%s - The Free Fiasco Firmware Flasher\n", VERSION);
|
||||
printf("0xFFFF v%s // The Free Fiasco Firmware Flasher\n", VERSION);
|
||||
}
|
||||
|
||||
void show_usage()
|
||||
@@ -83,6 +83,7 @@ void show_usage()
|
||||
printf(" -p [[p%%]file] piece-of-firmware %% file-where-this-piece-is\n");
|
||||
printf(" -u [fiasco] unpack target fiasco image\n");
|
||||
printf(" -U [0|1] disable/enable the usb host mode\n");
|
||||
printf(" -s [serial] serial port console (minicom like terminal)\n");
|
||||
printf(" -h show this help message\n");
|
||||
printf(" -i show device information (let standby mode)\n");
|
||||
printf(" -I [piece] identify a firmware piece\n");
|
||||
@@ -111,7 +112,7 @@ int main(int argc, char **argv)
|
||||
struct usb_device_descriptor udd;
|
||||
int c;
|
||||
|
||||
while((c = getopt(argc, argv, "p:vVhRu:ib:U:r:e:ld:I:D:f:")) != -1) {
|
||||
while((c = getopt(argc, argv, "p:vVhRu:ib:U:r:e:ld:I:D:f:s:")) != -1) {
|
||||
switch(c) {
|
||||
case 'd':
|
||||
sscanf(optarg, "%04hx:%04hx",
|
||||
@@ -125,6 +126,8 @@ int main(int argc, char **argv)
|
||||
case 'e':
|
||||
reverseto = optarg;
|
||||
break;
|
||||
case 's':
|
||||
return console(optarg);
|
||||
case 'f':
|
||||
if (!strcmp(optarg,"help")) {
|
||||
printf("* Flags are composed of:\n");
|
||||
@@ -194,7 +197,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
printf("Usage: 0xFFFF [-hvVRi] [-e path] [-U 0|1] [-p [piece%%]file [-p ...]]\n");
|
||||
printf(" [-b boot-args] [-I piece [-I ...]] [-u fiasco-image]\n");
|
||||
printf(" [-D 0|1|2] [-F rd flags]\n");
|
||||
printf(" [-D 0|1|2] [-F rd flags] [-s serial-dev]\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ extern struct usb_dev_handle *dev;
|
||||
int is_valid_device(struct usb_device_descriptor *udd);
|
||||
void list_valid_devices();
|
||||
int usb_device_found(struct usb_device_descriptor *udd);
|
||||
int console(const char *device);
|
||||
|
||||
extern int verbose;
|
||||
#define D if (verbose)
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright (C) 2007
|
||||
* pancake <pancake@youterm.com>
|
||||
*
|
||||
* 0xFFFF is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 0xFFFF is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with 0xFFFF; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
|
||||
int open_serial(const char *file)
|
||||
{
|
||||
struct termios tc;
|
||||
int fd = open (file, O_RDWR | O_SYNC);
|
||||
if (fd < 0) {
|
||||
perror (file);
|
||||
return -1;
|
||||
}
|
||||
// 115200 baud, 8n1, no flow control
|
||||
tcgetattr(fd, &tc);
|
||||
tc.c_iflag = IGNPAR;
|
||||
tc.c_oflag = 0;
|
||||
tc.c_cflag = CS8 | CREAD | CLOCAL;
|
||||
tc.c_lflag = 0;
|
||||
cfsetispeed(&tc, B115200);
|
||||
cfsetospeed(&tc, B115200);
|
||||
tcsetattr(fd, TCSANOW, &tc);
|
||||
return fd;
|
||||
}
|
||||
|
||||
int console(const char *device)
|
||||
{
|
||||
char str[513];
|
||||
int fd = open_serial(device);
|
||||
int pid;
|
||||
|
||||
if (fd == -1) {
|
||||
fprintf(stderr, "Cannot open serial device %s\n", device);
|
||||
return 1;
|
||||
}
|
||||
|
||||
pid = fork();
|
||||
if (pid) {
|
||||
while(1) {
|
||||
fgets(str, 512, stdin);
|
||||
if (write(fd, str, strlen(str)-1) == -1) {
|
||||
perror("write");
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
char buf;
|
||||
while(1) {
|
||||
if (read(fd, &buf,1) == -1) {
|
||||
perror("read");
|
||||
exit (1);
|
||||
}
|
||||
write(1, &buf, 1);
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user