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