1*ab42b818SMauro Carvalho Chehab======================= 2*ab42b818SMauro Carvalho ChehabThe Frame Buffer Device 3*ab42b818SMauro Carvalho Chehab======================= 4*ab42b818SMauro Carvalho Chehab 5*ab42b818SMauro Carvalho ChehabLast revised: May 10, 2001 6*ab42b818SMauro Carvalho Chehab 7*ab42b818SMauro Carvalho Chehab 8*ab42b818SMauro Carvalho Chehab0. Introduction 9*ab42b818SMauro Carvalho Chehab--------------- 10*ab42b818SMauro Carvalho Chehab 11*ab42b818SMauro Carvalho ChehabThe frame buffer device provides an abstraction for the graphics hardware. It 12*ab42b818SMauro Carvalho Chehabrepresents the frame buffer of some video hardware and allows application 13*ab42b818SMauro Carvalho Chehabsoftware to access the graphics hardware through a well-defined interface, so 14*ab42b818SMauro Carvalho Chehabthe software doesn't need to know anything about the low-level (hardware 15*ab42b818SMauro Carvalho Chehabregister) stuff. 16*ab42b818SMauro Carvalho Chehab 17*ab42b818SMauro Carvalho ChehabThe device is accessed through special device nodes, usually located in the 18*ab42b818SMauro Carvalho Chehab/dev directory, i.e. /dev/fb*. 19*ab42b818SMauro Carvalho Chehab 20*ab42b818SMauro Carvalho Chehab 21*ab42b818SMauro Carvalho Chehab1. User's View of /dev/fb* 22*ab42b818SMauro Carvalho Chehab-------------------------- 23*ab42b818SMauro Carvalho Chehab 24*ab42b818SMauro Carvalho ChehabFrom the user's point of view, the frame buffer device looks just like any 25*ab42b818SMauro Carvalho Chehabother device in /dev. It's a character device using major 29; the minor 26*ab42b818SMauro Carvalho Chehabspecifies the frame buffer number. 27*ab42b818SMauro Carvalho Chehab 28*ab42b818SMauro Carvalho ChehabBy convention, the following device nodes are used (numbers indicate the device 29*ab42b818SMauro Carvalho Chehabminor numbers):: 30*ab42b818SMauro Carvalho Chehab 31*ab42b818SMauro Carvalho Chehab 0 = /dev/fb0 First frame buffer 32*ab42b818SMauro Carvalho Chehab 1 = /dev/fb1 Second frame buffer 33*ab42b818SMauro Carvalho Chehab ... 34*ab42b818SMauro Carvalho Chehab 31 = /dev/fb31 32nd frame buffer 35*ab42b818SMauro Carvalho Chehab 36*ab42b818SMauro Carvalho ChehabFor backwards compatibility, you may want to create the following symbolic 37*ab42b818SMauro Carvalho Chehablinks:: 38*ab42b818SMauro Carvalho Chehab 39*ab42b818SMauro Carvalho Chehab /dev/fb0current -> fb0 40*ab42b818SMauro Carvalho Chehab /dev/fb1current -> fb1 41*ab42b818SMauro Carvalho Chehab 42*ab42b818SMauro Carvalho Chehaband so on... 43*ab42b818SMauro Carvalho Chehab 44*ab42b818SMauro Carvalho ChehabThe frame buffer devices are also `normal` memory devices, this means, you can 45*ab42b818SMauro Carvalho Chehabread and write their contents. You can, for example, make a screen snapshot by:: 46*ab42b818SMauro Carvalho Chehab 47*ab42b818SMauro Carvalho Chehab cp /dev/fb0 myfile 48*ab42b818SMauro Carvalho Chehab 49*ab42b818SMauro Carvalho ChehabThere also can be more than one frame buffer at a time, e.g. if you have a 50*ab42b818SMauro Carvalho Chehabgraphics card in addition to the built-in hardware. The corresponding frame 51*ab42b818SMauro Carvalho Chehabbuffer devices (/dev/fb0 and /dev/fb1 etc.) work independently. 52*ab42b818SMauro Carvalho Chehab 53*ab42b818SMauro Carvalho ChehabApplication software that uses the frame buffer device (e.g. the X server) will 54*ab42b818SMauro Carvalho Chehabuse /dev/fb0 by default (older software uses /dev/fb0current). You can specify 55*ab42b818SMauro Carvalho Chehaban alternative frame buffer device by setting the environment variable 56*ab42b818SMauro Carvalho Chehab$FRAMEBUFFER to the path name of a frame buffer device, e.g. (for sh/bash 57*ab42b818SMauro Carvalho Chehabusers):: 58*ab42b818SMauro Carvalho Chehab 59*ab42b818SMauro Carvalho Chehab export FRAMEBUFFER=/dev/fb1 60*ab42b818SMauro Carvalho Chehab 61*ab42b818SMauro Carvalho Chehabor (for csh users):: 62*ab42b818SMauro Carvalho Chehab 63*ab42b818SMauro Carvalho Chehab setenv FRAMEBUFFER /dev/fb1 64*ab42b818SMauro Carvalho Chehab 65*ab42b818SMauro Carvalho ChehabAfter this the X server will use the second frame buffer. 66*ab42b818SMauro Carvalho Chehab 67*ab42b818SMauro Carvalho Chehab 68*ab42b818SMauro Carvalho Chehab2. Programmer's View of /dev/fb* 69*ab42b818SMauro Carvalho Chehab-------------------------------- 70*ab42b818SMauro Carvalho Chehab 71*ab42b818SMauro Carvalho ChehabAs you already know, a frame buffer device is a memory device like /dev/mem and 72*ab42b818SMauro Carvalho Chehabit has the same features. You can read it, write it, seek to some location in 73*ab42b818SMauro Carvalho Chehabit and mmap() it (the main usage). The difference is just that the memory that 74*ab42b818SMauro Carvalho Chehabappears in the special file is not the whole memory, but the frame buffer of 75*ab42b818SMauro Carvalho Chehabsome video hardware. 76*ab42b818SMauro Carvalho Chehab 77*ab42b818SMauro Carvalho Chehab/dev/fb* also allows several ioctls on it, by which lots of information about 78*ab42b818SMauro Carvalho Chehabthe hardware can be queried and set. The color map handling works via ioctls, 79*ab42b818SMauro Carvalho Chehabtoo. Look into <linux/fb.h> for more information on what ioctls exist and on 80*ab42b818SMauro Carvalho Chehabwhich data structures they work. Here's just a brief overview: 81*ab42b818SMauro Carvalho Chehab 82*ab42b818SMauro Carvalho Chehab - You can request unchangeable information about the hardware, like name, 83*ab42b818SMauro Carvalho Chehab organization of the screen memory (planes, packed pixels, ...) and address 84*ab42b818SMauro Carvalho Chehab and length of the screen memory. 85*ab42b818SMauro Carvalho Chehab 86*ab42b818SMauro Carvalho Chehab - You can request and change variable information about the hardware, like 87*ab42b818SMauro Carvalho Chehab visible and virtual geometry, depth, color map format, timing, and so on. 88*ab42b818SMauro Carvalho Chehab If you try to change that information, the driver maybe will round up some 89*ab42b818SMauro Carvalho Chehab values to meet the hardware's capabilities (or return EINVAL if that isn't 90*ab42b818SMauro Carvalho Chehab possible). 91*ab42b818SMauro Carvalho Chehab 92*ab42b818SMauro Carvalho Chehab - You can get and set parts of the color map. Communication is done with 16 93*ab42b818SMauro Carvalho Chehab bits per color part (red, green, blue, transparency) to support all 94*ab42b818SMauro Carvalho Chehab existing hardware. The driver does all the computations needed to apply 95*ab42b818SMauro Carvalho Chehab it to the hardware (round it down to less bits, maybe throw away 96*ab42b818SMauro Carvalho Chehab transparency). 97*ab42b818SMauro Carvalho Chehab 98*ab42b818SMauro Carvalho ChehabAll this hardware abstraction makes the implementation of application programs 99*ab42b818SMauro Carvalho Chehabeasier and more portable. E.g. the X server works completely on /dev/fb* and 100*ab42b818SMauro Carvalho Chehabthus doesn't need to know, for example, how the color registers of the concrete 101*ab42b818SMauro Carvalho Chehabhardware are organized. XF68_FBDev is a general X server for bitmapped, 102*ab42b818SMauro Carvalho Chehabunaccelerated video hardware. The only thing that has to be built into 103*ab42b818SMauro Carvalho Chehabapplication programs is the screen organization (bitplanes or chunky pixels 104*ab42b818SMauro Carvalho Chehabetc.), because it works on the frame buffer image data directly. 105*ab42b818SMauro Carvalho Chehab 106*ab42b818SMauro Carvalho ChehabFor the future it is planned that frame buffer drivers for graphics cards and 107*ab42b818SMauro Carvalho Chehabthe like can be implemented as kernel modules that are loaded at runtime. Such 108*ab42b818SMauro Carvalho Chehaba driver just has to call register_framebuffer() and supply some functions. 109*ab42b818SMauro Carvalho ChehabWriting and distributing such drivers independently from the kernel will save 110*ab42b818SMauro Carvalho Chehabmuch trouble... 111*ab42b818SMauro Carvalho Chehab 112*ab42b818SMauro Carvalho Chehab 113*ab42b818SMauro Carvalho Chehab3. Frame Buffer Resolution Maintenance 114*ab42b818SMauro Carvalho Chehab-------------------------------------- 115*ab42b818SMauro Carvalho Chehab 116*ab42b818SMauro Carvalho ChehabFrame buffer resolutions are maintained using the utility `fbset`. It can 117*ab42b818SMauro Carvalho Chehabchange the video mode properties of a frame buffer device. Its main usage is 118*ab42b818SMauro Carvalho Chehabto change the current video mode, e.g. during boot up in one of your `/etc/rc.*` 119*ab42b818SMauro Carvalho Chehabor `/etc/init.d/*` files. 120*ab42b818SMauro Carvalho Chehab 121*ab42b818SMauro Carvalho ChehabFbset uses a video mode database stored in a configuration file, so you can 122*ab42b818SMauro Carvalho Chehabeasily add your own modes and refer to them with a simple identifier. 123*ab42b818SMauro Carvalho Chehab 124*ab42b818SMauro Carvalho Chehab 125*ab42b818SMauro Carvalho Chehab4. The X Server 126*ab42b818SMauro Carvalho Chehab--------------- 127*ab42b818SMauro Carvalho Chehab 128*ab42b818SMauro Carvalho ChehabThe X server (XF68_FBDev) is the most notable application program for the frame 129*ab42b818SMauro Carvalho Chehabbuffer device. Starting with XFree86 release 3.2, the X server is part of 130*ab42b818SMauro Carvalho ChehabXFree86 and has 2 modes: 131*ab42b818SMauro Carvalho Chehab 132*ab42b818SMauro Carvalho Chehab - If the `Display` subsection for the `fbdev` driver in the /etc/XF86Config 133*ab42b818SMauro Carvalho Chehab file contains a:: 134*ab42b818SMauro Carvalho Chehab 135*ab42b818SMauro Carvalho Chehab Modes "default" 136*ab42b818SMauro Carvalho Chehab 137*ab42b818SMauro Carvalho Chehab line, the X server will use the scheme discussed above, i.e. it will start 138*ab42b818SMauro Carvalho Chehab up in the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if set). You 139*ab42b818SMauro Carvalho Chehab still have to specify the color depth (using the Depth keyword) and virtual 140*ab42b818SMauro Carvalho Chehab resolution (using the Virtual keyword) though. This is the default for the 141*ab42b818SMauro Carvalho Chehab configuration file supplied with XFree86. It's the most simple 142*ab42b818SMauro Carvalho Chehab configuration, but it has some limitations. 143*ab42b818SMauro Carvalho Chehab 144*ab42b818SMauro Carvalho Chehab - Therefore it's also possible to specify resolutions in the /etc/XF86Config 145*ab42b818SMauro Carvalho Chehab file. This allows for on-the-fly resolution switching while retaining the 146*ab42b818SMauro Carvalho Chehab same virtual desktop size. The frame buffer device that's used is still 147*ab42b818SMauro Carvalho Chehab /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are 148*ab42b818SMauro Carvalho Chehab defined by /etc/XF86Config now. The disadvantage is that you have to 149*ab42b818SMauro Carvalho Chehab specify the timings in a different format (but `fbset -x` may help). 150*ab42b818SMauro Carvalho Chehab 151*ab42b818SMauro Carvalho ChehabTo tune a video mode, you can use fbset or xvidtune. Note that xvidtune doesn't 152*ab42b818SMauro Carvalho Chehabwork 100% with XF68_FBDev: the reported clock values are always incorrect. 153*ab42b818SMauro Carvalho Chehab 154*ab42b818SMauro Carvalho Chehab 155*ab42b818SMauro Carvalho Chehab5. Video Mode Timings 156*ab42b818SMauro Carvalho Chehab--------------------- 157*ab42b818SMauro Carvalho Chehab 158*ab42b818SMauro Carvalho ChehabA monitor draws an image on the screen by using an electron beam (3 electron 159*ab42b818SMauro Carvalho Chehabbeams for color models, 1 electron beam for monochrome monitors). The front of 160*ab42b818SMauro Carvalho Chehabthe screen is covered by a pattern of colored phosphors (pixels). If a phosphor 161*ab42b818SMauro Carvalho Chehabis hit by an electron, it emits a photon and thus becomes visible. 162*ab42b818SMauro Carvalho Chehab 163*ab42b818SMauro Carvalho ChehabThe electron beam draws horizontal lines (scanlines) from left to right, and 164*ab42b818SMauro Carvalho Chehabfrom the top to the bottom of the screen. By modifying the intensity of the 165*ab42b818SMauro Carvalho Chehabelectron beam, pixels with various colors and intensities can be shown. 166*ab42b818SMauro Carvalho Chehab 167*ab42b818SMauro Carvalho ChehabAfter each scanline the electron beam has to move back to the left side of the 168*ab42b818SMauro Carvalho Chehabscreen and to the next line: this is called the horizontal retrace. After the 169*ab42b818SMauro Carvalho Chehabwhole screen (frame) was painted, the beam moves back to the upper left corner: 170*ab42b818SMauro Carvalho Chehabthis is called the vertical retrace. During both the horizontal and vertical 171*ab42b818SMauro Carvalho Chehabretrace, the electron beam is turned off (blanked). 172*ab42b818SMauro Carvalho Chehab 173*ab42b818SMauro Carvalho ChehabThe speed at which the electron beam paints the pixels is determined by the 174*ab42b818SMauro Carvalho Chehabdotclock in the graphics board. For a dotclock of e.g. 28.37516 MHz (millions 175*ab42b818SMauro Carvalho Chehabof cycles per second), each pixel is 35242 ps (picoseconds) long:: 176*ab42b818SMauro Carvalho Chehab 177*ab42b818SMauro Carvalho Chehab 1/(28.37516E6 Hz) = 35.242E-9 s 178*ab42b818SMauro Carvalho Chehab 179*ab42b818SMauro Carvalho ChehabIf the screen resolution is 640x480, it will take:: 180*ab42b818SMauro Carvalho Chehab 181*ab42b818SMauro Carvalho Chehab 640*35.242E-9 s = 22.555E-6 s 182*ab42b818SMauro Carvalho Chehab 183*ab42b818SMauro Carvalho Chehabto paint the 640 (xres) pixels on one scanline. But the horizontal retrace 184*ab42b818SMauro Carvalho Chehabalso takes time (e.g. 272 `pixels`), so a full scanline takes:: 185*ab42b818SMauro Carvalho Chehab 186*ab42b818SMauro Carvalho Chehab (640+272)*35.242E-9 s = 32.141E-6 s 187*ab42b818SMauro Carvalho Chehab 188*ab42b818SMauro Carvalho ChehabWe'll say that the horizontal scanrate is about 31 kHz:: 189*ab42b818SMauro Carvalho Chehab 190*ab42b818SMauro Carvalho Chehab 1/(32.141E-6 s) = 31.113E3 Hz 191*ab42b818SMauro Carvalho Chehab 192*ab42b818SMauro Carvalho ChehabA full screen counts 480 (yres) lines, but we have to consider the vertical 193*ab42b818SMauro Carvalho Chehabretrace too (e.g. 49 `lines`). So a full screen will take:: 194*ab42b818SMauro Carvalho Chehab 195*ab42b818SMauro Carvalho Chehab (480+49)*32.141E-6 s = 17.002E-3 s 196*ab42b818SMauro Carvalho Chehab 197*ab42b818SMauro Carvalho ChehabThe vertical scanrate is about 59 Hz:: 198*ab42b818SMauro Carvalho Chehab 199*ab42b818SMauro Carvalho Chehab 1/(17.002E-3 s) = 58.815 Hz 200*ab42b818SMauro Carvalho Chehab 201*ab42b818SMauro Carvalho ChehabThis means the screen data is refreshed about 59 times per second. To have a 202*ab42b818SMauro Carvalho Chehabstable picture without visible flicker, VESA recommends a vertical scanrate of 203*ab42b818SMauro Carvalho Chehabat least 72 Hz. But the perceived flicker is very human dependent: some people 204*ab42b818SMauro Carvalho Chehabcan use 50 Hz without any trouble, while I'll notice if it's less than 80 Hz. 205*ab42b818SMauro Carvalho Chehab 206*ab42b818SMauro Carvalho ChehabSince the monitor doesn't know when a new scanline starts, the graphics board 207*ab42b818SMauro Carvalho Chehabwill supply a synchronization pulse (horizontal sync or hsync) for each 208*ab42b818SMauro Carvalho Chehabscanline. Similarly it supplies a synchronization pulse (vertical sync or 209*ab42b818SMauro Carvalho Chehabvsync) for each new frame. The position of the image on the screen is 210*ab42b818SMauro Carvalho Chehabinfluenced by the moments at which the synchronization pulses occur. 211*ab42b818SMauro Carvalho Chehab 212*ab42b818SMauro Carvalho ChehabThe following picture summarizes all timings. The horizontal retrace time is 213*ab42b818SMauro Carvalho Chehabthe sum of the left margin, the right margin and the hsync length, while the 214*ab42b818SMauro Carvalho Chehabvertical retrace time is the sum of the upper margin, the lower margin and the 215*ab42b818SMauro Carvalho Chehabvsync length:: 216*ab42b818SMauro Carvalho Chehab 217*ab42b818SMauro Carvalho Chehab +----------+---------------------------------------------+----------+-------+ 218*ab42b818SMauro Carvalho Chehab | | ↑ | | | 219*ab42b818SMauro Carvalho Chehab | | |upper_margin | | | 220*ab42b818SMauro Carvalho Chehab | | ↓ | | | 221*ab42b818SMauro Carvalho Chehab +----------###############################################----------+-------+ 222*ab42b818SMauro Carvalho Chehab | # ↑ # | | 223*ab42b818SMauro Carvalho Chehab | # | # | | 224*ab42b818SMauro Carvalho Chehab | # | # | | 225*ab42b818SMauro Carvalho Chehab | # | # | | 226*ab42b818SMauro Carvalho Chehab | left # | # right | hsync | 227*ab42b818SMauro Carvalho Chehab | margin # | xres # margin | len | 228*ab42b818SMauro Carvalho Chehab |<-------->#<---------------+--------------------------->#<-------->|<----->| 229*ab42b818SMauro Carvalho Chehab | # | # | | 230*ab42b818SMauro Carvalho Chehab | # | # | | 231*ab42b818SMauro Carvalho Chehab | # | # | | 232*ab42b818SMauro Carvalho Chehab | # |yres # | | 233*ab42b818SMauro Carvalho Chehab | # | # | | 234*ab42b818SMauro Carvalho Chehab | # | # | | 235*ab42b818SMauro Carvalho Chehab | # | # | | 236*ab42b818SMauro Carvalho Chehab | # | # | | 237*ab42b818SMauro Carvalho Chehab | # | # | | 238*ab42b818SMauro Carvalho Chehab | # | # | | 239*ab42b818SMauro Carvalho Chehab | # | # | | 240*ab42b818SMauro Carvalho Chehab | # | # | | 241*ab42b818SMauro Carvalho Chehab | # ↓ # | | 242*ab42b818SMauro Carvalho Chehab +----------###############################################----------+-------+ 243*ab42b818SMauro Carvalho Chehab | | ↑ | | | 244*ab42b818SMauro Carvalho Chehab | | |lower_margin | | | 245*ab42b818SMauro Carvalho Chehab | | ↓ | | | 246*ab42b818SMauro Carvalho Chehab +----------+---------------------------------------------+----------+-------+ 247*ab42b818SMauro Carvalho Chehab | | ↑ | | | 248*ab42b818SMauro Carvalho Chehab | | |vsync_len | | | 249*ab42b818SMauro Carvalho Chehab | | ↓ | | | 250*ab42b818SMauro Carvalho Chehab +----------+---------------------------------------------+----------+-------+ 251*ab42b818SMauro Carvalho Chehab 252*ab42b818SMauro Carvalho ChehabThe frame buffer device expects all horizontal timings in number of dotclocks 253*ab42b818SMauro Carvalho Chehab(in picoseconds, 1E-12 s), and vertical timings in number of scanlines. 254*ab42b818SMauro Carvalho Chehab 255*ab42b818SMauro Carvalho Chehab 256*ab42b818SMauro Carvalho Chehab6. Converting XFree86 timing values info frame buffer device timings 257*ab42b818SMauro Carvalho Chehab-------------------------------------------------------------------- 258*ab42b818SMauro Carvalho Chehab 259*ab42b818SMauro Carvalho ChehabAn XFree86 mode line consists of the following fields:: 260*ab42b818SMauro Carvalho Chehab 261*ab42b818SMauro Carvalho Chehab "800x600" 50 800 856 976 1040 600 637 643 666 262*ab42b818SMauro Carvalho Chehab < name > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL 263*ab42b818SMauro Carvalho Chehab 264*ab42b818SMauro Carvalho ChehabThe frame buffer device uses the following fields: 265*ab42b818SMauro Carvalho Chehab 266*ab42b818SMauro Carvalho Chehab - pixclock: pixel clock in ps (pico seconds) 267*ab42b818SMauro Carvalho Chehab - left_margin: time from sync to picture 268*ab42b818SMauro Carvalho Chehab - right_margin: time from picture to sync 269*ab42b818SMauro Carvalho Chehab - upper_margin: time from sync to picture 270*ab42b818SMauro Carvalho Chehab - lower_margin: time from picture to sync 271*ab42b818SMauro Carvalho Chehab - hsync_len: length of horizontal sync 272*ab42b818SMauro Carvalho Chehab - vsync_len: length of vertical sync 273*ab42b818SMauro Carvalho Chehab 274*ab42b818SMauro Carvalho Chehab1) Pixelclock: 275*ab42b818SMauro Carvalho Chehab 276*ab42b818SMauro Carvalho Chehab xfree: in MHz 277*ab42b818SMauro Carvalho Chehab 278*ab42b818SMauro Carvalho Chehab fb: in picoseconds (ps) 279*ab42b818SMauro Carvalho Chehab 280*ab42b818SMauro Carvalho Chehab pixclock = 1000000 / DCF 281*ab42b818SMauro Carvalho Chehab 282*ab42b818SMauro Carvalho Chehab2) horizontal timings: 283*ab42b818SMauro Carvalho Chehab 284*ab42b818SMauro Carvalho Chehab left_margin = HFL - SH2 285*ab42b818SMauro Carvalho Chehab 286*ab42b818SMauro Carvalho Chehab right_margin = SH1 - HR 287*ab42b818SMauro Carvalho Chehab 288*ab42b818SMauro Carvalho Chehab hsync_len = SH2 - SH1 289*ab42b818SMauro Carvalho Chehab 290*ab42b818SMauro Carvalho Chehab3) vertical timings: 291*ab42b818SMauro Carvalho Chehab 292*ab42b818SMauro Carvalho Chehab upper_margin = VFL - SV2 293*ab42b818SMauro Carvalho Chehab 294*ab42b818SMauro Carvalho Chehab lower_margin = SV1 - VR 295*ab42b818SMauro Carvalho Chehab 296*ab42b818SMauro Carvalho Chehab vsync_len = SV2 - SV1 297*ab42b818SMauro Carvalho Chehab 298*ab42b818SMauro Carvalho ChehabGood examples for VESA timings can be found in the XFree86 source tree, 299*ab42b818SMauro Carvalho Chehabunder "xc/programs/Xserver/hw/xfree86/doc/modeDB.txt". 300*ab42b818SMauro Carvalho Chehab 301*ab42b818SMauro Carvalho Chehab 302*ab42b818SMauro Carvalho Chehab7. References 303*ab42b818SMauro Carvalho Chehab------------- 304*ab42b818SMauro Carvalho Chehab 305*ab42b818SMauro Carvalho ChehabFor more specific information about the frame buffer device and its 306*ab42b818SMauro Carvalho Chehabapplications, please refer to the Linux-fbdev website: 307*ab42b818SMauro Carvalho Chehab 308*ab42b818SMauro Carvalho Chehab http://linux-fbdev.sourceforge.net/ 309*ab42b818SMauro Carvalho Chehab 310*ab42b818SMauro Carvalho Chehaband to the following documentation: 311*ab42b818SMauro Carvalho Chehab 312*ab42b818SMauro Carvalho Chehab - The manual pages for fbset: fbset(8), fb.modes(5) 313*ab42b818SMauro Carvalho Chehab - The manual pages for XFree86: XF68_FBDev(1), XF86Config(4/5) 314*ab42b818SMauro Carvalho Chehab - The mighty kernel sources: 315*ab42b818SMauro Carvalho Chehab 316*ab42b818SMauro Carvalho Chehab - linux/drivers/video/ 317*ab42b818SMauro Carvalho Chehab - linux/include/linux/fb.h 318*ab42b818SMauro Carvalho Chehab - linux/include/video/ 319*ab42b818SMauro Carvalho Chehab 320*ab42b818SMauro Carvalho Chehab 321*ab42b818SMauro Carvalho Chehab 322*ab42b818SMauro Carvalho Chehab8. Mailing list 323*ab42b818SMauro Carvalho Chehab--------------- 324*ab42b818SMauro Carvalho Chehab 325*ab42b818SMauro Carvalho ChehabThere is a frame buffer device related mailing list at kernel.org: 326*ab42b818SMauro Carvalho Chehablinux-fbdev@vger.kernel.org. 327*ab42b818SMauro Carvalho Chehab 328*ab42b818SMauro Carvalho ChehabPoint your web browser to http://sourceforge.net/projects/linux-fbdev/ for 329*ab42b818SMauro Carvalho Chehabsubscription information and archive browsing. 330*ab42b818SMauro Carvalho Chehab 331*ab42b818SMauro Carvalho Chehab 332*ab42b818SMauro Carvalho Chehab9. Downloading 333*ab42b818SMauro Carvalho Chehab-------------- 334*ab42b818SMauro Carvalho Chehab 335*ab42b818SMauro Carvalho ChehabAll necessary files can be found at 336*ab42b818SMauro Carvalho Chehab 337*ab42b818SMauro Carvalho Chehab ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/680x0/ 338*ab42b818SMauro Carvalho Chehab 339*ab42b818SMauro Carvalho Chehaband on its mirrors. 340*ab42b818SMauro Carvalho Chehab 341*ab42b818SMauro Carvalho ChehabThe latest version of fbset can be found at 342*ab42b818SMauro Carvalho Chehab 343*ab42b818SMauro Carvalho Chehab http://www.linux-fbdev.org/ 344*ab42b818SMauro Carvalho Chehab 345*ab42b818SMauro Carvalho Chehab 346*ab42b818SMauro Carvalho Chehab10. Credits 347*ab42b818SMauro Carvalho Chehab----------- 348*ab42b818SMauro Carvalho Chehab 349*ab42b818SMauro Carvalho ChehabThis readme was written by Geert Uytterhoeven, partly based on the original 350*ab42b818SMauro Carvalho Chehab`X-framebuffer.README` by Roman Hodek and Martin Schaller. Section 6 was 351*ab42b818SMauro Carvalho Chehabprovided by Frank Neumann. 352*ab42b818SMauro Carvalho Chehab 353*ab42b818SMauro Carvalho ChehabThe frame buffer device abstraction was designed by Martin Schaller. 354