Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Documentation: add Ramoops usage description

Add a documentation file describing the usage of Ramoops

Signed-off-by: Sergiu Iordache <sergiu@chromium.org>
Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Sergiu Iordache and committed by
Linus Torvalds
4126dacb 6989b5bb

+78
+2
Documentation/00-INDEX
··· 272 272 - how to get printk format specifiers right 273 273 prio_tree.txt 274 274 - info on radix-priority-search-tree use for indexing vmas. 275 + ramoops.txt 276 + - documentation of the ramoops oops/panic logging module. 275 277 rbtree.txt 276 278 - info on what red-black trees are and what they are for. 277 279 robust-futex-ABI.txt
+76
Documentation/ramoops.txt
··· 1 + Ramoops oops/panic logger 2 + ========================= 3 + 4 + Sergiu Iordache <sergiu@chromium.org> 5 + 6 + Updated: 8 August 2011 7 + 8 + 0. Introduction 9 + 10 + Ramoops is an oops/panic logger that writes its logs to RAM before the system 11 + crashes. It works by logging oopses and panics in a circular buffer. Ramoops 12 + needs a system with persistent RAM so that the content of that area can 13 + survive after a restart. 14 + 15 + 1. Ramoops concepts 16 + 17 + Ramoops uses a predefined memory area to store the dump. The start and size of 18 + the memory area are set using two variables: 19 + * "mem_address" for the start 20 + * "mem_size" for the size. The memory size will be rounded down to a 21 + power of two. 22 + 23 + The memory area is divided into "record_size" chunks (also rounded down to 24 + power of two) and each oops/panic writes a "record_size" chunk of 25 + information. 26 + 27 + Dumping both oopses and panics can be done by setting 1 in the "dump_oops" 28 + variable while setting 0 in that variable dumps only the panics. 29 + 30 + The module uses a counter to record multiple dumps but the counter gets reset 31 + on restart (i.e. new dumps after the restart will overwrite old ones). 32 + 33 + 2. Setting the parameters 34 + 35 + Setting the ramoops parameters can be done in 2 different manners: 36 + 1. Use the module parameters (which have the names of the variables described 37 + as before). 38 + 2. Use a platform device and set the platform data. The parameters can then 39 + be set through that platform data. An example of doing that is: 40 + 41 + #include <linux/ramoops.h> 42 + [...] 43 + 44 + static struct ramoops_platform_data ramoops_data = { 45 + .mem_size = <...>, 46 + .mem_address = <...>, 47 + .record_size = <...>, 48 + .dump_oops = <...>, 49 + }; 50 + 51 + static struct platform_device ramoops_dev = { 52 + .name = "ramoops", 53 + .dev = { 54 + .platform_data = &ramoops_data, 55 + }, 56 + }; 57 + 58 + [... inside a function ...] 59 + int ret; 60 + 61 + ret = platform_device_register(&ramoops_dev); 62 + if (ret) { 63 + printk(KERN_ERR "unable to register platform device\n"); 64 + return ret; 65 + } 66 + 67 + 3. Dump format 68 + 69 + The data dump begins with a header, currently defined as "====" followed by a 70 + timestamp and a new line. The dump then continues with the actual data. 71 + 72 + 4. Reading the data 73 + 74 + The dump data can be read from memory (through /dev/mem or other means). 75 + Getting the module parameters, which are needed in order to parse the data, can 76 + be done through /sys/module/ramoops/parameters/* .