diff options
author | Sergiu Iordache <sergiu@chromium.org> | 2011-08-13 15:34:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-13 21:34:03 -0400 |
commit | 4126dacb5b2ca85b187a27b93805254567526dc8 (patch) | |
tree | 74e37710c4e44b4348569032bc8968a93b715eb3 /Documentation/ramoops.txt | |
parent | 6989b5bb2f0302d824bfc5a9272e17eef22353cc (diff) |
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>
Diffstat (limited to 'Documentation/ramoops.txt')
-rw-r--r-- | Documentation/ramoops.txt | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Documentation/ramoops.txt b/Documentation/ramoops.txt new file mode 100644 index 000000000000..8fb1ba7fe7bf --- /dev/null +++ b/Documentation/ramoops.txt | |||
@@ -0,0 +1,76 @@ | |||
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/* . | ||