----- Original Message ----- > > Hi Dave, > > one thing I want to correct: > I have my own read_ramdump function, > > write function is still the same as of write_kdump > > > by the way > > why do we need write function ?
If /dev/mem is used as the live memory source, then it is possible to modify memory. It's theoretically possible to use it with ELF dumpfiles, but the vmcore is opened O_RDONLY and cmd_wr() doesn't allow it. > > Currently I am using pc- >flags as of kdump itself, which I feel is not > right. (need to derive own set of flags for ramdump I suppose). > > moreover my thinking is following: > > 1) implement a framework which provide hooks to implement conversion of raw > ramdump to ELF. Right -- and then the decision needs to be made whether it's necessary to create a special dumpfile type, or simply create a kdump ELF clone. More on that below... > 2) this hooks could be implemented by ramdump32/ramdump64 or even anybody > else. > 3) have own set of flags and do not rely on KDUMP flags because this has > nothing to do with Kdump. You could continue to use the KDUMP flag given that you are essentially creating a clone of a kdump ELF vmcore. That is what is done with KVM guest vmcores that are created with "virsh dump --memory-only". The KDUMP flag is set, but because that facility also creates an extra ELF note with the name string "QEMU", the QEMU_MEM_DUMP flag is set in pc->flags2. That extra flag could be used if a differentiator is needed. You could do the same kind of thing. On the other hand, if you do think its best to create a new dumpfile-type flag, then some existing pc->flags #define (which is currently full) needs to be moved to pc->flags2, and your new flag could take its place. That's necessary because the MEMORY_SOURCES and DUMPFILE_TYPES require that their bit-flags contents are in pc->flags. > 4) have its own read and write function. Unless you have a compelling need for it, the write function be a placeholder that just returns WRITE_ERROR. Or just don't bother setting pc->writemem during initialization -- it will never get called anyway. Thanks, Dave > please provide your inputs. > > Regards, > Oza. > > > > > > On Friday, 30 May 2014 9:58 AM, paawan oza <paawan1...@yahoo.com> wrote: > > > > > Hi Dave, > > 1) what I talked about is pure 32bit (not with PAE, but should not be a > problem with PAE) > 64 bit ELF headers could also be in place. > > but my first and important point is: get 32bit implementation right (rest > will fall after that) > in other words, the design/framework has to be made in such a way that > existing crash utility absorbs both ELF32 and 64 and even any other > debugging format or not to mention for long term but 128 bit ELF format as > well :) > kdump should be capable of reading it I think. > > 2) OK, so then after you've created the temporary ELF file, crash internally > would end up setting the pc->readmem() pointers to read_kdump()? Or do > you have your own readmem() function in the new ramdump.c file? > > > currently I am setting function point to kdump, so I dont have separate > readmem function. > > 3) Clarify one more thing please: is the temporary file simply a little > standalone ELF > header that describes what's in the ddr.bin file? Or do you concatenate the > ELF > header and the ddr.bin file into a single, temporary, ELF vmcore file that > is essentially a clone > of an ELF kdump dumpfile? > > > it looks more closer to the former one which you mentioned. > standalone ELF object. (Vmcore is ELF format anyway, so should be similar) > not sure about kdump format though. > > > PS: It might take some time to post the patch because I wrote it in hurry to > make it work at the first point:but now I have to think with the design > perspective and more on long term perspective to make this framework > scalable and get easily accommodated in crash utility architecture. > > Regards, > Oza. > > > > > > > > > > > > On Thursday, 29 May 2014 7:09 PM, Dave Anderson <ander...@redhat.com> wrote: > > > > > > ----- Original Message ----- > > Hi Dave, > > > > please find all my comments/clarifications/answers inline below. > > > > > > Since these raw DDR dumps seem to be an existing feature, it certainly > > seems worth implementing support > for them. > > > > I'm curious as to how these RAM dumps are currently used -- are there other > > tools that use them somehow? > > > > Oza: there could be various tools which organisation might be writing to > > extract some logs, because they know the physical address > > where their private/public logs are stored. > > but none of the tools match the ability of crash utility as we all agree. > > > > Are these DDR RAM dumps specific to embedded 32-bit ARM machines? > > > > Oza: yes it depends, if it is taken on armv7 then 32bit, if > it is armv8, > > then 64 bit. > > Are you thinking of supporting this feature for ARM64 as well? > > Also, by any chance are you working with 32-bit ARM with PAE? Currently > there is no support in the crash utility for ARM/PAE, and I have been > hoping/waiting for ARM developers on this list to develop and post patches > supporting it. Although it's unclear whether the kdump facility would > even work as-is with PAE, if this feature were available, it would be an > an alternative to kdump. Anyway, if/when ARM/PAE support is put in place, > it would require the usage of 64-bit ELF > headers for the 32-bit ARM/PAE dumps. > But I'm getting ahead of myself... ;-) > > > > > > > Your feature sounds like a two-stage process: > > > > (1) invoke crash utility -- passing it the base physical address of the > > contiguous RAM dump, and the RAM dump file name(s) -- and then crash > > creates a single ELF vmcore by pre-pending an ELF header and > > concatenating > > the dump file names. > > (2) invoke crash utility with vmlinux and > newly-created vmcore. > > > > Oza: yes it is 2 stage process, in the first stage crash utility will > > prepare > > something which crash utility itself can understand. > > which is nothing but ELF format, which every debugger typically understands > > (such as gdb) > > so I do that conversion at the first place. > > once that conversion is in place, crash utility core code takes it over and > > do the rest of the job. > > > > But you mention "generate object files" above. Do you generate more than > > one > > file? > > > > Oza: what I meant by object file is ELF file (ELF is something which is > > ready to be loaded/linked) > > this object file is nothing but one temporary file which crash utility will > > create... > > so if you give > > > > crash ./vmlinux ./ramdump.bin kernel_base_address > > it woudl have created ramdump_ARM_ELF32 (temporary file) which crash > > utility will understand). > > after you exit crash, the temporary file would be deleted. > > > > Is the newly-created vmcore subsequently recognized as a netdump or kdump > > ELF vmcore? (i.e, handled by existing code in netdump.c) > > > > Oza: it would be recognized as kdump (because I am currently using 'flags' > > of > > kdump), this is just to be aligned with crash internal implementations. > > > > but nontheless it is a separate ELF file > > OK, so then after you've created the temporary ELF file, crash internally > would end up setting the pc->readmem() pointers to read_kdump()? Or do > you have your own readmem() function in the new ramdump.c file? > > > > > Or does it create a new ELF-like dumpfile type that is handled in your new > > ramdump.c file? > > Oza: it is > separate ELF file. > > > > Could it be done in one step? In other words, something like: > > > > $ crash vmlinux --ddr 80000000 ddr1.bin [ddr2.bin ...] > > > > > > Oza: this is precisely what is hapepning. > > > > > > where there would be a "virtual" ELF header created that could be used > > during the crash session? (perhaps with an optional "-o outputfile" > > command line option to create/save it as an ELF vmcore) > > > > Oza: virtual ELF > header, and one more virtual program header would be created > > in temporary file which, the budle, called ELF32. > > optional command line option could be created as well. but currently we > > take > > bin file only. > > Clarify one more thing please: is the temporary file simply a little > standalone ELF > header that describes what's in the ddr.bin file? Or do you concatenate the > ELF > header and the ddr.bin file into a single, temporary, ELF vmcore file that > is essentially a clone of an ELF kdump dumpfile? > > Also, I suggested the "-o outputfile" option -- after which you could simply > enter > "crash vmlinux outputfile" -- because your implementation requires that the > user must be aware of the base physical address value. > > Anyway, this all sounds good, so please post a patch. And can you also make > one of > these dumpfiles available to me to download? > > Thanks, > > Dave -- Crash-utility mailing list Crash-utility@redhat.com https://www.redhat.com/mailman/listinfo/crash-utility