原创 3.5 LCD 驱动移植过程

2009-4-6 10:01 3980 3 6 分类: MCU/ 嵌入式

1   在arch/arm/mach-s3c2410/mach-smdk2410.c中添加
//lcd
#include <asm/arch/regs-lcd.h>
#include <asm/arch-s3c2410/fb.h>
//lcd
static struct s3c2410fb_mach_info s3c2410_lcd_info __initdata ={
  .fixed_syncs = 0,
  .regs = {
   .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
     S3C2410_LCDCON1_TFT |S3C2410_LCDCON1_CLKVAL(4),
   .lcdcon2 = S3C2410_LCDCON2_VBPD(1) |
     S3C2410_LCDCON2_VFPD(5)|S3C2410_LCDCON2_VSPW(1) ,   
   .lcdcon3 = S3C2410_LCDCON3_HBPD(36) | S3C2410_LCDCON3_HFPD(19) ,
   .lcdcon4 = S3C2410_LCDCON4_MVAL(13) | S3C2410_LCDCON4_HSPW(5),
   .lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE
     | S3C2410_LCDCON5_HWSWP | S3C2410_LCDCON5_PWREN
     |S3C2410_LCDCON5_INVVFRAME,
  },
  .lpcsel = 0x0,
  .gpccon = 0xaaaaaaaa,
  .gpccon_mask = 0xffffffff,
  .gpcup = 0xaaaaaaaa,
  .gpcup_mask = 0xffffffff,
  .gpdcon = 0x0,
  .gpdcon_mask = 0x0,
  .gpdup = 0x0,
  .gpdup_mask = 0xffffffff,
  .width = 240,
  .height = 320,
  .xres = {240,240,240},
  .yres = {320,320,320},
  .bpp = {16,16,16},
};
//lcd init
static void __init smdk2410_lcd_init(void)
{
 set_s3c2410fb_info(&s3c2410_lcd_info);
}
2   在文件最后MACHINE_END之前添加
.init_machine = smdk2410_lcd_init,
3   编译内核,选中所装驱动
#make menuconfig
Device Drivers >
       Graphics support  ---> 
            <*> support for frame buffer devices
            <*> S3C2410 LCD framebuffer support
                Logo configuration  --->  //开机画面的选择,可据个人需要更改
                   

  • Bootup logo
                       
  • Standard 224-color linux logo
    4   开机画面的选择
    首先把要开机Logo图片(png格式)放在linux2.6.14文件中的 drivers/video/logo中,终端选择进入drivers/video/logo目录,进行以下操作:
    (假设开机图片名为linux.png)
    # pngtopnm  linux.png  >  linuxlogo.pnm
    # pnmquant 224 linuxlogo.pnm  >  linuxlogo224.pnm
    # pnmtoplainpnm  linuxlogo224.pnm  >  linuxlogo224.ppm
    # mv  linuxlogo224.ppm  logo_linux_clut224.ppm  //替换原来的启动文件


    去掉10 分钟关闭LCD 的方法:
    注释掉drivers\char\vt.c 的blank_screen_t(unsigned long dummy)的函数内容,否则,lcd 会在10 分钟左右关掉显示


     


    上个图:效果不好,将就着


    点击开大图


     


    发现logo下面有个光标一只在闪,解决办法:


    gedit drivers/video/console/fbcon.c


    将static void fb_flashcursor(void *private)static 和


    void fbcon_cursor(struct vc_data *vc, int mode)
    制成空函数即可。

  • PARTNER CONTENT

    文章评论3条评论)

    登录后参与讨论

    用户1657754 2012-6-6 11:18

    LZ可以写的详细点嘛,比如遇到某个问题的时候具体的通过什么途径去解决,这样笼统的一说,读者没有什么概念。

    用户1655238 2012-6-3 13:14

    路过留影!

    用户1632198 2012-6-1 20:11

    可以多说些呀,比如楼主 是什么专业的,为什么要学这个 是兴趣还是? 然后现在就业呀 之类的 最好比较一下硬件工程师,嵌入式工程师 与这个的区别 跪求楼主指导,小弟新手~~

    用户377235 2012-5-21 20:14

    有同感……

    用户1679196 2009-3-25 08:23

    感觉上面的参数还是要根据自己调节的。

    用户1679196 2009-3-25 08:22

    hoho…… 不行的话我就不会发贴出来了…… 我博客上的都是我自己做过一遍的!手头没手机能照相…………没办法传相片。

    用户741296 2009-3-24 11:15

    能点亮吗?
    相关推荐阅读
    用户1679196 2009-09-04 16:17
    两个linux按键驱动之二 read(定时器去抖动)
    //相比之下poll更为实用,但是这个代码实在太具有代表性了...涉及了下面几个知识。代码很大部分是linux设备驱动开发详解的内容。/*1、阻塞读取,队列概念2、睡眠等待中断产生3、定时器产生及相应...
    用户1679196 2009-09-04 16:08
    两个linux按键驱动之一 poll(未去抖动)
    //驱动//未加去抖动//通过poll判断是否可读来得到中断值#include <linux/module.h> #include <linux/kernel.h>#inclu...
    用户1679196 2009-09-04 09:39
    select 使用
    以下来自网络搜索:Linux下select调用的过程:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi...
    用户1679196 2009-09-03 14:52
    Linux设备驱动之定时器
    Linux内核中定义了一个timer_list结构,我们在驱动程序中可以利用之: #include<linux/timer.h> struct timer_list { struct li...
    用户1679196 2009-08-28 17:38
    loff_t *ppos是什么东东
    ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos) 这是一个文件读函数 我们很容...
    用户1679196 2009-08-12 17:30
    linux 延时函数几个资料
    http://www.cppblog.com/CppExplore/archive/2008/04/02/46111.html一、 基础知识1、时间类型。Linux下常用的时间类型有4个:time_t...
    EE直播间
    更多
    我要评论
    3
    3
    关闭 站长推荐上一条 /3 下一条