📄 写自己的frame buffer device driver - ~ 悠悠风信子 ~ - csdnblog.htm
字号:
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体>struct fb_fix_screeninfo {</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="COLOR: red"><FONT
face=宋体><SPAN> </SPAN>char id[16];<SPAN> </SPAN>/* identification string eg "TT Builtin" */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="COLOR: red"><FONT
face=宋体><SPAN> </SPAN>unsigned long smem_start;<SPAN> </SPAN>/* Start of frame buffer mem 显存的起始地址*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>/* (physical address) */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="COLOR: red"><FONT
face=宋体><SPAN> </SPAN>__u32 smem_len;<SPAN> </SPAN>/* Length of frame buffer mem 显存的大小 */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="COLOR: red"><FONT
face=宋体><SPAN> </SPAN>__u32 type;<SPAN> </SPAN>/* see FB_TYPE_*<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 type_aux;<SPAN> </SPAN>/* Interleave for interleaved Planes */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 visual;<SPAN> </SPAN>/* see FB_VISUAL_*<SPAN> </SPAN>*/ </FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u16 xpanstep;<SPAN> </SPAN>/* zero if no hardware panning<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u16 ypanstep;<SPAN> </SPAN>/* zero if no hardware panning<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u16 ywrapstep;<SPAN> </SPAN>/* zero if no hardware ywrap<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="COLOR: red"><FONT
face=宋体><SPAN> </SPAN>__u32 line_length;<SPAN> </SPAN>/* length of a line in bytes<SPAN> </SPAN>每行的字节数<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>unsigned long mmio_start;<SPAN> </SPAN>/* Start of Memory Mapped I/O<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>/* (physical address) */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 mmio_len;<SPAN> </SPAN>/* Length of Memory Mapped I/O<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 accel;<SPAN> </SPAN><SPAN> </SPAN>/* Type of acceleration available */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u16 reserved[3];<SPAN> </SPAN>/* Reserved for future compatibility */</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体>};</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>/* Interpretation of offset for color fields: All offsets are from the right,</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>* can use the offset as right argument to <<). A pixel afterwards is a bit</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>* stream and is written to video memory as that unmodified. This implies</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>* big-endian byte order if bits_per_pixel is greater than 8.</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>/*像素所占字节内,各个颜色的位分配比如RGB=888,565,555等等,*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体>struct fb_bitfield {</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 offset;<SPAN> </SPAN>/* beginning of bitfield<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 length;<SPAN> </SPAN>/* length of bitfield<SPAN> </SPAN>*/</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>__u32 msb_right;<SPAN> </SPAN>/* != 0 : Most significant bit is */ </FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体><SPAN> </SPAN>/* right */ </FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN><FONT
face=宋体>};</FONT></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>/*下面的宏也不常用*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_NONSTD_HAM<SPAN> </SPAN>1<SPAN> </SPAN>/* Hold-And-Modify (HAM)<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_NOW<SPAN> </SPAN>0<SPAN> </SPAN>/* set values immediately (or vbl)*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_NXTOPEN<SPAN> </SPAN>1<SPAN> </SPAN>/* activate on next open<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_TEST<SPAN> </SPAN>2<SPAN> </SPAN>/* don't set, round up impossible */</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_MASK<SPAN> </SPAN>15</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体><SPAN> </SPAN>/* values<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_VBL<SPAN> </SPAN><SPAN> </SPAN>16<SPAN> </SPAN>/* activate values on next vbl<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_CHANGE_CMAP_VBL<SPAN> </SPAN>32<SPAN> </SPAN>/* change colormap on vbl<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACTIVATE_ALL<SPAN> </SPAN><SPAN> </SPAN>64<SPAN> </SPAN>/* change all VCs on this fb<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_ACCELF_TEXT<SPAN> </SPAN>1<SPAN> </SPAN>/* text mode acceleration */</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_SYNC_HOR_HIGH_ACT<SPAN> </SPAN>1<SPAN> </SPAN>/* horizontal sync high active<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_SYNC_VERT_HIGH_ACT<SPAN> </SPAN>2<SPAN> </SPAN>/* vertical sync high active<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_SYNC_EXT<SPAN> </SPAN>4<SPAN> </SPAN>/* external sync<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_SYNC_COMP_HIGH_ACT<SPAN> </SPAN>8<SPAN> </SPAN>/* composite sync high active<SPAN> </SPAN>*/</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face=宋体>#define FB_SYNC_BROADCAST<SPAN> </SPAN>16<SPAN> </SPAN>/* broadcast video timings<SPAN
style="m: 0 cellPadding=0 width=" border="0"
align="center"> </SPAN></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT face=宋体><SPAN
style="m: 0 cellPadding=0 width=" border="0" align="center"><IMG
alt=""
src="写自己的frame buffer device driver - ~ 悠悠风信子 ~ - CSDNBlog.files/2006412103532526.jpg"></SPAN></FONT></SPAN></P><SPAN><FONT
face=宋体><SPAN style="m: 0 cellPadding=0 width=" border="0"
align="center"><STRONG><SPAN><FONT face="Times New Roman">
<P style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"
align=center><STRONG><SPAN><FONT
face="Times New Roman">Framebuffer</FONT></SPAN></STRONG><STRONG><SPAN>驱动程序模型</SPAN><SPAN></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"
align=center><SPAN><FONT
face="Times New Roman"></FONT></SPAN> </P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN><FONT
face="Times New Roman"> </FONT></SPAN></SPAN><SPAN>下图会向你展示目前的</SPAN><SPAN><FONT
face="Times New Roman">framebuffer</FONT></SPAN><SPAN>设备驱动的结构,最常用的是非标准驱动。很明显他所处的层次最高,程序编写是最容易的。</SPAN></P>
<P
style="MARGIN: 0cm 0cm 0pt"><SPAN>理解了这个图的,你已经很轻松的去完成一个</SPAN><SPAN><FONT
face="Times New Roman">fb</FONT></SPAN><SPAN>驱动,比如给</SPAN><SPAN><FONT
face="Times New Roman">sa1100,s2410,s2440</FONT></SPAN><SPAN>系列的</SPAN><SPAN><FONT
face="Times New Roman">ARM</FONT></SPAN><SPAN>的</SPAN><SPAN><FONT
face="Times New Roman">LCD</FONT></SPAN><SPAN>控制器写驱动。</SPAN></P><SPAN>
<P style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"
align=center><STRONG><SPAN style="FONT-SIZE: 14pt"><FONT
face="Times New Roman">Color Map </FONT></SPAN></STRONG><STRONG><SPAN
style="FONT-SIZE: 14pt">剖析</SPAN></STRONG><STRONG><SPAN
style="FONT-SIZE: 14pt"></SPAN></STRONG></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN>在</SPAN><SPAN><FONT
face="Times New Roman">framebuffer</FONT></SPAN><SPAN>驱动程序设计中,</SPAN><SPAN><FONT
face="Times New Roman">cmap</FONT></SPAN><SPAN>这个东东太晕了。现在我要把他赤裸裸的剖析给大家:)</SPAN></P>
<P
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><FONT
face="Times New Roman"><STRONG><SPAN><SPAN>1.<SPAN
style="FONT: 7pt Times New Roman"> </SPAN></SPAN></SPAN></STRONG><STRONG><SPAN>struct fb_cmap</SPAN></STRONG></FONT></P>
<P
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><FONT
face="Times New Roman"><STRONG><SPAN><SPAN><IMG alt=""
src="写自己的frame buffer device driver - ~ 悠悠风信子 ~ - CSDNBlog.files/2006412103634740.jpg"></SPAN></SPAN></STRONG></FONT></P>
<P
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><FONT
face="Times New Roman"><STRONG><SPAN><SPAN>/*<SPAN>颜色映射表</SPAN><SPAN><FONT
face="Times New Roman">*/</FONT></SPAN></SPAN></SPAN></STRONG></FONT></P>
<P style="MARGIN: 0cm 0cm 0pt"><SPAN><FONT
face="Times New Roman">struct fb_cmap {</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 0pt"><S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -