Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7688645
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2010-12-18 15:29:28

内核里已经有很完善的LCD 驱动了,只要根据所用的LCD 进行简单的修改,在内核源码drivers/video/s3c2410fb.c LCD 驱动的源码,首先要设置LCD 的时钟频率,有一个计算公式,很复杂,不用管它,直接修改程序实现。在第365 行开始的函数:

static void s3c2410fb_activate_var(struct fb_info *info)

{

struct s3c2410fb_info *fbi = info->par;

void __iomem *regs = fbi->io;

int type = fbi->regs.lcdcon1 & S3C2410_LCDCON1_TFT;

struct fb_var_screeninfo *var = &info->var;

struct s3c2410fb_mach_info *mach_info = fbi->dev->platform_data;

struct s3c2410fb_display *default_display = mach_info->displays + mach_info->default_display;

int clkdiv = s3c2410fb_calc_pixclk(fbi, var->pixclock) / 2;

dprintk("%s: var->xres = %d\n", __func__, var->xres);

dprintk("%s: var->yres = %d\n", __func__, var->yres);

dprintk("%s: var->bpp = %d\n", __func__, var->bits_per_pixel);

if (type == S3C2410_LCDCON1_TFT) {

s3c2410fb_calculate_tft_lcd_regs(info, &fbi->regs);

--clkdiv;

if (clkdiv < 0)

clkdiv = 0;

} else {

s3c2410fb_calculate_stn_lcd_regs(info, &fbi->regs);

if (clkdiv < 2)

clkdiv = 2;

}

// fbi->regs.lcdcon1 |= S3C2410_LCDCON1_CLKVAL(clkdiv);

fbi->regs.lcdcon1 |=S3C2410_LCDCON1_CLKVAL(default_display->setclkval);

这几句是在s3c2410fb_display 结构体中加入了setclkval 变量,我们需要在结构体原型中加入这个变量,在arch/arm/mach-s3c2410/include/mach/fb.h 中第40 行加入:unsigned setclkval; /*clkval*/

 

修改LCD 参数配置:(这个要查看所用LCD 的手册来确定参数)修改arch/arm/mach-s3c2440/mach-smdk2440.c 中第107 行的结构体,我修改的参数如下:

static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

.lcdcon5 = S3C2410_LCDCON5_FRM565 |

S3C2410_LCDCON5_INVVLINE |

S3C2410_LCDCON5_INVVFRAME |

S3C2410_LCDCON5_PWREN |

S3C2410_LCDCON5_HWSWP,

 

.type = S3C2410_LCDCON1_TFT,

 

.width = 320,

.height = 240,

 

.pixclock = 100000, /* HCLK 60 MHz, divisor 10 */

.setclkval = 0x3, /*add by xgc*/

.xres = 320,

.yres = 240,

.bpp = 16,

.left_margin = 19,

.right_margin = 24,

.hsync_len = 44,

.upper_margin = 7,

.lower_margin = 5,

.vsync_len = 15,

};

 

屏蔽掉第150 行的语句:

// .lpcsel = ((0xCE6) & ~7) | 1<<4,

 

配置内核,支持LCD

Device Drivers:

Graphics Support --->

<*>support for frame buffer devices --->

[*] Enable frameware EDID

[*] Enable Vidoe Mode Handling Helpers

<*> S3C24X0 LCD framebuffer support

Console display driver support --->

<*> Framebuffer Console Support

[*] Bootup Logo --->

<*> Standard 224-color Linux logo

 

补丁文件

文件: linux-2.6.31.LCD.rar
大小: 163KB
下载: 下载

 

 

制作开机LOGO

drivers/video/logo/logo_linux_clut224.ppm 是默认的启动LOGO 图片,格式为ppm,把自己的LOGO 图片(png 格式)转换成ppm 格式,替换这个文件,同时删除logo_linux_clut224.c logo_linux_clut224.o 文件,重新编译

 

方法、步骤

RedHat9 自带的图片编辑工具GIMP

找一个任意格式的图片(JPGBMP 之类的),在图形界面中,右键单击这个图片,选“打开方式->The GIMP”,第一次打开需要安装GIMP 软件,安装完后自动运行GIMP,这是一个很强大的图像处理工具,可称为Linux 下的photoshop

右键单击窗口中的图片选“图像->模式->索引”,把颜色数改为:224(这步很重要)。其他的都默认,OK 后右键“文件->Save As”,保存为ppm 格式的文件,确定后弹出一个对话框,选择AsciiOK 后,GIMP 会把图片转换成ppm 格式,把这个文件复制到logo 文件夹中就可以了

 

启动时输出:

Console: switching to colour frame buffer device 40x30

fb0: s3c2410fb frame buffer device

 

去除LCD 左上角的闪烁光标

系统启动后在LCD 的左上角会有光标闪烁,如果觉得光标碍事,可以把它去掉。方法:修改 drivers/video/console/fbcon.c 文件

367 static void fb_flashcursor(void *private)static

1263 void fbcon_cursor(struct vc_data *vc, int mode)

这两个函数中的内容注释掉(保留函数名,清空函数内容)

 

阅读(1624) | 评论(0) | 转发(4) |
0

上一篇:U boot-1.3.2(UP-2410)

下一篇:DM9000 驱动的移植

给主人留下些什么吧!~~