summaryrefslogtreecommitdiffstats
path: root/Documentation/filesystems/pstore.rst
blob: 00a5a055378beca679aaebf8a0aad6e89b33dc0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
.. index:: pstore (filesystem)

pstore filesystem with RAM backend (RAMOOPS)
============================================

Barebox supports the pstore filesystem known from the kernel. The main backend
implementation is RAM. All other backends are currently not implemented by
Barebox.

pstore is a filesystem to store kernel log or kernel panic messages. These
messages are stored by the kernel in a specified RAM area which is never
overwritten by any user. This data can be accessed after a reboot through
/pstore in Barebox or the kernel. The pstore filesystem is automatically mounted
at boot:

.. code-block:: none

	none on / type ramfs
	none on /dev type devfs
	none on /pstore type pstore

pstore may add additional warnings during boot due to wrong ECCs (no data
written):

.. code-block:: none

  persistent_ram: found existing invalid buffer, size 791282217, start 1116786789
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 791282281, start 1133564005
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 791347753, start 1133564005
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 791347753, start 1133572197
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 774505001, start 1133564005
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 791282281, start 1133564005
  persistent_ram: uncorrectable error in header
  persistent_ram: found existing invalid buffer, size 791282217, start 1133564005
  pstore: Registered ramoops as persistent store backend
  ramoops: attached 0x200000@0x1fdf4000, ecc: 16/0

To use pstore/RAMOOPS both Barebox and Kernel have to be compiled with pstore
and RAM backend support. The kernel receives the parameters describing the
layout via devicetree or - as a fallback - over the kernel command line.
To ensure both worlds are using the same memory layout, the required
configuration data for the kernel is generated on-the-fly prior booting a kernel.
For the devicetree use case Barebox adapts the kernel's devicetree, for the
kernel command line fallback the variable ``global.linux.bootargs.ramoops`` is
created and its content used to build the kernel command line.

You can adapt the *pstore* parameters in Barebox menuconfig.

To see where the RAMOOPS area is located, you can execute the ``iomem`` command
in the Barebox shell. The RAMOOPS area is listed as 'persistent ram':

.. code-block:: none

  0x10000000 - 0x1fffffff (size 0x10000000) ram0
    0x247f59c0 - 0x2fbf59bf (size 0x0b400000) malloc space
    0x2fbf59c0 - 0x2fbffffe (size 0x0000a63f) board data
    0x2fc00000 - 0x2fc8619f (size 0x000861a0) barebox
    0x2fc861a0 - 0x2fca35ef (size 0x0001d450) barebox data
    0x2fca35f0 - 0x2fca9007 (size 0x00005a18) bss
    0x2fdd4000 - 0x2fdf3fff (size 0x00020000) ramoops:dump(0/4)
    0x2fdf4000 - 0x2fe13fff (size 0x00020000) ramoops:dump(1/4)
    0x2fe14000 - 0x2fe33fff (size 0x00020000) ramoops:dump(2/4)
    0x2fe34000 - 0x2fe53fff (size 0x00020000) ramoops:dump(3/4)
    0x2fe54000 - 0x2fe73fff (size 0x00020000) ramoops:dump(4/4)
    0x2fe74000 - 0x2fe93fff (size 0x00020000) ramoops:console
    0x2fe94000 - 0x2feb3fff (size 0x00020000) ramoops:ftrace
    0x2feb4000 - 0x2fed3fff (size 0x00020000) ramoops:pmsg
    0x2fee4000 - 0x2fee7fff (size 0x00004000) ttb
    0x2fee8000 - 0x2feeffff (size 0x00008000) stack

All pstore files that could be found are added to the /pstore directory. This is
a read-only filesystem. If you disable the Kconfig option FS_PSTORE_RAMOOPS_RO,
the RAMOOPS area is reset and its ECC recalculated. But that does not allow any
writes from Barebox into that area.

If the menu entry ``FS_PSTORE_CONSOLE`` is enabled, Barebox itself will add all
its own console output to the *ramoops:console* part, which enables the regular
userland later on to have access to the bootloaders output.