修改嵌入式linux驱动支持不同的LCD

本文中使用的是周立功EPC-287开发板,其中处理器是Freescale ARM9 i.MX287。厂家提供的linux内核源码包含了几种支持的lcd,在内核源码目录下通过make ARCH=arm menuconfig查看内核配置项,进入Device Drives-->Graphics support-->MXS Frambuffer driver-->Select i.MXS PANEL LCD VGA LVDS

如下图所示,已经默认支持四种格式的LCD,屏幕尺寸是4.3寸和7寸。

1.如果要添加自己的LCD,可以先改一下内核目录下的Kconfig文件,Kconfig在内核源码目录/drivers/video/mxs/Kconfig。如果我要添加一个5.6寸的LCD,打开Kconfig文件在 endchoice之前添加如下内容

config MY56LCD
    bool "MY56LCD"
        depends on FB_MXS

重新使用make ARCH=arm menuconfig进入内核配置界面,可以看到刚才加入的配置项了,选中MY56LCD,如下图。

2.修改驱动文件

驱动文件在linux-2.6.35.3/drivers/video/mxs/lcd_43wvf1g.c,还有别的.c文件,为什么修改lcd_43wvf1g.c这是由Makefile文件决定的,也可以使用别的.c文件,在Makefile中做对应的修改 就行了。打开lcd_43wvf1g.c,添加如下内容

#ifdef CONFIG_MY56LCD'
#define LCM_NAME "MY56LCD"
#define DOTCLK_FREQUENCY_HZ   9000000
#define DOTCLK_H_ACTIVE 640 
#define DOTCLK_H_PULSE_WIDTH  41
#define DOTCLK_HF_PORCH  5
#define DOTCLK_HB_PORCH  5
#define DOTCLK_V_ACTIVE 480
#define DOTCLK_V_PULSE_WIDTH 20
#define DOTCLK_VF_PORCH  5
#define DOTCLK_VB_PORCH  5
#define LCD_PANEL_TYPE   MXS_LCD_PANEL_DOTCLK            // DE模式
#endif

上面定义了LCD的各项参数像分辨率,刷新频率等,可以根据LCD厂家提供的文档来确定。

3.编译内核

编译内核时如果没有在顶层Makefile中指定ARCH和CROSS_COMPILE,可以使用下面的命令编译:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

如果已经在Makefile中指定了ARCH和CROSS_COMPILE,可以直接make uImage。

编译完成如果出现提示:

"mkimage" command not found - U-Boot images will not be built

这是应为没有安装u-boot-tools,执行

sudo apt-get install u-boot-tools

安装完成以后重新执行命令:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

可以在arch/arm/boot/目录下生成uImage文件。

4.烧写内核

我所使用的开发板支持usb、tftp烧写内核,tftp速度更快,通常使用tftp烧写。开发板上电后一直按着空格,等到进入u-boot命令行以后执行

run upkernel

等待烧写完成,重启开发板就能看到更新后的效果了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章