柚子快报激活码778899分享:fbset与fb

http://yzkb.51969.com/

转自:http://cnlearn.linksprite.com/?p=7372

Posted by: admin , 九月 12, 2014

 

柚子快报激活码778899分享:fbset与fb  第1张

Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:

/* include/linux/fb.h */

struct fb_videomode {const char *name;     /* optional */u32 refresh;          /* optional */u32 xres;u32 yres;u32 pixclock;u32 left_margin;u32 right_margin;u32 upper_margin;u32 lower_margin;u32 hsync_len;u32 vsync_len;u32 sync;u32 vmode;u32 flag;};

/* include/linux/amba/clcd.h */

struct clcd_panel {struct fb_videomode     mode;signed short          width;     /* width in mm */signed short          height;     /* height in mm */u32                       tim2;u32                       tim3;u32                        cntl;unsigned int             bpp:8,fixedtimings:1,grayscale:1;unsigned int           connector;};

可以看出来,里面很重要的是fb_videomode,先科普一下fb_videomode各个参数的意义:

 

名称

在数据手册中的简称

中文名

意义

备注

name

No

名字

液晶屏名字(可选)

No

refresh

No

刷新频率

刷新频率(内核中很多例子都赋值为60)

No

xres

No

行宽

每行的像素个数

No

yres

No

屏幕高度

屏幕的行数

No

pixclock

No

像素时钟

每个像素时钟周期的长度,单位是皮秒(10的负12次方分之1秒)

No

left_margin

HBP  (Horizontal Back Porch)

水平后沿

在每行或每列的象素数据开始输出时要插入的象素时钟周期数

No

right_margin

HFP (Horizontal Front Porch )

水平前沿

在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数

No

upper_margin

VBP (Vertical Back Porch)

垂直后沿

在垂直同步周期之后帧开头时的无效行数

No

lower_margin

VFP (Vertical Front Porch)

垂直前沿

本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数

No

hsync_len

HPW  (HSYNC plus width)

行同步脉宽

单位:像素时钟周期

也有手册简称为HWH(HSYNC width)

vsync_len

VPW (VSYNC width)

垂直同步脉宽

单位:显示一行的时间th

也有手册简称为VWH(VSYNC width)

sync

No

同步极性设置

可以根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)

No

vmode

No

No

在内核中的大多数示例都直接置为FB_VMODE_NONINTERLACED。interlaced的意思是交错[隔行]扫描,电视中使用2:1的交错率, 即每帧分两场,垂直扫描两次,一场扫描奇数行,另一场扫描偶数行。很显然LCD目前不是这种模式。

No

flag

No

No

目前没有看到用法

No

说明:

(1)Linux对LCD的抽象是以图像为中心的,而LCD手册则以同步信号为中心,所以内核中的left_margin是指在每一行之前(前面自然对应左边)的空闲周期数,而它对应LCD数据手册中的水平后沿(HBP  Horizontal Back Porch),是指在行同步信号之后的空闲周期。参照物不同而已,但是说的是同一个东西。

(2)水平同步信号有时也成为行同步型号,垂直同步信号有人称为场同步信号。

(3)对于LCD的frambuffer抽象模型请参考内核中的文档:Documention/fb/frambuffer.txt。

(4)fb_videomode各个成员的用处是我自己参照内核代码中的include/linux/amba/clcd.h中的clcdfb_decode()函数总结的,不保证护绝对正确。

好了,现在来看个实际的,我先把各个参数的值从内核中打印出来:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

root@ubuntu:~# fbset -a "1920x1080-50"

[   47.631053] new_mode.refresh;      = 50

[   47.631056] new_mode.xres;         = 1920

[   47.631060] new_mode.yres;         = 1080

[   47.631063] new_mode.pixclock;     = 6734

[   47.631067] new_mode.left_margin; = 148

[   47.631070] new_mode.right_margin;= 528

[   47.631074] new_mode.upper_margin;= 36

[   47.631077] new_mode.lower_margin;= 4

[   47.631080] new_mode.hsync_len;   = 44

[   47.631083] new_mode.vsync_len;   = 5

[   47.631086] new_mode.sync;         = 3

[   47.631089] new_mode.vmode;    = 0

[   47.631093] new_mode.flag;         = 32

在看看fbset的值:

?

1

2

3

4

5

6

7

8

9

10

11

root@ubuntu:~# fbset

 

mode "1920x1080-50"

    # D: 148.500 MHz, H: 56.250 kHz, V: 50.000 Hz

    geometry 1920 1080 1920 1629 32

    timings 6734 148 528 36 4 44 5

    hsync high

    vsync high

    accel true

    rgba 0/0,0/0,0/0,0/0

endmode

下面看看怎么计算的:

pixclock={(xres+left_margin+right_margin+hsync_len) x (yres+upper_margin+lower_margin+vsync_len) x refresh }/1

对应参数看看:

{(1920+148+528+44)x (1080+36 +4+5) x 50}/1

=(2640 x 1125 x 50 )/1

=(2970000×50)/1

=148500000/1

=6.7340067340067340067340067340067e-9 ≈ 6.734

也就是pixclock/1000;

柚子快报激活码778899分享:fbset与fb

http://yzkb.51969.com/

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。