€•tËŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ"/translations/zh_CN/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/zh_TW/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/it_IT/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ja_JP/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ko_KR/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/pt_BR/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/sp_SP/fb/framebuffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒThe Frame Buffer Device”h]”hŒThe Frame Buffer Device”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ)�”}”(hŒ-/dev/fb0current -> fb0 /dev/fb1current -> fb1”h]”hŒ-/dev/fb0current -> fb0 /dev/fb1current -> fb1”…”�”}”hj]sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K'hjh²hubhÌ)�”}”(hŒ and so on...”h]”hŒ and so on...”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hjh²hubhÌ)�”}”(hŒŸThe frame buffer devices are also `normal` memory devices, this means, you can read and write their contents. You can, for example, make a screen snapshot by::”h]”(hŒ"The frame buffer devices are also ”…”�”}”(hjyh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`normal`”h]”hŒnormal”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyubhŒt memory devices, this means, you can read and write their contents. You can, for example, make a screen snapshot by:”…”�”}”(hjyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjh²hubj>)�”}”(hŒcp /dev/fb0 myfile”h]”hŒcp /dev/fb0 myfile”…”�”}”hj›sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K/hjh²hubhÌ)�”}”(hŒÖThere also can be more than one frame buffer at a time, e.g. if you have a graphics card in addition to the built-in hardware. The corresponding frame buffer devices (/dev/fb0 and /dev/fb1 etc.) work independently.”h]”hŒÖThere also can be more than one frame buffer at a time, e.g. if you have a graphics card in addition to the built-in hardware. The corresponding frame buffer devices (/dev/fb0 and /dev/fb1 etc.) work independently.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjh²hubhÌ)�”}”(hX8Application software that uses the frame buffer device (e.g. the X server) will use /dev/fb0 by default (older software uses /dev/fb0current). You can specify an alternative frame buffer device by setting the environment variable $FRAMEBUFFER to the path name of a frame buffer device, e.g. (for sh/bash users)::”h]”hX7Application software that uses the frame buffer device (e.g. the X server) will use /dev/fb0 by default (older software uses /dev/fb0current). You can specify an alternative frame buffer device by setting the environment variable $FRAMEBUFFER to the path name of a frame buffer device, e.g. (for sh/bash users):”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hjh²hubj>)�”}”(hŒexport FRAMEBUFFER=/dev/fb1”h]”hŒexport FRAMEBUFFER=/dev/fb1”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K;hjh²hubhÌ)�”}”(hŒor (for csh users)::”h]”hŒor (for csh users):”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K=hjh²hubj>)�”}”(hŒsetenv FRAMEBUFFER /dev/fb1”h]”hŒsetenv FRAMEBUFFER /dev/fb1”…”�”}”hjásbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K?hjh²hubhÌ)�”}”(hŒ9After this the X server will use the second frame buffer.”h]”hŒ9After this the X server will use the second frame buffer.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KAhjh²hubeh}”(h]”Œuser-s-view-of-dev-fb”ah ]”h"]”Œ1. user's view of /dev/fb*”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ 2. Programmer's View of /dev/fb*”h]”hŒ"2. Programmer’s View of /dev/fb*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KEubhÌ)�”}”(hXNAs you already know, a frame buffer device is a memory device like /dev/mem and it has the same features. You can read it, write it, seek to some location in it and mmap() it (the main usage). The difference is just that the memory that appears in the special file is not the whole memory, but the frame buffer of some video hardware.”h]”hXNAs you already know, a frame buffer device is a memory device like /dev/mem and it has the same features. You can read it, write it, seek to some location in it and mmap() it (the main usage). The difference is just that the memory that appears in the special file is not the whole memory, but the frame buffer of some video hardware.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KGhjh²hubhÌ)�”}”(hX'/dev/fb* also allows several ioctls on it, by which lots of information about the hardware can be queried and set. The color map handling works via ioctls, too. Look into for more information on what ioctls exist and on which data structures they work. Here's just a brief overview:”h]”hX)/dev/fb* also allows several ioctls on it, by which lots of information about the hardware can be queried and set. The color map handling works via ioctls, too. Look into for more information on what ioctls exist and on which data structures they work. Here’s just a brief overview:”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KMhjh²hubhŒ block_quote”“”)�”}”(hX*- You can request unchangeable information about the hardware, like name, organization of the screen memory (planes, packed pixels, ...) and address and length of the screen memory. - You can request and change variable information about the hardware, like visible and virtual geometry, depth, color map format, timing, and so on. If you try to change that information, the driver maybe will round up some values to meet the hardware's capabilities (or return EINVAL if that isn't possible). - You can get and set parts of the color map. Communication is done with 16 bits per color part (red, green, blue, transparency) to support all existing hardware. The driver does all the computations needed to apply it to the hardware (round it down to less bits, maybe throw away transparency). ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ´You can request unchangeable information about the hardware, like name, organization of the screen memory (planes, packed pixels, ...) and address and length of the screen memory. ”h]”hÌ)�”}”(hŒ³You can request unchangeable information about the hardware, like name, organization of the screen memory (planes, packed pixels, ...) and address and length of the screen memory.”h]”hŒ³You can request unchangeable information about the hardware, like name, organization of the screen memory (planes, packed pixels, ...) and address and length of the screen memory.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KRhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubj>)�”}”(hX4You can request and change variable information about the hardware, like visible and virtual geometry, depth, color map format, timing, and so on. If you try to change that information, the driver maybe will round up some values to meet the hardware's capabilities (or return EINVAL if that isn't possible). ”h]”hÌ)�”}”(hX3You can request and change variable information about the hardware, like visible and virtual geometry, depth, color map format, timing, and so on. If you try to change that information, the driver maybe will round up some values to meet the hardware's capabilities (or return EINVAL if that isn't possible).”h]”hX7You can request and change variable information about the hardware, like visible and virtual geometry, depth, color map format, timing, and so on. If you try to change that information, the driver maybe will round up some values to meet the hardware’s capabilities (or return EINVAL if that isn’t possible).”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubj>)�”}”(hX&You can get and set parts of the color map. Communication is done with 16 bits per color part (red, green, blue, transparency) to support all existing hardware. The driver does all the computations needed to apply it to the hardware (round it down to less bits, maybe throw away transparency). ”h]”hÌ)�”}”(hX%You can get and set parts of the color map. Communication is done with 16 bits per color part (red, green, blue, transparency) to support all existing hardware. The driver does all the computations needed to apply it to the hardware (round it down to less bits, maybe throw away transparency).”h]”hX%You can get and set parts of the color map. Communication is done with 16 bits per color part (red, green, blue, transparency) to support all existing hardware. The driver does all the computations needed to apply it to the hardware (round it down to less bits, maybe throw away transparency).”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K\hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j8h³hÊh´KRhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´KRhjh²hubhÌ)�”}”(hXAll this hardware abstraction makes the implementation of application programs easier and more portable. E.g. the X server works completely on /dev/fb* and thus doesn't need to know, for example, how the color registers of the concrete hardware are organized. XF68_FBDev is a general X server for bitmapped, unaccelerated video hardware. The only thing that has to be built into application programs is the screen organization (bitplanes or chunky pixels etc.), because it works on the frame buffer image data directly.”h]”hX All this hardware abstraction makes the implementation of application programs easier and more portable. E.g. the X server works completely on /dev/fb* and thus doesn’t need to know, for example, how the color registers of the concrete hardware are organized. XF68_FBDev is a general X server for bitmapped, unaccelerated video hardware. The only thing that has to be built into application programs is the screen organization (bitplanes or chunky pixels etc.), because it works on the frame buffer image data directly.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kbhjh²hubhÌ)�”}”(hXFFor the future it is planned that frame buffer drivers for graphics cards and the like can be implemented as kernel modules that are loaded at runtime. Such a driver just has to call register_framebuffer() and supply some functions. Writing and distributing such drivers independently from the kernel will save much trouble...”h]”hXFFor the future it is planned that frame buffer drivers for graphics cards and the like can be implemented as kernel modules that are loaded at runtime. Such a driver just has to call register_framebuffer() and supply some functions. Writing and distributing such drivers independently from the kernel will save much trouble...”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhjh²hubeh}”(h]”Œprogrammer-s-view-of-dev-fb”ah ]”h"]”Œ 2. programmer's view of /dev/fb*”ah$]”h&]”uh1hµhh·h²hh³hÊh´KEubh¶)�”}”(hhh]”(h»)�”}”(hŒ&3. Frame Buffer Resolution Maintenance”h]”hŒ&3. Frame Buffer Resolution Maintenance”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¹h²hh³hÊh´KrubhÌ)�”}”(hXFrame buffer resolutions are maintained using the utility `fbset`. It can change the video mode properties of a frame buffer device. Its main usage is to change the current video mode, e.g. during boot up in one of your `/etc/rc.*` or `/etc/init.d/*` files.”h]”(hŒ:Frame buffer resolutions are maintained using the utility ”…”�”}”(hjÊh²hh³Nh´Nubj‚)�”}”(hŒ`fbset`”h]”hŒfbset”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÊubhŒ›. It can change the video mode properties of a frame buffer device. Its main usage is to change the current video mode, e.g. during boot up in one of your ”…”�”}”(hjÊh²hh³Nh´Nubj‚)�”}”(hŒ `/etc/rc.*`”h]”hŒ /etc/rc.*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÊubhŒ or ”…”�”}”(hjÊh²hh³Nh´Nubj‚)�”}”(hŒ`/etc/init.d/*`”h]”hŒ /etc/init.d/*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÊubhŒ files.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj¹h²hubhÌ)�”}”(hŒ‘Fbset uses a video mode database stored in a configuration file, so you can easily add your own modes and refer to them with a simple identifier.”h]”hŒ‘Fbset uses a video mode database stored in a configuration file, so you can easily add your own modes and refer to them with a simple identifier.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj¹h²hubeh}”(h]”Œ#frame-buffer-resolution-maintenance”ah ]”h"]”Œ&3. frame buffer resolution maintenance”ah$]”h&]”uh1hµhh·h²hh³hÊh´Krubh¶)�”}”(hhh]”(h»)�”}”(hŒ4. The X Server”h]”hŒ4. The X Server”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj$h²hh³hÊh´K~ubhÌ)�”}”(hŒ²The X server (XF68_FBDev) is the most notable application program for the frame buffer device. Starting with XFree86 release 3.2, the X server is part of XFree86 and has 2 modes:”h]”hŒ²The X server (XF68_FBDev) is the most notable application program for the frame buffer device. Starting with XFree86 release 3.2, the X server is part of XFree86 and has 2 modes:”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K€hj$h²hubj3)�”}”(hXÕ- If the `Display` subsection for the `fbdev` driver in the /etc/XF86Config file contains a:: Modes "default" line, the X server will use the scheme discussed above, i.e. it will start up in the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if set). You still have to specify the color depth (using the Depth keyword) and virtual resolution (using the Virtual keyword) though. This is the default for the configuration file supplied with XFree86. It's the most simple configuration, but it has some limitations. - Therefore it's also possible to specify resolutions in the /etc/XF86Config file. This allows for on-the-fly resolution switching while retaining the same virtual desktop size. The frame buffer device that's used is still /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are defined by /etc/XF86Config now. The disadvantage is that you have to specify the timings in a different format (but `fbset -x` may help). ”h]”j9)�”}”(hhh]”(j>)�”}”(hX If the `Display` subsection for the `fbdev` driver in the /etc/XF86Config file contains a:: Modes "default" line, the X server will use the scheme discussed above, i.e. it will start up in the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if set). You still have to specify the color depth (using the Depth keyword) and virtual resolution (using the Virtual keyword) though. This is the default for the configuration file supplied with XFree86. It's the most simple configuration, but it has some limitations. ”h]”(hÌ)�”}”(hŒ[If the `Display` subsection for the `fbdev` driver in the /etc/XF86Config file contains a::”h]”(hŒIf the ”…”�”}”(hjNh²hh³Nh´Nubj‚)�”}”(hŒ `Display`”h]”hŒDisplay”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNubhŒ subsection for the ”…”�”}”(hjNh²hh³Nh´Nubj‚)�”}”(hŒ`fbdev`”h]”hŒfbdev”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNubhŒ/ driver in the /etc/XF86Config file contains a:”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K„hjJubj>)�”}”(hŒModes "default"”h]”hŒModes "default"”…”�”}”hj€sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K‡hjJubhÌ)�”}”(hX—line, the X server will use the scheme discussed above, i.e. it will start up in the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if set). You still have to specify the color depth (using the Depth keyword) and virtual resolution (using the Virtual keyword) though. This is the default for the configuration file supplied with XFree86. It's the most simple configuration, but it has some limitations.”h]”hX™line, the X server will use the scheme discussed above, i.e. it will start up in the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if set). You still have to specify the color depth (using the Depth keyword) and virtual resolution (using the Virtual keyword) though. This is the default for the configuration file supplied with XFree86. It’s the most simple configuration, but it has some limitations.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‰hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hjGubj>)�”}”(hX¬Therefore it's also possible to specify resolutions in the /etc/XF86Config file. This allows for on-the-fly resolution switching while retaining the same virtual desktop size. The frame buffer device that's used is still /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are defined by /etc/XF86Config now. The disadvantage is that you have to specify the timings in a different format (but `fbset -x` may help). ”h]”hÌ)�”}”(hX«Therefore it's also possible to specify resolutions in the /etc/XF86Config file. This allows for on-the-fly resolution switching while retaining the same virtual desktop size. The frame buffer device that's used is still /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are defined by /etc/XF86Config now. The disadvantage is that you have to specify the timings in a different format (but `fbset -x` may help).”h]”(hXšTherefore it’s also possible to specify resolutions in the /etc/XF86Config file. This allows for on-the-fly resolution switching while retaining the same virtual desktop size. The frame buffer device that’s used is still /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are defined by /etc/XF86Config now. The disadvantage is that you have to specify the timings in a different format (but ”…”�”}”(hj¦h²hh³Nh´Nubj‚)�”}”(hŒ `fbset -x`”h]”hŒfbset -x”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦ubhŒ may help).”…”�”}”(hj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjGubeh}”(h]”h ]”h"]”h$]”h&]”j�jŽuh1j8h³hÊh´K„hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´K„hj$h²hubhÌ)�”}”(hŒšTo tune a video mode, you can use fbset or xvidtune. Note that xvidtune doesn't work 100% with XF68_FBDev: the reported clock values are always incorrect.”h]”hŒœTo tune a video mode, you can use fbset or xvidtune. Note that xvidtune doesn’t work 100% with XF68_FBDev: the reported clock values are always incorrect.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K—hj$h²hubeh}”(h]”Œ the-x-server”ah ]”h"]”Œ4. the x server”ah$]”h&]”uh1hµhh·h²hh³hÊh´K~ubh¶)�”}”(hhh]”(h»)�”}”(hŒ5. Video Mode Timings”h]”hŒ5. Video Mode Timings”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjîh²hh³hÊh´KœubhÌ)�”}”(hX.A monitor draws an image on the screen by using an electron beam (3 electron beams for color models, 1 electron beam for monochrome monitors). The front of the screen is covered by a pattern of colored phosphors (pixels). If a phosphor is hit by an electron, it emits a photon and thus becomes visible.”h]”hX.A monitor draws an image on the screen by using an electron beam (3 electron beams for color models, 1 electron beam for monochrome monitors). The front of the screen is covered by a pattern of colored phosphors (pixels). If a phosphor is hit by an electron, it emits a photon and thus becomes visible.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kžhjîh²hubhÌ)�”}”(hŒàThe electron beam draws horizontal lines (scanlines) from left to right, and from the top to the bottom of the screen. By modifying the intensity of the electron beam, pixels with various colors and intensities can be shown.”h]”hŒàThe electron beam draws horizontal lines (scanlines) from left to right, and from the top to the bottom of the screen. By modifying the intensity of the electron beam, pixels with various colors and intensities can be shown.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K£hjîh²hubhÌ)�”}”(hXmAfter each scanline the electron beam has to move back to the left side of the screen and to the next line: this is called the horizontal retrace. After the whole screen (frame) was painted, the beam moves back to the upper left corner: this is called the vertical retrace. During both the horizontal and vertical retrace, the electron beam is turned off (blanked).”h]”hXmAfter each scanline the electron beam has to move back to the left side of the screen and to the next line: this is called the horizontal retrace. After the whole screen (frame) was painted, the beam moves back to the upper left corner: this is called the vertical retrace. During both the horizontal and vertical retrace, the electron beam is turned off (blanked).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K§hjîh²hubhÌ)�”}”(hŒÜThe speed at which the electron beam paints the pixels is determined by the dotclock in the graphics board. For a dotclock of e.g. 28.37516 MHz (millions of cycles per second), each pixel is 35242 ps (picoseconds) long::”h]”hŒÛThe speed at which the electron beam paints the pixels is determined by the dotclock in the graphics board. For a dotclock of e.g. 28.37516 MHz (millions of cycles per second), each pixel is 35242 ps (picoseconds) long:”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K­hjîh²hubj>)�”}”(hŒ1/(28.37516E6 Hz) = 35.242E-9 s”h]”hŒ1/(28.37516E6 Hz) = 35.242E-9 s”…”�”}”hj7sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K±hjîh²hubhÌ)�”}”(hŒ3If the screen resolution is 640x480, it will take::”h]”hŒ2If the screen resolution is 640x480, it will take:”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K³hjîh²hubj>)�”}”(hŒ640*35.242E-9 s = 22.555E-6 s”h]”hŒ640*35.242E-9 s = 22.555E-6 s”…”�”}”hjSsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´Kµhjîh²hubhÌ)�”}”(hŒŠto paint the 640 (xres) pixels on one scanline. But the horizontal retrace also takes time (e.g. 272 `pixels`), so a full scanline takes::”h]”(hŒeto paint the 640 (xres) pixels on one scanline. But the horizontal retrace also takes time (e.g. 272 ”…”�”}”(hjah²hh³Nh´Nubj‚)�”}”(hŒ`pixels`”h]”hŒpixels”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaubhŒ), so a full scanline takes:”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K·hjîh²hubj>)�”}”(hŒ#(640+272)*35.242E-9 s = 32.141E-6 s”h]”hŒ#(640+272)*35.242E-9 s = 32.141E-6 s”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´Kºhjîh²hubhÌ)�”}”(hŒ8We'll say that the horizontal scanrate is about 31 kHz::”h]”hŒ9We’ll say that the horizontal scanrate is about 31 kHz:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¼hjîh²hubj>)�”}”(hŒ1/(32.141E-6 s) = 31.113E3 Hz”h]”hŒ1/(32.141E-6 s) = 31.113E3 Hz”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´K¾hjîh²hubhÌ)�”}”(hŒ‡A full screen counts 480 (yres) lines, but we have to consider the vertical retrace too (e.g. 49 `lines`). So a full screen will take::”h]”(hŒaA full screen counts 480 (yres) lines, but we have to consider the vertical retrace too (e.g. 49 ”…”�”}”(hj«h²hh³Nh´Nubj‚)�”}”(hŒ`lines`”h]”hŒlines”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj«ubhŒ). So a full screen will take:”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÀhjîh²hubj>)�”}”(hŒ"(480+49)*32.141E-6 s = 17.002E-3 s”h]”hŒ"(480+49)*32.141E-6 s = 17.002E-3 s”…”�”}”hjËsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´KÃhjîh²hubhÌ)�”}”(hŒ&The vertical scanrate is about 59 Hz::”h]”hŒ%The vertical scanrate is about 59 Hz:”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÅhjîh²hubj>)�”}”(hŒ1/(17.002E-3 s) = 58.815 Hz”h]”hŒ1/(17.002E-3 s) = 58.815 Hz”…”�”}”hjçsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´KÇhjîh²hubhÌ)�”}”(hX8This means the screen data is refreshed about 59 times per second. To have a stable picture without visible flicker, VESA recommends a vertical scanrate of at least 72 Hz. But the perceived flicker is very human dependent: some people can use 50 Hz without any trouble, while I'll notice if it's less than 80 Hz.”h]”hX<This means the screen data is refreshed about 59 times per second. To have a stable picture without visible flicker, VESA recommends a vertical scanrate of at least 72 Hz. But the perceived flicker is very human dependent: some people can use 50 Hz without any trouble, while I’ll notice if it’s less than 80 Hz.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÉhjîh²hubhÌ)�”}”(hXkSince the monitor doesn't know when a new scanline starts, the graphics board will supply a synchronization pulse (horizontal sync or hsync) for each scanline. Similarly it supplies a synchronization pulse (vertical sync or vsync) for each new frame. The position of the image on the screen is influenced by the moments at which the synchronization pulses occur.”h]”hXmSince the monitor doesn’t know when a new scanline starts, the graphics board will supply a synchronization pulse (horizontal sync or hsync) for each scanline. Similarly it supplies a synchronization pulse (vertical sync or vsync) for each new frame. The position of the image on the screen is influenced by the moments at which the synchronization pulses occur.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhjîh²hubhÌ)�”}”(hŒ÷The following picture summarizes all timings. The horizontal retrace time is the sum of the left margin, the right margin and the hsync length, while the vertical retrace time is the sum of the upper margin, the lower margin and the vsync length::”h]”hŒöThe following picture summarizes all timings. The horizontal retrace time is the sum of the left margin, the right margin and the hsync length, while the vertical retrace time is the sum of the upper margin, the lower margin and the vsync length:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÔhjîh²hubj>)�”}”(hXk +----------+---------------------------------------------+----------+-------+ | | ↑ | | | | | |upper_margin | | | | | ↓ | | | +----------###############################################----------+-------+ | # ↑ # | | | # | # | | | # | # | | | # | # | | | left # | # right | hsync | | margin # | xres # margin | len | |<-------->#<---------------+--------------------------->#<-------->|<----->| | # | # | | | # | # | | | # | # | | | # |yres # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # ↓ # | | +----------###############################################----------+-------+ | | ↑ | | | | | |lower_margin | | | | | ↓ | | | +----------+---------------------------------------------+----------+-------+ | | ↑ | | | | | |vsync_len | | | | | ↓ | | | +----------+---------------------------------------------+----------+-------+”h]”hXk +----------+---------------------------------------------+----------+-------+ | | ↑ | | | | | |upper_margin | | | | | ↓ | | | +----------###############################################----------+-------+ | # ↑ # | | | # | # | | | # | # | | | # | # | | | left # | # right | hsync | | margin # | xres # margin | len | |<-------->#<---------------+--------------------------->#<-------->|<----->| | # | # | | | # | # | | | # | # | | | # |yres # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # | # | | | # ↓ # | | +----------###############################################----------+-------+ | | ↑ | | | | | |lower_margin | | | | | ↓ | | | +----------+---------------------------------------------+----------+-------+ | | ↑ | | | | | |vsync_len | | | | | ↓ | | | +----------+---------------------------------------------+----------+-------+”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´KÙhjîh²hubhÌ)�”}”(hŒ•The frame buffer device expects all horizontal timings in number of dotclocks (in picoseconds, 1E-12 s), and vertical timings in number of scanlines.”h]”hŒ•The frame buffer device expects all horizontal timings in number of dotclocks (in picoseconds, 1E-12 s), and vertical timings in number of scanlines.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kühjîh²hubeh}”(h]”Œvideo-mode-timings”ah ]”h"]”Œ5. video mode timings”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kœubh¶)�”}”(hhh]”(h»)�”}”(hŒD6. Converting XFree86 timing values info frame buffer device timings”h]”hŒD6. Converting XFree86 timing values info frame buffer device timings”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjCh²hh³hÊh´MubhÌ)�”}”(hŒ7An XFree86 mode line consists of the following fields::”h]”hŒ6An XFree86 mode line consists of the following fields:”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjCh²hubj>)�”}”(hŒ}"800x600" 50 800 856 976 1040 600 637 643 666 < name > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL”h]”hŒ}"800x600" 50 800 856 976 1040 600 637 643 666 < name > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL”…”�”}”hjbsbah}”(h]”h ]”h"]”h$]”h&]”jMjNuh1j=h³hÊh´MhjCh²hubhÌ)�”}”(hŒ2The frame buffer device uses the following fields:”h]”hŒ2The frame buffer device uses the following fields:”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjCh²hubj3)�”}”(hX - pixclock: pixel clock in ps (pico seconds) - left_margin: time from sync to picture - right_margin: time from picture to sync - upper_margin: time from sync to picture - lower_margin: time from picture to sync - hsync_len: length of horizontal sync - vsync_len: length of vertical sync ”h]”j9)�”}”(hhh]”(j>)�”}”(hŒ*pixclock: pixel clock in ps (pico seconds)”h]”hÌ)�”}”(hj‡h]”hŒ*pixclock: pixel clock in ps (pico seconds)”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ&left_margin: time from sync to picture”h]”hÌ)�”}”(hjžh]”hŒ&left_margin: time from sync to picture”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ'right_margin: time from picture to sync”h]”hÌ)�”}”(hjµh]”hŒ'right_margin: time from picture to sync”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ'upper_margin: time from sync to picture”h]”hÌ)�”}”(hjÌh]”hŒ'upper_margin: time from sync to picture”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ'lower_margin: time from picture to sync”h]”hÌ)�”}”(hjãh]”hŒ'lower_margin: time from picture to sync”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ$hsync_len: length of horizontal sync”h]”hÌ)�”}”(hjúh]”hŒ$hsync_len: length of horizontal sync”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubj>)�”}”(hŒ#vsync_len: length of vertical sync ”h]”hÌ)�”}”(hŒ"vsync_len: length of vertical sync”h]”hŒ"vsync_len: length of vertical sync”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”j�jŽuh1j8h³hÊh´M hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´M hjCh²hubhŒenumerated_list”“”)�”}”(hhh]”(j>)�”}”(hŒNPixelclock: xfree: in MHz fb: in picoseconds (ps) pixclock = 1000000 / DCF ”h]”(hÌ)�”}”(hŒ Pixelclock:”h]”hŒ Pixelclock:”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj8ubhÌ)�”}”(hŒ xfree: in MHz”h]”hŒ xfree: in MHz”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj8ubhÌ)�”}”(hŒfb: in picoseconds (ps)”h]”hŒfb: in picoseconds (ps)”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj8ubhÌ)�”}”(hŒpixclock = 1000000 / DCF”h]”hŒpixclock = 1000000 / DCF”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj5h²hh³hÊh´Nubj>)�”}”(hŒ]horizontal timings: left_margin = HFL - SH2 right_margin = SH1 - HR hsync_len = SH2 - SH1 ”h]”(hÌ)�”}”(hŒhorizontal timings:”h]”hŒhorizontal timings:”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjzubhÌ)�”}”(hŒleft_margin = HFL - SH2”h]”hŒleft_margin = HFL - SH2”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjzubhÌ)�”}”(hŒright_margin = SH1 - HR”h]”hŒright_margin = SH1 - HR”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjzubhÌ)�”}”(hŒhsync_len = SH2 - SH1”h]”hŒhsync_len = SH2 - SH1”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj5h²hh³hÊh´Nubj>)�”}”(hŒ\vertical timings: upper_margin = VFL - SV2 lower_margin = SV1 - VR vsync_len = SV2 - SV1 ”h]”(hÌ)�”}”(hŒvertical timings:”h]”hŒvertical timings:”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj¼ubhÌ)�”}”(hŒupper_margin = VFL - SV2”h]”hŒupper_margin = VFL - SV2”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M$hj¼ubhÌ)�”}”(hŒlower_margin = SV1 - VR”h]”hŒlower_margin = SV1 - VR”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hj¼ubhÌ)�”}”(hŒvsync_len = SV2 - SV1”h]”hŒvsync_len = SV2 - SV1”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M(hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hj5h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1j3hjCh²hh³hÊh´MubhÌ)�”}”(hŒ~Good examples for VESA timings can be found in the XFree86 source tree, under "xc/programs/Xserver/hw/xfree86/doc/modeDB.txt".”h]”hŒ‚Good examples for VESA timings can be found in the XFree86 source tree, under “xc/programs/Xserver/hw/xfree86/doc/modeDB.txtâ€�.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjCh²hubeh}”(h]”ŒAconverting-xfree86-timing-values-info-frame-buffer-device-timings”ah ]”h"]”ŒD6. converting xfree86 timing values info frame buffer device timings”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ 7. References”h]”hŒ 7. References”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M/ubhÌ)�”}”(hŒzFor more specific information about the frame buffer device and its applications, please refer to the Linux-fbdev website:”h]”hŒzFor more specific information about the frame buffer device and its applications, please refer to the Linux-fbdev website:”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hjh²hubj3)�”}”(hŒ$http://linux-fbdev.sourceforge.net/ ”h]”hÌ)�”}”(hŒ#http://linux-fbdev.sourceforge.net/”h]”hŒ reference”“”)�”}”(hjDh]”hŒ#http://linux-fbdev.sourceforge.net/”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jDuh1jFhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M4hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´M4hjh²hubhÌ)�”}”(hŒ#and to the following documentation:”h]”hŒ#and to the following documentation:”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hjh²hubj3)�”}”(hŒè- The manual pages for fbset: fbset(8), fb.modes(5) - The manual pages for XFree86: XF68_FBDev(1), XF86Config(4/5) - The mighty kernel sources: - linux/drivers/video/ - linux/include/linux/fb.h - linux/include/video/ ”h]”j9)�”}”(hhh]”(j>)�”}”(hŒ1The manual pages for fbset: fbset(8), fb.modes(5)”h]”hÌ)�”}”(hjyh]”hŒ1The manual pages for fbset: fbset(8), fb.modes(5)”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M8hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjtubj>)�”}”(hŒ)�”}”(hŒmThe mighty kernel sources: - linux/drivers/video/ - linux/include/linux/fb.h - linux/include/video/ ”h]”(hÌ)�”}”(hŒThe mighty kernel sources:”h]”hŒThe mighty kernel sources:”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M:hj¥ubj3)�”}”(hŒK- linux/drivers/video/ - linux/include/linux/fb.h - linux/include/video/ ”h]”j9)�”}”(hhh]”(j>)�”}”(hŒlinux/drivers/video/”h]”hÌ)�”}”(hjÀh]”hŒlinux/drivers/video/”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M<hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj»ubj>)�”}”(hŒlinux/include/linux/fb.h”h]”hÌ)�”}”(hj×h]”hŒlinux/include/linux/fb.h”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M=hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj»ubj>)�”}”(hŒlinux/include/video/ ”h]”hÌ)�”}”(hŒlinux/include/video/”h]”hŒlinux/include/video/”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj»ubeh}”(h]”h ]”h"]”h$]”h&]”j�jŽuh1j8h³hÊh´M<hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´M<hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=hjtubeh}”(h]”h ]”h"]”h$]”h&]”j�jŽuh1j8h³hÊh´M8hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´M8hjh²hubeh}”(h]”Œ references”ah ]”h"]”Œ 7. references”ah$]”h&]”uh1hµhh·h²hh³hÊh´M/ubh¶)�”}”(hhh]”(h»)�”}”(hŒ8. Mailing list”h]”hŒ8. Mailing list”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj*h²hh³hÊh´MCubhÌ)�”}”(hŒ_There is a frame buffer device related mailing list at kernel.org: linux-fbdev@vger.kernel.org.”h]”(hŒCThere is a frame buffer device related mailing list at kernel.org: ”…”�”}”(hj;h²hh³Nh´NubjG)�”}”(hŒlinux-fbdev@vger.kernel.org”h]”hŒlinux-fbdev@vger.kernel.org”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ"mailto:linux-fbdev@vger.kernel.org”uh1jFhj;ubhŒ.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MEhj*h²hubhÌ)�”}”(hŒyPoint your web browser to http://sourceforge.net/projects/linux-fbdev/ for subscription information and archive browsing.”h]”(hŒPoint your web browser to ”…”�”}”(hj]h²hh³Nh´NubjG)�”}”(hŒ,http://sourceforge.net/projects/linux-fbdev/”h]”hŒ,http://sourceforge.net/projects/linux-fbdev/”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jguh1jFhj]ubhŒ3 for subscription information and archive browsing.”…”�”}”(hj]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhj*h²hubeh}”(h]”Œ mailing-list”ah ]”h"]”Œ8. mailing list”ah$]”h&]”uh1hµhh·h²hh³hÊh´MCubh¶)�”}”(hhh]”(h»)�”}”(hŒ9. Downloading”h]”hŒ9. Downloading”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj†h²hh³hÊh´MMubhÌ)�”}”(hŒ#All necessary files can be found at”h]”hŒ#All necessary files can be found at”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhj†h²hubj3)�”}”(hŒ1ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/680x0/ ”h]”hÌ)�”}”(hŒ0ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/680x0/”h]”jG)�”}”(hj«h]”hŒ0ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/680x0/”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j«uh1jFhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MQhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´MQhj†h²hubhÌ)�”}”(hŒand on its mirrors.”h]”hŒand on its mirrors.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj†h²hubhÌ)�”}”(hŒ+The latest version of fbset can be found at”h]”hŒ+The latest version of fbset can be found at”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhj†h²hubj3)�”}”(hŒhttp://www.linux-fbdev.org/ ”h]”hÌ)�”}”(hŒhttp://www.linux-fbdev.org/”h]”jG)�”}”(hjéh]”hŒhttp://www.linux-fbdev.org/”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jéuh1jFhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MWhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÊh´MWhj†h²hubeh}”(h]”Œ downloading”ah ]”h"]”Œ9. downloading”ah$]”h&]”uh1hµhh·h²hh³hÊh´MMubh¶)�”}”(hhh]”(h»)�”}”(hŒ 10. Credits”h]”hŒ 10. Credits”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´M[ubhÌ)�”}”(hŒ¯This readme was written by Geert Uytterhoeven, partly based on the original `X-framebuffer.README` by Roman Hodek and Martin Schaller. Section 6 was provided by Frank Neumann.”h]”(hŒLThis readme was written by Geert Uytterhoeven, partly based on the original ”…”�”}”(hj h²hh³Nh´Nubj‚)�”}”(hŒ`X-framebuffer.README`”h]”hŒX-framebuffer.README”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒM by Roman Hodek and Martin Schaller. Section 6 was provided by Frank Neumann.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj h²hubhÌ)�”}”(hŒDThe frame buffer device abstraction was designed by Martin Schaller.”h]”hŒDThe frame buffer device abstraction was designed by Martin Schaller.”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahj h²hubeh}”(h]”Œcredits”ah ]”h"]”Œ 10. credits”ah$]”h&]”uh1hµhh·h²hh³hÊh´M[ubeh}”(h]”Œthe-frame-buffer-device”ah ]”h"]”Œthe frame buffer device”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jY jV j j jjÿj¶j³j!jjëjèj@j=jjj'j$jƒj€j j jQ jN uŒ nametypes”}”(jY ‰j ‰j‰j¶‰j!‰jë‰j@‰j‰j'‰jƒ‰j ‰jQ ‰uh}”(jV h·j hÛjÿjj³jjj¹jèj$j=jîjjCj$jj€j*j j†jN j uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.