Hi, I recent make a patch which give the rd command to dump the raw data. With this, we could then do the dump the specified range of memory to the file with console's redirection feature like: rd -r 0x7000000 -e 0x8000000 > dump.img. What about this idea? Could it be accepted? Thanks, Lei >From f60eee5520993d823cf705ecea62b8d60166f3ae Mon Sep 17 00:00:00 2001 From: Lei Wen <leiwen@xxxxxxxxxxx> Date: Thu, 29 Sep 2011 20:03:29 -0700 Subject: [PATCH] rd: add option to dump the raw format Signed-off-by: Lei Wen <leiwen@xxxxxxxxxxx> --- help.c | 3 ++- memory.c | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/help.c b/help.c index b8db00a..987bd95 100755 --- a/help.c +++ b/help.c @@ -1396,7 +1396,7 @@ NULL char *help_rd[] = { "rd", "read memory", -"[-adDsSupxmfN][-8|-16|-32|-64][-o offs][-e addr] [address|symbol] [count]", +"[-adDsSupxrmfN][-8|-16|-32|-64][-o offs][-e addr] [address|symbol] [count]", " This command displays the contents of memory, with the output formatted", " in several different manners. The starting address may be entered either", " symbolically or by address. The default output size is the size of a long", @@ -1426,6 +1426,7 @@ char *help_rd[] = { " non-printable character.", " -N display output in network byte order (only valid for 16- and 32-bit", " values)", +" -r dump the address as raw format", " -o offs offset the starting address by offs.", " -e addr display memory until reaching specified ending hexadecimal address.", " address starting hexadecimal address:", diff --git a/memory.c b/memory.c index 9575d8e..985e2ec 100755 --- a/memory.c +++ b/memory.c @@ -264,6 +264,7 @@ static void dump_page_flags(ulonglong); #define SLAB_CACHE (0x1000) #define DISPLAY_ASCII (0x2000) #define NET_ENDIAN (0x4000) +#define DISPLAY_RAW (0x8000) #define DISPLAY_TYPES (DISPLAY_ASCII|DISPLAY_8|DISPLAY_16|DISPLAY_32|DISPLAY_64) #define ASCII_UNLIMITED ((ulong)(-1) >> 1) @@ -973,9 +974,12 @@ cmd_rd(void) memtype = KVADDR; count = -1; - while ((c = getopt(argcnt, args, "axme:pfudDusSNo:81:3:6:")) != EOF) { + while ((c = getopt(argcnt, args, "raxme:pfudDusSNo:81:3:6:")) != EOF) { switch(c) { + case 'r': + flag |= DISPLAY_RAW; + break; case 'a': flag &= ~DISPLAY_TYPES; flag |= DISPLAY_ASCII; @@ -1291,6 +1295,13 @@ display_memory(ulonglong addr, long count, ulong flag, int memtype) for (i = a = 0; i < count; i++) { readmem(addr, memtype, location, typesz, readtype, FAULT_ON_ERROR); + if (flag & DISPLAY_RAW) { + for (j = 0; j < typesz; j++) + fputc(*(char *)(location + j), fp); + + addr += typesz; + continue; + } if (!(flag & DISPLAY_ASCII) && ((i % per_line) == 0)) { if (i) { -- 1.7.0.4 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility