diff options
Diffstat (limited to 'Documentation/fb/fbcon.txt')
-rw-r--r-- | Documentation/fb/fbcon.txt | 180 |
1 files changed, 176 insertions, 4 deletions
diff --git a/Documentation/fb/fbcon.txt b/Documentation/fb/fbcon.txt index 08dce0f631bf..f373df12ed4c 100644 --- a/Documentation/fb/fbcon.txt +++ b/Documentation/fb/fbcon.txt | |||
@@ -135,10 +135,10 @@ C. Boot options | |||
135 | 135 | ||
136 | The angle can be changed anytime afterwards by 'echoing' the same | 136 | The angle can be changed anytime afterwards by 'echoing' the same |
137 | numbers to any one of the 2 attributes found in | 137 | numbers to any one of the 2 attributes found in |
138 | /sys/class/graphics/fb{x} | 138 | /sys/class/graphics/fbcon |
139 | 139 | ||
140 | con_rotate - rotate the display of the active console | 140 | rotate - rotate the display of the active console |
141 | con_rotate_all - rotate the display of all consoles | 141 | rotate_all - rotate the display of all consoles |
142 | 142 | ||
143 | Console rotation will only become available if Console Rotation | 143 | Console rotation will only become available if Console Rotation |
144 | Support is compiled in your kernel. | 144 | Support is compiled in your kernel. |
@@ -148,5 +148,177 @@ C. Boot options | |||
148 | Actually, the underlying fb driver is totally ignorant of console | 148 | Actually, the underlying fb driver is totally ignorant of console |
149 | rotation. | 149 | rotation. |
150 | 150 | ||
151 | --- | 151 | C. Attaching, Detaching and Unloading |
152 | |||
153 | Before going on on how to attach, detach and unload the framebuffer console, an | ||
154 | illustration of the dependencies may help. | ||
155 | |||
156 | The console layer, as with most subsystems, needs a driver that interfaces with | ||
157 | the hardware. Thus, in a VGA console: | ||
158 | |||
159 | console ---> VGA driver ---> hardware. | ||
160 | |||
161 | Assuming the VGA driver can be unloaded, one must first unbind the VGA driver | ||
162 | from the console layer before unloading the driver. The VGA driver cannot be | ||
163 | unloaded if it is still bound to the console layer. (See | ||
164 | Documentation/console/console.txt for more information). | ||
165 | |||
166 | This is more complicated in the case of the the framebuffer console (fbcon), | ||
167 | because fbcon is an intermediate layer between the console and the drivers: | ||
168 | |||
169 | console ---> fbcon ---> fbdev drivers ---> hardware | ||
170 | |||
171 | The fbdev drivers cannot be unloaded if it's bound to fbcon, and fbcon cannot | ||
172 | be unloaded if it's bound to the console layer. | ||
173 | |||
174 | So to unload the fbdev drivers, one must first unbind fbcon from the console, | ||
175 | then unbind the fbdev drivers from fbcon. Fortunately, unbinding fbcon from | ||
176 | the console layer will automatically unbind framebuffer drivers from | ||
177 | fbcon. Thus, there is no need to explicitly unbind the fbdev drivers from | ||
178 | fbcon. | ||
179 | |||
180 | So, how do we unbind fbcon from the console? Part of the answer is in | ||
181 | Documentation/console/console.txt. To summarize: | ||
182 | |||
183 | Echo a value to the bind file that represents the framebuffer console | ||
184 | driver. So assuming vtcon1 represents fbcon, then: | ||
185 | |||
186 | echo 1 > sys/class/vtconsole/vtcon1/bind - attach framebuffer console to | ||
187 | console layer | ||
188 | echo 0 > sys/class/vtconsole/vtcon1/bind - detach framebuffer console from | ||
189 | console layer | ||
190 | |||
191 | If fbcon is detached from the console layer, your boot console driver (which is | ||
192 | usually VGA text mode) will take over. A few drivers (rivafb and i810fb) will | ||
193 | restore VGA text mode for you. With the rest, before detaching fbcon, you | ||
194 | must take a few additional steps to make sure that your VGA text mode is | ||
195 | restored properly. The following is one of the several methods that you can do: | ||
196 | |||
197 | 1. Download or install vbetool. This utility is included with most | ||
198 | distributions nowadays, and is usually part of the suspend/resume tool. | ||
199 | |||
200 | 2. In your kernel configuration, ensure that CONFIG_FRAMEBUFFER_CONSOLE is set | ||
201 | to 'y' or 'm'. Enable one or more of your favorite framebuffer drivers. | ||
202 | |||
203 | 3. Boot into text mode and as root run: | ||
204 | |||
205 | vbetool vbestate save > <vga state file> | ||
206 | |||
207 | The above command saves the register contents of your graphics | ||
208 | hardware to <vga state file>. You need to do this step only once as | ||
209 | the state file can be reused. | ||
210 | |||
211 | 4. If fbcon is compiled as a module, load fbcon by doing: | ||
212 | |||
213 | modprobe fbcon | ||
214 | |||
215 | 5. Now to detach fbcon: | ||
216 | |||
217 | vbetool vbestate restore < <vga state file> && \ | ||
218 | echo 0 > /sys/class/vtconsole/vtcon1/bind | ||
219 | |||
220 | 6. That's it, you're back to VGA mode. And if you compiled fbcon as a module, | ||
221 | you can unload it by 'rmmod fbcon' | ||
222 | |||
223 | 7. To reattach fbcon: | ||
224 | |||
225 | echo 1 > /sys/class/vtconsole/vtcon1/bind | ||
226 | |||
227 | 8. Once fbcon is unbound, all drivers registered to the system will also | ||
228 | become unbound. This means that fbcon and individual framebuffer drivers | ||
229 | can be unloaded or reloaded at will. Reloading the drivers or fbcon will | ||
230 | automatically bind the console, fbcon and the drivers together. Unloading | ||
231 | all the drivers without unloading fbcon will make it impossible for the | ||
232 | console to bind fbcon. | ||
233 | |||
234 | Notes for vesafb users: | ||
235 | ======================= | ||
236 | |||
237 | Unfortunately, if your bootline includes a vga=xxx parameter that sets the | ||
238 | hardware in graphics mode, such as when loading vesafb, vgacon will not load. | ||
239 | Instead, vgacon will replace the default boot console with dummycon, and you | ||
240 | won't get any display after detaching fbcon. Your machine is still alive, so | ||
241 | you can reattach vesafb. However, to reattach vesafb, you need to do one of | ||
242 | the following: | ||
243 | |||
244 | Variation 1: | ||
245 | |||
246 | a. Before detaching fbcon, do | ||
247 | |||
248 | vbetool vbemode save > <vesa state file> # do once for each vesafb mode, | ||
249 | # the file can be reused | ||
250 | |||
251 | b. Detach fbcon as in step 5. | ||
252 | |||
253 | c. Attach fbcon | ||
254 | |||
255 | vbetool vbestate restore < <vesa state file> && \ | ||
256 | echo 1 > /sys/class/vtconsole/vtcon1/bind | ||
257 | |||
258 | Variation 2: | ||
259 | |||
260 | a. Before detaching fbcon, do: | ||
261 | echo <ID> > /sys/class/tty/console/bind | ||
262 | |||
263 | |||
264 | vbetool vbemode get | ||
265 | |||
266 | b. Take note of the mode number | ||
267 | |||
268 | b. Detach fbcon as in step 5. | ||
269 | |||
270 | c. Attach fbcon: | ||
271 | |||
272 | vbetool vbemode set <mode number> && \ | ||
273 | echo 1 > /sys/class/vtconsole/vtcon1/bind | ||
274 | |||
275 | Samples: | ||
276 | ======== | ||
277 | |||
278 | Here are 2 sample bash scripts that you can use to bind or unbind the | ||
279 | framebuffer console driver if you are in an X86 box: | ||
280 | |||
281 | --------------------------------------------------------------------------- | ||
282 | #!/bin/bash | ||
283 | # Unbind fbcon | ||
284 | |||
285 | # Change this to where your actual vgastate file is located | ||
286 | # Or Use VGASTATE=$1 to indicate the state file at runtime | ||
287 | VGASTATE=/tmp/vgastate | ||
288 | |||
289 | # path to vbetool | ||
290 | VBETOOL=/usr/local/bin | ||
291 | |||
292 | |||
293 | for (( i = 0; i < 16; i++)) | ||
294 | do | ||
295 | if test -x /sys/class/vtconsole/vtcon$i; then | ||
296 | if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \ | ||
297 | = 1 ]; then | ||
298 | if test -x $VBETOOL/vbetool; then | ||
299 | echo Unbinding vtcon$i | ||
300 | $VBETOOL/vbetool vbestate restore < $VGASTATE | ||
301 | echo 0 > /sys/class/vtconsole/vtcon$i/bind | ||
302 | fi | ||
303 | fi | ||
304 | fi | ||
305 | done | ||
306 | |||
307 | --------------------------------------------------------------------------- | ||
308 | #!/bin/bash | ||
309 | # Bind fbcon | ||
310 | |||
311 | for (( i = 0; i < 16; i++)) | ||
312 | do | ||
313 | if test -x /sys/class/vtconsole/vtcon$i; then | ||
314 | if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \ | ||
315 | = 1 ]; then | ||
316 | echo Unbinding vtcon$i | ||
317 | echo 1 > /sys/class/vtconsole/vtcon$i/bind | ||
318 | fi | ||
319 | fi | ||
320 | done | ||
321 | --------------------------------------------------------------------------- | ||
322 | |||
323 | -- | ||
152 | Antonino Daplas <adaplas@pol.net> | 324 | Antonino Daplas <adaplas@pol.net> |