Blame view

Documentation/fb/fbcon.rst 12.2 KB
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
1
  =======================
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
2
3
  The Framebuffer Console
  =======================
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
4
  The framebuffer console (fbcon), as its name implies, is a text
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
5
6
7
  console running on top of the framebuffer device. It has the functionality of
  any standard text console driver, such as the VGA console, with the added
  features that can be attributed to the graphical nature of the framebuffer.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
8
  In the x86 architecture, the framebuffer console is optional, and
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
9
10
  some even treat it as a toy. For other architectures, it is the only available
  display device, text or graphical.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
11
  What are the features of fbcon?  The framebuffer console supports
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
12
13
14
15
16
  high resolutions, varying font types, display rotation, primitive multihead,
  etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature
  made available by the underlying graphics card are also possible.
  
  A. Configuration
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
17
  ================
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
18

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
19
  The framebuffer console can be enabled by using your favorite kernel
f39684524   Randy Dunlap   Documentation/fb:...
20
21
22
23
  configuration tool.  It is under Device Drivers->Graphics Support->Frame
  buffer Devices->Console display driver support->Framebuffer Console Support.
  Select 'y' to compile support statically or 'm' for module support.  The
  module will be fbcon.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
24

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
25
  In order for fbcon to activate, at least one framebuffer driver is
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
26
27
28
29
30
  required, so choose from any of the numerous drivers available. For x86
  systems, they almost universally have VGA cards, so vga16fb and vesafb will
  always be available. However, using a chipset-specific driver will give you
  more speed and features, such as the ability to change the video mode
  dynamically.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
31
  To display the penguin logo, choose any logo available in Graphics
f39684524   Randy Dunlap   Documentation/fb:...
32
  support->Bootup logo.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
33

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
34
  Also, you will need to select at least one compiled-in font, but if
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
35
36
37
38
39
40
41
42
43
44
  you don't do anything, the kernel configuration tool will select one for you,
  usually an 8x16 font.
  
  GOTCHA: A common bug report is enabling the framebuffer without enabling the
  framebuffer console.  Depending on the driver, you may get a blanked or
  garbled display, but the system still boots to completion.  If you are
  fortunate to have a driver that does not alter the graphics chip, then you
  will still get a VGA console.
  
  B. Loading
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
45
  ==========
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
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
  
  Possible scenarios:
  
  1. Driver and fbcon are compiled statically
  
  	 Usually, fbcon will automatically take over your console. The notable
  	 exception is vesafb.  It needs to be explicitly activated with the
  	 vga= boot option parameter.
  
  2. Driver is compiled statically, fbcon is compiled as a module
  
  	 Depending on the driver, you either get a standard console, or a
  	 garbled display, as mentioned above.  To get a framebuffer console,
  	 do a 'modprobe fbcon'.
  
  3. Driver is compiled as a module, fbcon is compiled statically
  
  	 You get your standard console.  Once the driver is loaded with
  	 'modprobe xxxfb', fbcon automatically takes over the console with
  	 the possible exception of using the fbcon=map:n option. See below.
  
  4. Driver and fbcon are compiled as a module.
  
  	 You can load them in any order. Once both are loaded, fbcon will take
  	 over the console.
  
  C. Boot options
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
73
74
  	 The framebuffer console has several, largely unknown, boot options
  	 that can change its behavior.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
75
76
  
  1. fbcon=font:<name>
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
77
78
  	Select the initial font to use. The value 'name' can be any of the
  	compiled-in fonts: 10x18, 6x10, 7x14, Acorn8x8, MINI4x6,
0ad6be30b   Takashi Iwai   docs: fb: Add TER...
79
  	PEARL8x8, ProFont6x11, SUN12x22, SUN8x16, TER16x32, VGA8x16, VGA8x8.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
80
81
  
  	Note, not all drivers can handle font with widths not divisible by 8,
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
82
  	such as vga16fb.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
83
84
  
  2. fbcon=scrollback:<value>[k]
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
85
86
87
88
89
  	The scrollback buffer is memory that is used to preserve display
  	contents that has already scrolled past your view.  This is accessed
  	by using the Shift-PageUp key combination.  The value 'value' is any
  	integer. It defaults to 32KB.  The 'k' suffix is optional, and will
  	multiply the 'value' by 1024.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
90
91
  
  3. fbcon=map:<0123>
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
92
93
94
95
96
  	This is an interesting option. It tells which driver gets mapped to
  	which console. The value '0123' is a sequence that gets repeated until
  	the total length is 64 which is the number of consoles available. In
  	the above example, it is expanded to 012301230123... and the mapping
  	will be::
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  
  		tty | 1 2 3 4 5 6 7 8 9 ...
  		fb  | 0 1 2 3 0 1 2 3 0 ...
  
  		('cat /proc/fb' should tell you what the fb numbers are)
  
  	One side effect that may be useful is using a map value that exceeds
  	the number of loaded fb drivers. For example, if only one driver is
  	available, fb0, adding fbcon=map:1 tells fbcon not to take over the
  	console.
  
  	Later on, when you want to map the console the to the framebuffer
  	device, you can use the con2fbmap utility.
  
  4. fbcon=vc:<n1>-<n2>
  
  	This option tells fbcon to take over only a range of consoles as
  	specified by the values 'n1' and 'n2'. The rest of the consoles
  	outside the given range will still be controlled by the standard
  	console driver.
  
  	NOTE: For x86 machines, the standard console is the VGA console which
  	is typically located on the same video card.  Thus, the consoles that
  	are controlled by the VGA console will be garbled.
c87c4d442   Peter Rosin   fbdev: fix number...
121
  5. fbcon=rotate:<n>
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
122

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
123
124
  	This option changes the orientation angle of the console display. The
  	value 'n' accepts the following:
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
125

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
126
127
128
129
  	    - 0 - normal orientation (0 degree)
  	    - 1 - clockwise orientation (90 degrees)
  	    - 2 - upside down orientation (180 degrees)
  	    - 3 - counterclockwise orientation (270 degrees)
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
130
131
132
  
  	The angle can be changed anytime afterwards by 'echoing' the same
  	numbers to any one of the 2 attributes found in
f39684524   Randy Dunlap   Documentation/fb:...
133
  	/sys/class/graphics/fbcon:
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
134

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
135
136
  		- rotate     - rotate the display of the active console
  		- rotate_all - rotate the display of all consoles
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
137

f39684524   Randy Dunlap   Documentation/fb:...
138
139
  	Console rotation will only become available if Framebuffer Console
  	Rotation support is compiled in your kernel.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
140
141
  
  	NOTE: This is purely console rotation.  Any other applications that
f39684524   Randy Dunlap   Documentation/fb:...
142
  	use the framebuffer will remain at their 'normal' orientation.
efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
143
144
  	Actually, the underlying fb driver is totally ignorant of console
  	rotation.
c87c4d442   Peter Rosin   fbdev: fix number...
145
  6. fbcon=margin:<color>
74c1c8b33   David Lechner   fbcon: add fbcon=...
146
147
148
149
  
  	This option specifies the color of the margins. The margins are the
  	leftover area at the right and the bottom of the screen that are not
  	used by text. By default, this area will be black. The 'color' value
176780c7d   David Lechner   fbcon: remove res...
150
  	is an integer number that depends on the framebuffer driver being used.
74c1c8b33   David Lechner   fbcon: add fbcon=...
151

c87c4d442   Peter Rosin   fbdev: fix number...
152
  7. fbcon=nodefer
83d83bebf   Hans de Goede   console/fbcon: Ad...
153
154
155
156
157
  
  	If the kernel is compiled with deferred fbcon takeover support, normally
  	the framebuffer contents, left in place by the firmware/bootloader, will
  	be preserved until there actually is some text is output to the console.
  	This option causes fbcon to bind immediately to the fbdev device.
c87c4d442   Peter Rosin   fbdev: fix number...
158
  8. fbcon=logo-pos:<location>
890d14d2d   Peter Rosin   fbdev: fbmem: con...
159
160
161
162
163
164
  
  	The only possible 'location' is 'center' (without quotes), and when
  	given, the bootup logo is moved from the default top-left corner
  	location to the center of the framebuffer. If more than one logo is
  	displayed due to multiple CPUs, the collected line of logos is moved
  	as a whole.
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
165
  C. Attaching, Detaching and Unloading
f39684524   Randy Dunlap   Documentation/fb:...
166
  Before going on to how to attach, detach and unload the framebuffer console, an
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
167
  illustration of the dependencies may help.
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
168

418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
169
  The console layer, as with most subsystems, needs a driver that interfaces with
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
170
  the hardware. Thus, in a VGA console::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
171

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
172
  	console ---> VGA driver ---> hardware.
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
173
174
175
176
  
  Assuming the VGA driver can be unloaded, one must first unbind the VGA driver
  from the console layer before unloading the driver.  The VGA driver cannot be
  unloaded if it is still bound to the console layer. (See
baa293e95   Mauro Carvalho Chehab   docs: driver-api:...
177
  Documentation/driver-api/console.rst for more information).
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
178

670e9f34e   Paolo Ornati   Documentation: re...
179
  This is more complicated in the case of the framebuffer console (fbcon),
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
180
  because fbcon is an intermediate layer between the console and the drivers::
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
181

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
182
  	console ---> fbcon ---> fbdev drivers ---> hardware
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
183

f39684524   Randy Dunlap   Documentation/fb:...
184
  The fbdev drivers cannot be unloaded if bound to fbcon, and fbcon cannot
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
185
186
187
188
189
190
191
192
193
  be unloaded if it's bound to the console layer.
  
  So to unload the fbdev drivers, one must first unbind fbcon from the console,
  then unbind the fbdev drivers from fbcon.  Fortunately, unbinding fbcon from
  the console layer will automatically unbind framebuffer drivers from
  fbcon. Thus, there is no need to explicitly unbind the fbdev drivers from
  fbcon.
  
  So, how do we unbind fbcon from the console? Part of the answer is in
baa293e95   Mauro Carvalho Chehab   docs: driver-api:...
194
  Documentation/driver-api/console.rst. To summarize:
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
195

6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
196
  Echo a value to the bind file that represents the framebuffer console
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
197
  driver. So assuming vtcon1 represents fbcon, then::
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
198

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
199
200
201
202
    echo 1 > sys/class/vtconsole/vtcon1/bind - attach framebuffer console to
  					     console layer
    echo 0 > sys/class/vtconsole/vtcon1/bind - detach framebuffer console from
  					     console layer
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
203
204
  
  If fbcon is detached from the console layer, your boot console driver (which is
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
205
206
207
208
209
210
211
212
213
214
  usually VGA text mode) will take over.  A few drivers (rivafb and i810fb) will
  restore VGA text mode for you.  With the rest, before detaching fbcon, you
  must take a few additional steps to make sure that your VGA text mode is
  restored properly. The following is one of the several methods that you can do:
  
  1. Download or install vbetool.  This utility is included with most
     distributions nowadays, and is usually part of the suspend/resume tool.
  
  2. In your kernel configuration, ensure that CONFIG_FRAMEBUFFER_CONSOLE is set
     to 'y' or 'm'. Enable one or more of your favorite framebuffer drivers.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
215
  3. Boot into text mode and as root run::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
216
217
  
  	vbetool vbestate save > <vga state file>
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
218
219
220
     The above command saves the register contents of your graphics
     hardware to <vga state file>.  You need to do this step only once as
     the state file can be reused.
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
221

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
222
  4. If fbcon is compiled as a module, load fbcon by doing::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
223
224
  
         modprobe fbcon
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
225
  5. Now to detach fbcon::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
226

418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
227
         vbetool vbestate restore < <vga state file> && \
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
228
         echo 0 > /sys/class/vtconsole/vtcon1/bind
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
229

418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
230
  6. That's it, you're back to VGA mode. And if you compiled fbcon as a module,
f39684524   Randy Dunlap   Documentation/fb:...
231
     you can unload it by 'rmmod fbcon'.
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
232

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
233
  7. To reattach fbcon::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
234

6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
235
         echo 1 > /sys/class/vtconsole/vtcon1/bind
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
236

418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
237
238
239
240
241
242
  8. Once fbcon is unbound, all drivers registered to the system will also
  become unbound.  This means that fbcon and individual framebuffer drivers
  can be unloaded or reloaded at will. Reloading the drivers or fbcon will
  automatically bind the console, fbcon and the drivers together. Unloading
  all the drivers without unloading fbcon will make it impossible for the
  console to bind fbcon.
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
243
244
245
246
247
248
249
250
251
252
253
254
  
  Notes for vesafb users:
  =======================
  
  Unfortunately, if your bootline includes a vga=xxx parameter that sets the
  hardware in graphics mode, such as when loading vesafb, vgacon will not load.
  Instead, vgacon will replace the default boot console with dummycon, and you
  won't get any display after detaching fbcon. Your machine is still alive, so
  you can reattach vesafb. However, to reattach vesafb, you need to do one of
  the following:
  
  Variation 1:
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
255
      a. Before detaching fbcon, do::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
256

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
257
258
  	vbetool vbemode save > <vesa state file> # do once for each vesafb mode,
  						 # the file can be reused
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
259
260
  
      b. Detach fbcon as in step 5.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
261
      c. Attach fbcon::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
262

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
263
  	vbetool vbestate restore < <vesa state file> && \
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
264
  	echo 1 > /sys/class/vtconsole/vtcon1/bind
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
265
  Variation 2:
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
266
      a. Before detaching fbcon, do::
418d1ce61   Antonino A. Daplas   [PATCH] VT bindin...
267

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
268
  	echo <ID> > /sys/class/tty/console/bind
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
269

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
270
  	vbetool vbemode get
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
271
272
273
274
  
      b. Take note of the mode number
  
      b. Detach fbcon as in step 5.
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
275
      c. Attach fbcon::
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
276

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
277
278
  	vbetool vbemode set <mode number> && \
  	echo 1 > /sys/class/vtconsole/vtcon1/bind
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
279
280
281
282
283
  
  Samples:
  ========
  
  Here are 2 sample bash scripts that you can use to bind or unbind the
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
284
  framebuffer console driver if you are on an X86 box::
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
285

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
286
287
    #!/bin/bash
    # Unbind fbcon
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
288

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
289
290
291
    # Change this to where your actual vgastate file is located
    # Or Use VGASTATE=$1 to indicate the state file at runtime
    VGASTATE=/tmp/vgastate
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
292

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
293
294
    # path to vbetool
    VBETOOL=/usr/local/bin
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
295

ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
296
297
298
299
300
    for (( i = 0; i < 16; i++))
    do
      if test -x /sys/class/vtconsole/vtcon$i; then
  	if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
  	     = 1 ]; then
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
301
302
303
304
305
  	    if test -x $VBETOOL/vbetool; then
  	       echo Unbinding vtcon$i
  	       $VBETOOL/vbetool vbestate restore < $VGASTATE
  	       echo 0 > /sys/class/vtconsole/vtcon$i/bind
  	    fi
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
306
307
308
  	fi
      fi
    done
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
309
310
  
  ---------------------------------------------------------------------------
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
311
312
313
314
315
316
317
318
319
320
321
  
  ::
  
    #!/bin/bash
    # Bind fbcon
  
    for (( i = 0; i < 16; i++))
    do
      if test -x /sys/class/vtconsole/vtcon$i; then
  	if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
  	     = 1 ]; then
6690075d0   Antonino A. Daplas   [PATCH] VT bindin...
322
323
  	  echo Unbinding vtcon$i
  	  echo 1 > /sys/class/vtconsole/vtcon$i/bind
ab42b8189   Mauro Carvalho Chehab   docs: fb: convert...
324
325
326
  	fi
      fi
    done
a4a73e1f0   Antonino A. Daplas   [PATCH] Detaching...
327

efb985f6b   Antonino A. Daplas   [PATCH] fbcon: Co...
328
  Antonino Daplas <adaplas@pol.net>