mirror of
https://github.com/joel16/android_kernel_sony_msm8994.git
synced 2024-11-27 14:11:04 +00:00
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>
This commit is contained in:
parent
6989b5bb2f
commit
4126dacb5b
@ -272,6 +272,8 @@ printk-formats.txt
|
|||||||
- how to get printk format specifiers right
|
- how to get printk format specifiers right
|
||||||
prio_tree.txt
|
prio_tree.txt
|
||||||
- info on radix-priority-search-tree use for indexing vmas.
|
- info on radix-priority-search-tree use for indexing vmas.
|
||||||
|
ramoops.txt
|
||||||
|
- documentation of the ramoops oops/panic logging module.
|
||||||
rbtree.txt
|
rbtree.txt
|
||||||
- info on what red-black trees are and what they are for.
|
- info on what red-black trees are and what they are for.
|
||||||
robust-futex-ABI.txt
|
robust-futex-ABI.txt
|
||||||
|
76
Documentation/ramoops.txt
Normal file
76
Documentation/ramoops.txt
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
Ramoops oops/panic logger
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Sergiu Iordache <sergiu@chromium.org>
|
||||||
|
|
||||||
|
Updated: 8 August 2011
|
||||||
|
|
||||||
|
0. Introduction
|
||||||
|
|
||||||
|
Ramoops is an oops/panic logger that writes its logs to RAM before the system
|
||||||
|
crashes. It works by logging oopses and panics in a circular buffer. Ramoops
|
||||||
|
needs a system with persistent RAM so that the content of that area can
|
||||||
|
survive after a restart.
|
||||||
|
|
||||||
|
1. Ramoops concepts
|
||||||
|
|
||||||
|
Ramoops uses a predefined memory area to store the dump. The start and size of
|
||||||
|
the memory area are set using two variables:
|
||||||
|
* "mem_address" for the start
|
||||||
|
* "mem_size" for the size. The memory size will be rounded down to a
|
||||||
|
power of two.
|
||||||
|
|
||||||
|
The memory area is divided into "record_size" chunks (also rounded down to
|
||||||
|
power of two) and each oops/panic writes a "record_size" chunk of
|
||||||
|
information.
|
||||||
|
|
||||||
|
Dumping both oopses and panics can be done by setting 1 in the "dump_oops"
|
||||||
|
variable while setting 0 in that variable dumps only the panics.
|
||||||
|
|
||||||
|
The module uses a counter to record multiple dumps but the counter gets reset
|
||||||
|
on restart (i.e. new dumps after the restart will overwrite old ones).
|
||||||
|
|
||||||
|
2. Setting the parameters
|
||||||
|
|
||||||
|
Setting the ramoops parameters can be done in 2 different manners:
|
||||||
|
1. Use the module parameters (which have the names of the variables described
|
||||||
|
as before).
|
||||||
|
2. Use a platform device and set the platform data. The parameters can then
|
||||||
|
be set through that platform data. An example of doing that is:
|
||||||
|
|
||||||
|
#include <linux/ramoops.h>
|
||||||
|
[...]
|
||||||
|
|
||||||
|
static struct ramoops_platform_data ramoops_data = {
|
||||||
|
.mem_size = <...>,
|
||||||
|
.mem_address = <...>,
|
||||||
|
.record_size = <...>,
|
||||||
|
.dump_oops = <...>,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device ramoops_dev = {
|
||||||
|
.name = "ramoops",
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &ramoops_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
[... inside a function ...]
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = platform_device_register(&ramoops_dev);
|
||||||
|
if (ret) {
|
||||||
|
printk(KERN_ERR "unable to register platform device\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
3. Dump format
|
||||||
|
|
||||||
|
The data dump begins with a header, currently defined as "====" followed by a
|
||||||
|
timestamp and a new line. The dump then continues with the actual data.
|
||||||
|
|
||||||
|
4. Reading the data
|
||||||
|
|
||||||
|
The dump data can be read from memory (through /dev/mem or other means).
|
||||||
|
Getting the module parameters, which are needed in order to parse the data, can
|
||||||
|
be done through /sys/module/ramoops/parameters/* .
|
Loading…
Reference in New Issue
Block a user