local: Implement local_dump_image
This commit is contained in:
1 parent
bd141d2739
commit
01ec9928f9
1 file changed
+67
-3
+67
-3
@@ -25,6 +25,7 @@
|
||||
#endif
|
||||
|
||||
#include "local.h"
|
||||
#include "global.h"
|
||||
#include "device.h"
|
||||
#include "image.h"
|
||||
|
||||
@@ -115,11 +116,74 @@ int local_flash_image(struct image * image) {
|
||||
|
||||
}
|
||||
|
||||
static int local_nanddump(const char * file, int mtd, int offset) {
|
||||
|
||||
char * command;
|
||||
size_t size;
|
||||
int ret;
|
||||
|
||||
size = snprintf(NULL, 0, "nanddump -s %d -f %s /dev/mtd%dro", offset, file, mtd);
|
||||
|
||||
command = malloc(size);
|
||||
if ( ! command )
|
||||
return 1;
|
||||
|
||||
snprintf(command, size, "nanddump -s %d -f %s /dev/mtd%dro", offset, file, mtd);
|
||||
|
||||
ret = system(command);
|
||||
|
||||
free(command);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
struct nanddump_args {
|
||||
int valid;
|
||||
int mtd;
|
||||
int offset;
|
||||
};
|
||||
|
||||
static struct nanddump_args nanddump_n900[] = {
|
||||
[IMAGE_XLOADER] = { 1, 0, 0x00000000 },
|
||||
[IMAGE_SECONDARY] = { 1, 0, 0x00004200 },
|
||||
[IMAGE_KERNEL] = { 1, 3, 0x00000800 },
|
||||
[IMAGE_INITFS] = { 1, 4, 0x00000800 },
|
||||
[IMAGE_ROOTFS] = { 1, 5, 0x00000000 },
|
||||
};
|
||||
|
||||
/* FIXME: Is this table correct? */
|
||||
static struct nanddump_args nanddump[] = {
|
||||
[IMAGE_XLOADER] = { 1, 0, 0x00000200 },
|
||||
[IMAGE_SECONDARY] = { 1, 0, 0x00004000 },
|
||||
[IMAGE_KERNEL] = { 1, 2, 0x00000800 },
|
||||
[IMAGE_INITFS] = { 1, 3, 0x00000800 },
|
||||
[IMAGE_ROOTFS] = { 1, 4, 0x00000000 },
|
||||
};
|
||||
|
||||
int local_dump_image(enum image_type image, const char * file) {
|
||||
|
||||
/* kernel on n900:
|
||||
system("nanddump -s 0x000800 -f /var/tmp/zImage /dev/mtd3");
|
||||
*/
|
||||
if ( device == DEVICE_RX_51 ) {
|
||||
|
||||
if ( image < sizeof(nanddump_n900)/sizeof(nanddump_n900[0]) || ! nanddump_n900[image].valid ) {
|
||||
ERROR("Unsuported image type: %s", image_type_to_string(image));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return local_nanddump(file, nanddump_n900[image].mtd, nanddump_n900[image].offset);
|
||||
|
||||
} else {
|
||||
|
||||
if ( image < sizeof(nanddump)/sizeof(nanddump[0]) || ! nanddump[image].valid ) {
|
||||
ERROR("Unsuported image type: %s", image_type_to_string(image));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return local_nanddump(file, nanddump[image].mtd, nanddump[image].offset);
|
||||
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user