Antonino A. Daplas | efb985f | 2005-11-08 21:39:15 -0800 | [diff] [blame] | 1 | The Framebuffer Console |
| 2 | ======================= |
| 3 | |
| 4 | The framebuffer console (fbcon), as its name implies, is a text |
| 5 | console running on top of the framebuffer device. It has the functionality of |
| 6 | any standard text console driver, such as the VGA console, with the added |
| 7 | features that can be attributed to the graphical nature of the framebuffer. |
| 8 | |
| 9 | In the x86 architecture, the framebuffer console is optional, and |
| 10 | some even treat it as a toy. For other architectures, it is the only available |
| 11 | display device, text or graphical. |
| 12 | |
| 13 | What are the features of fbcon? The framebuffer console supports |
| 14 | high resolutions, varying font types, display rotation, primitive multihead, |
| 15 | etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature |
| 16 | made available by the underlying graphics card are also possible. |
| 17 | |
| 18 | A. Configuration |
| 19 | |
| 20 | The framebuffer console can be enabled by using your favorite kernel |
| 21 | configuration tool. It is under Device Drivers->Graphics Support->Support for |
| 22 | framebuffer devices->Framebuffer Console Support. Select 'y' to compile |
| 23 | support statically, or 'm' for module support. The module will be fbcon. |
| 24 | |
| 25 | In order for fbcon to activate, at least one framebuffer driver is |
| 26 | required, so choose from any of the numerous drivers available. For x86 |
| 27 | systems, they almost universally have VGA cards, so vga16fb and vesafb will |
| 28 | always be available. However, using a chipset-specific driver will give you |
| 29 | more speed and features, such as the ability to change the video mode |
| 30 | dynamically. |
| 31 | |
| 32 | To display the penguin logo, choose any logo available in Logo |
| 33 | Configuration->Boot up logo. |
| 34 | |
| 35 | Also, you will need to select at least one compiled-in fonts, but if |
| 36 | you don't do anything, the kernel configuration tool will select one for you, |
| 37 | usually an 8x16 font. |
| 38 | |
| 39 | GOTCHA: A common bug report is enabling the framebuffer without enabling the |
| 40 | framebuffer console. Depending on the driver, you may get a blanked or |
| 41 | garbled display, but the system still boots to completion. If you are |
| 42 | fortunate to have a driver that does not alter the graphics chip, then you |
| 43 | will still get a VGA console. |
| 44 | |
| 45 | B. Loading |
| 46 | |
| 47 | Possible scenarios: |
| 48 | |
| 49 | 1. Driver and fbcon are compiled statically |
| 50 | |
| 51 | Usually, fbcon will automatically take over your console. The notable |
| 52 | exception is vesafb. It needs to be explicitly activated with the |
| 53 | vga= boot option parameter. |
| 54 | |
| 55 | 2. Driver is compiled statically, fbcon is compiled as a module |
| 56 | |
| 57 | Depending on the driver, you either get a standard console, or a |
| 58 | garbled display, as mentioned above. To get a framebuffer console, |
| 59 | do a 'modprobe fbcon'. |
| 60 | |
| 61 | 3. Driver is compiled as a module, fbcon is compiled statically |
| 62 | |
| 63 | You get your standard console. Once the driver is loaded with |
| 64 | 'modprobe xxxfb', fbcon automatically takes over the console with |
| 65 | the possible exception of using the fbcon=map:n option. See below. |
| 66 | |
| 67 | 4. Driver and fbcon are compiled as a module. |
| 68 | |
| 69 | You can load them in any order. Once both are loaded, fbcon will take |
| 70 | over the console. |
| 71 | |
| 72 | C. Boot options |
| 73 | |
| 74 | The framebuffer console has several, largely unknown, boot options |
| 75 | that can change its behavior. |
| 76 | |
| 77 | 1. fbcon=font:<name> |
| 78 | |
| 79 | Select the initial font to use. The value 'name' can be any of the |
| 80 | compiled-in fonts: VGA8x16, 7x14, 10x18, VGA8x8, MINI4x6, RomanLarge, |
| 81 | SUN8x16, SUN12x22, ProFont6x11, Acorn8x8, PEARL8x8. |
| 82 | |
| 83 | Note, not all drivers can handle font with widths not divisible by 8, |
| 84 | such as vga16fb. |
| 85 | |
| 86 | 2. fbcon=scrollback:<value>[k] |
| 87 | |
| 88 | The scrollback buffer is memory that is used to preserve display |
| 89 | contents that has already scrolled past your view. This is accessed |
| 90 | by using the Shift-PageUp key combination. The value 'value' is any |
| 91 | integer. It defaults to 32KB. The 'k' suffix is optional, and will |
| 92 | multiply the 'value' by 1024. |
| 93 | |
| 94 | 3. fbcon=map:<0123> |
| 95 | |
| 96 | This is an interesting option. It tells which driver gets mapped to |
| 97 | which console. The value '0123' is a sequence that gets repeated until |
| 98 | the total length is 64 which is the number of consoles available. In |
| 99 | the above example, it is expanded to 012301230123... and the mapping |
| 100 | will be: |
| 101 | |
| 102 | tty | 1 2 3 4 5 6 7 8 9 ... |
| 103 | fb | 0 1 2 3 0 1 2 3 0 ... |
| 104 | |
| 105 | ('cat /proc/fb' should tell you what the fb numbers are) |
| 106 | |
| 107 | One side effect that may be useful is using a map value that exceeds |
| 108 | the number of loaded fb drivers. For example, if only one driver is |
| 109 | available, fb0, adding fbcon=map:1 tells fbcon not to take over the |
| 110 | console. |
| 111 | |
| 112 | Later on, when you want to map the console the to the framebuffer |
| 113 | device, you can use the con2fbmap utility. |
| 114 | |
| 115 | 4. fbcon=vc:<n1>-<n2> |
| 116 | |
| 117 | This option tells fbcon to take over only a range of consoles as |
| 118 | specified by the values 'n1' and 'n2'. The rest of the consoles |
| 119 | outside the given range will still be controlled by the standard |
| 120 | console driver. |
| 121 | |
| 122 | NOTE: For x86 machines, the standard console is the VGA console which |
| 123 | is typically located on the same video card. Thus, the consoles that |
| 124 | are controlled by the VGA console will be garbled. |
| 125 | |
| 126 | 4. fbcon=rotate:<n> |
| 127 | |
| 128 | This option changes the orientation angle of the console display. The |
| 129 | value 'n' accepts the following: |
| 130 | |
| 131 | 0 - normal orientation (0 degree) |
| 132 | 1 - clockwise orientation (90 degrees) |
| 133 | 2 - upside down orientation (180 degrees) |
| 134 | 3 - counterclockwise orientation (270 degrees) |
| 135 | |
| 136 | The angle can be changed anytime afterwards by 'echoing' the same |
| 137 | numbers to any one of the 2 attributes found in |
| 138 | /sys/class/graphics/fb{x} |
| 139 | |
| 140 | con_rotate - rotate the display of the active console |
| 141 | con_rotate_all - rotate the display of all consoles |
| 142 | |
| 143 | Console rotation will only become available if Console Rotation |
| 144 | Support is compiled in your kernel. |
| 145 | |
| 146 | NOTE: This is purely console rotation. Any other applications that |
| 147 | use the framebuffer will remain at their 'normal'orientation. |
| 148 | Actually, the underlying fb driver is totally ignorant of console |
| 149 | rotation. |
| 150 | |
| 151 | --- |
| 152 | Antonino Daplas <adaplas@pol.net> |