.. | .. |
---|
6 | 6 | to the kernel's printk buffer. |
---|
7 | 7 | |
---|
8 | 8 | Injecting messages: |
---|
| 9 | + |
---|
9 | 10 | Every write() to the opened device node places a log entry in |
---|
10 | 11 | the kernel's printk buffer. |
---|
11 | 12 | |
---|
12 | 13 | The logged line can be prefixed with a <N> syslog prefix, which |
---|
13 | 14 | carries the syslog priority and facility. The single decimal |
---|
14 | 15 | prefix number is composed of the 3 lowest bits being the syslog |
---|
15 | | - priority and the higher bits the syslog facility number. |
---|
| 16 | + priority and the next 8 bits the syslog facility number. |
---|
16 | 17 | |
---|
17 | 18 | If no prefix is given, the priority number is the default kernel |
---|
18 | 19 | log priority and the facility number is set to LOG_USER (1). It |
---|
.. | .. |
---|
21 | 22 | the messages can always be reliably determined. |
---|
22 | 23 | |
---|
23 | 24 | Accessing the buffer: |
---|
| 25 | + |
---|
24 | 26 | Every read() from the opened device node receives one record |
---|
25 | 27 | of the kernel's printk buffer. |
---|
26 | 28 | |
---|
.. | .. |
---|
48 | 50 | if needed, without limiting the interface to a single reader. |
---|
49 | 51 | |
---|
50 | 52 | The device supports seek with the following parameters: |
---|
| 53 | + |
---|
51 | 54 | SEEK_SET, 0 |
---|
52 | 55 | seek to the first entry in the buffer |
---|
53 | 56 | SEEK_END, 0 |
---|
.. | .. |
---|
55 | 58 | SEEK_DATA, 0 |
---|
56 | 59 | seek after the last record available at the time |
---|
57 | 60 | the last SYSLOG_ACTION_CLEAR was issued. |
---|
| 61 | + |
---|
| 62 | + Other seek operations or offsets are not supported because of |
---|
| 63 | + the special behavior this device has. The device allows to read |
---|
| 64 | + or write only whole variable length messages (records) that are |
---|
| 65 | + stored in a ring buffer. |
---|
| 66 | + |
---|
| 67 | + Because of the non-standard behavior also the error values are |
---|
| 68 | + non-standard. -ESPIPE is returned for non-zero offset. -EINVAL |
---|
| 69 | + is returned for other operations, e.g. SEEK_CUR. This behavior |
---|
| 70 | + and values are historical and could not be modified without the |
---|
| 71 | + risk of breaking userspace. |
---|
58 | 72 | |
---|
59 | 73 | The output format consists of a prefix carrying the syslog |
---|
60 | 74 | prefix including priority and facility, the 64 bit message |
---|
.. | .. |
---|
76 | 90 | readable context of the message, for reliable processing in |
---|
77 | 91 | userspace. |
---|
78 | 92 | |
---|
79 | | - Example: |
---|
80 | | - 7,160,424069,-;pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) |
---|
81 | | - SUBSYSTEM=acpi |
---|
82 | | - DEVICE=+acpi:PNP0A03:00 |
---|
83 | | - 6,339,5140900,-;NET: Registered protocol family 10 |
---|
84 | | - 30,340,5690716,-;udevd[80]: starting version 181 |
---|
| 93 | + Example:: |
---|
| 94 | + |
---|
| 95 | + 7,160,424069,-;pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) |
---|
| 96 | + SUBSYSTEM=acpi |
---|
| 97 | + DEVICE=+acpi:PNP0A03:00 |
---|
| 98 | + 6,339,5140900,-;NET: Registered protocol family 10 |
---|
| 99 | + 30,340,5690716,-;udevd[80]: starting version 181 |
---|
85 | 100 | |
---|
86 | 101 | The DEVICE= key uniquely identifies devices the following way: |
---|
87 | | - b12:8 - block dev_t |
---|
88 | | - c127:3 - char dev_t |
---|
89 | | - n8 - netdev ifindex |
---|
90 | | - +sound:card0 - subsystem:devname |
---|
| 102 | + |
---|
| 103 | + ============ ================= |
---|
| 104 | + b12:8 block dev_t |
---|
| 105 | + c127:3 char dev_t |
---|
| 106 | + n8 netdev ifindex |
---|
| 107 | + +sound:card0 subsystem:devname |
---|
| 108 | + ============ ================= |
---|
91 | 109 | |
---|
92 | 110 | The flags field carries '-' by default. A 'c' indicates a |
---|
93 | | - fragment of a line. All following fragments are flagged with |
---|
94 | | - '+'. Note, that these hints about continuation lines are not |
---|
95 | | - necessarily correct, and the stream could be interleaved with |
---|
96 | | - unrelated messages, but merging the lines in the output |
---|
97 | | - usually produces better human readable results. A similar |
---|
98 | | - logic is used internally when messages are printed to the |
---|
99 | | - console, /proc/kmsg or the syslog() syscall. |
---|
| 111 | + fragment of a line. Note, that these hints about continuation |
---|
| 112 | + lines are not necessarily correct, and the stream could be |
---|
| 113 | + interleaved with unrelated messages, but merging the lines in |
---|
| 114 | + the output usually produces better human readable results. A |
---|
| 115 | + similar logic is used internally when messages are printed to |
---|
| 116 | + the console, /proc/kmsg or the syslog() syscall. |
---|
100 | 117 | |
---|
101 | 118 | By default, kernel tries to avoid fragments by concatenating |
---|
102 | 119 | when it can and fragments are rare; however, when extended |
---|