Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) The Framebuffer Console
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) The framebuffer console (fbcon), as its name implies, is a text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) console running on top of the framebuffer device. It has the functionality of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) any standard text console driver, such as the VGA console, with the added
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) features that can be attributed to the graphical nature of the framebuffer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) In the x86 architecture, the framebuffer console is optional, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) some even treat it as a toy. For other architectures, it is the only available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) display device, text or graphical.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) What are the features of fbcon?  The framebuffer console supports
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) high resolutions, varying font types, display rotation, primitive multihead,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) made available by the underlying graphics card are also possible.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) A. Configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) The framebuffer console can be enabled by using your favorite kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) configuration tool.  It is under Device Drivers->Graphics Support->
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) Console display driver support->Framebuffer Console Support.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) Select 'y' to compile support statically or 'm' for module support.  The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) module will be fbcon.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) In order for fbcon to activate, at least one framebuffer driver is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) required, so choose from any of the numerous drivers available. For x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) systems, they almost universally have VGA cards, so vga16fb and vesafb will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) always be available. However, using a chipset-specific driver will give you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) more speed and features, such as the ability to change the video mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) dynamically.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) To display the penguin logo, choose any logo available in Graphics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) support->Bootup logo.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) Also, you will need to select at least one compiled-in font, but if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) you don't do anything, the kernel configuration tool will select one for you,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) usually an 8x16 font.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) GOTCHA: A common bug report is enabling the framebuffer without enabling the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) framebuffer console.  Depending on the driver, you may get a blanked or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) garbled display, but the system still boots to completion.  If you are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) fortunate to have a driver that does not alter the graphics chip, then you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) will still get a VGA console.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) B. Loading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) ==========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) Possible scenarios:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 1. Driver and fbcon are compiled statically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	 Usually, fbcon will automatically take over your console. The notable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	 exception is vesafb.  It needs to be explicitly activated with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	 vga= boot option parameter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 2. Driver is compiled statically, fbcon is compiled as a module
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	 Depending on the driver, you either get a standard console, or a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	 garbled display, as mentioned above.  To get a framebuffer console,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	 do a 'modprobe fbcon'.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 3. Driver is compiled as a module, fbcon is compiled statically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	 You get your standard console.  Once the driver is loaded with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	 'modprobe xxxfb', fbcon automatically takes over the console with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	 the possible exception of using the fbcon=map:n option. See below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 4. Driver and fbcon are compiled as a module.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	 You can load them in any order. Once both are loaded, fbcon will take
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	 over the console.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) C. Boot options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	 The framebuffer console has several, largely unknown, boot options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	 that can change its behavior.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 1. fbcon=font:<name>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	Select the initial font to use. The value 'name' can be any of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	compiled-in fonts: 10x18, 6x10, 6x8, 7x14, Acorn8x8, MINI4x6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	PEARL8x8, ProFont6x11, SUN12x22, SUN8x16, TER16x32, VGA8x16, VGA8x8.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	Note, not all drivers can handle font with widths not divisible by 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	such as vga16fb.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 2. fbcon=map:<0123>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	This is an interesting option. It tells which driver gets mapped to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	which console. The value '0123' is a sequence that gets repeated until
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	the total length is 64 which is the number of consoles available. In
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	the above example, it is expanded to 012301230123... and the mapping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	will be::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		tty | 1 2 3 4 5 6 7 8 9 ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		fb  | 0 1 2 3 0 1 2 3 0 ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 		('cat /proc/fb' should tell you what the fb numbers are)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	One side effect that may be useful is using a map value that exceeds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	the number of loaded fb drivers. For example, if only one driver is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	available, fb0, adding fbcon=map:1 tells fbcon not to take over the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	console.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	Later on, when you want to map the console the to the framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	device, you can use the con2fbmap utility.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 3. fbcon=vc:<n1>-<n2>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	This option tells fbcon to take over only a range of consoles as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	specified by the values 'n1' and 'n2'. The rest of the consoles
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	outside the given range will still be controlled by the standard
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	console driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	NOTE: For x86 machines, the standard console is the VGA console which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	is typically located on the same video card.  Thus, the consoles that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	are controlled by the VGA console will be garbled.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 4. fbcon=rotate:<n>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	This option changes the orientation angle of the console display. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	value 'n' accepts the following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	    - 0 - normal orientation (0 degree)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	    - 1 - clockwise orientation (90 degrees)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	    - 2 - upside down orientation (180 degrees)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	    - 3 - counterclockwise orientation (270 degrees)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	The angle can be changed anytime afterwards by 'echoing' the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	numbers to any one of the 2 attributes found in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	/sys/class/graphics/fbcon:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 		- rotate     - rotate the display of the active console
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 		- rotate_all - rotate the display of all consoles
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	Console rotation will only become available if Framebuffer Console
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	Rotation support is compiled in your kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	NOTE: This is purely console rotation.  Any other applications that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	use the framebuffer will remain at their 'normal' orientation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	Actually, the underlying fb driver is totally ignorant of console
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	rotation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 5. fbcon=margin:<color>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	This option specifies the color of the margins. The margins are the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	leftover area at the right and the bottom of the screen that are not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	used by text. By default, this area will be black. The 'color' value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	is an integer number that depends on the framebuffer driver being used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 6. fbcon=nodefer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	If the kernel is compiled with deferred fbcon takeover support, normally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	the framebuffer contents, left in place by the firmware/bootloader, will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	be preserved until there actually is some text is output to the console.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	This option causes fbcon to bind immediately to the fbdev device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 7. fbcon=logo-pos:<location>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	The only possible 'location' is 'center' (without quotes), and when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	given, the bootup logo is moved from the default top-left corner
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	location to the center of the framebuffer. If more than one logo is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	displayed due to multiple CPUs, the collected line of logos is moved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	as a whole.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 8. fbcon=logo-count:<n>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	The value 'n' overrides the number of bootup logos. 0 disables the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	logo, and -1 gives the default which is the number of online CPUs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) C. Attaching, Detaching and Unloading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) Before going on to how to attach, detach and unload the framebuffer console, an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) illustration of the dependencies may help.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) The console layer, as with most subsystems, needs a driver that interfaces with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) the hardware. Thus, in a VGA console::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	console ---> VGA driver ---> hardware.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) Assuming the VGA driver can be unloaded, one must first unbind the VGA driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) from the console layer before unloading the driver.  The VGA driver cannot be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) unloaded if it is still bound to the console layer. (See
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) Documentation/driver-api/console.rst for more information).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) This is more complicated in the case of the framebuffer console (fbcon),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) because fbcon is an intermediate layer between the console and the drivers::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	console ---> fbcon ---> fbdev drivers ---> hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) The fbdev drivers cannot be unloaded if bound to fbcon, and fbcon cannot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) be unloaded if it's bound to the console layer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) So to unload the fbdev drivers, one must first unbind fbcon from the console,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) then unbind the fbdev drivers from fbcon.  Fortunately, unbinding fbcon from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) the console layer will automatically unbind framebuffer drivers from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) fbcon. Thus, there is no need to explicitly unbind the fbdev drivers from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) fbcon.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) So, how do we unbind fbcon from the console? Part of the answer is in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) Documentation/driver-api/console.rst. To summarize:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) Echo a value to the bind file that represents the framebuffer console
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) driver. So assuming vtcon1 represents fbcon, then::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)   echo 1 > sys/class/vtconsole/vtcon1/bind - attach framebuffer console to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 					     console layer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)   echo 0 > sys/class/vtconsole/vtcon1/bind - detach framebuffer console from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 					     console layer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) If fbcon is detached from the console layer, your boot console driver (which is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) usually VGA text mode) will take over.  A few drivers (rivafb and i810fb) will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) restore VGA text mode for you.  With the rest, before detaching fbcon, you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) must take a few additional steps to make sure that your VGA text mode is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) restored properly. The following is one of the several methods that you can do:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 1. Download or install vbetool.  This utility is included with most
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)    distributions nowadays, and is usually part of the suspend/resume tool.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 2. In your kernel configuration, ensure that CONFIG_FRAMEBUFFER_CONSOLE is set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)    to 'y' or 'm'. Enable one or more of your favorite framebuffer drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 3. Boot into text mode and as root run::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	vbetool vbestate save > <vga state file>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)    The above command saves the register contents of your graphics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)    hardware to <vga state file>.  You need to do this step only once as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)    the state file can be reused.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 4. If fbcon is compiled as a module, load fbcon by doing::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)        modprobe fbcon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 5. Now to detach fbcon::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)        vbetool vbestate restore < <vga state file> && \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)        echo 0 > /sys/class/vtconsole/vtcon1/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 6. That's it, you're back to VGA mode. And if you compiled fbcon as a module,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)    you can unload it by 'rmmod fbcon'.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 7. To reattach fbcon::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)        echo 1 > /sys/class/vtconsole/vtcon1/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 8. Once fbcon is unbound, all drivers registered to the system will also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) become unbound.  This means that fbcon and individual framebuffer drivers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) can be unloaded or reloaded at will. Reloading the drivers or fbcon will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) automatically bind the console, fbcon and the drivers together. Unloading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) all the drivers without unloading fbcon will make it impossible for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) console to bind fbcon.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) Notes for vesafb users:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) =======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) Unfortunately, if your bootline includes a vga=xxx parameter that sets the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) hardware in graphics mode, such as when loading vesafb, vgacon will not load.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) Instead, vgacon will replace the default boot console with dummycon, and you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) won't get any display after detaching fbcon. Your machine is still alive, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) you can reattach vesafb. However, to reattach vesafb, you need to do one of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) the following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) Variation 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)     a. Before detaching fbcon, do::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	vbetool vbemode save > <vesa state file> # do once for each vesafb mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 						 # the file can be reused
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)     b. Detach fbcon as in step 5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)     c. Attach fbcon::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	vbetool vbestate restore < <vesa state file> && \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	echo 1 > /sys/class/vtconsole/vtcon1/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) Variation 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)     a. Before detaching fbcon, do::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	echo <ID> > /sys/class/tty/console/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	vbetool vbemode get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)     b. Take note of the mode number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)     b. Detach fbcon as in step 5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)     c. Attach fbcon::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	vbetool vbemode set <mode number> && \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	echo 1 > /sys/class/vtconsole/vtcon1/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) Samples:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) Here are 2 sample bash scripts that you can use to bind or unbind the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) framebuffer console driver if you are on an X86 box::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)   #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)   # Unbind fbcon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)   # Change this to where your actual vgastate file is located
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)   # Or Use VGASTATE=$1 to indicate the state file at runtime
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)   VGASTATE=/tmp/vgastate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)   # path to vbetool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)   VBETOOL=/usr/local/bin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)   for (( i = 0; i < 16; i++))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)   do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)     if test -x /sys/class/vtconsole/vtcon$i; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	     = 1 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	    if test -x $VBETOOL/vbetool; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	       echo Unbinding vtcon$i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	       $VBETOOL/vbetool vbestate restore < $VGASTATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	       echo 0 > /sys/class/vtconsole/vtcon$i/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	    fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) ---------------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)   #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)   # Bind fbcon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)   for (( i = 0; i < 16; i++))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)   do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)     if test -x /sys/class/vtconsole/vtcon$i; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	     = 1 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	  echo Unbinding vtcon$i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	  echo 1 > /sys/class/vtconsole/vtcon$i/bind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) Antonino Daplas <adaplas@pol.net>