Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动

发布者:EnchantingEyes最新更新时间:2016-12-04 来源: eefocus关键字:Linux  内核  mini2440  移植  LCD背光驱动 手机看文章 扫描二维码
随时随地手机看文章

移植环境 

1,主机环境:VMare下CentOS 5.5 ,1G内存。

2,集成开发环境:Elipse IDE

3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。

4,开发板:mini2440,2M nor flash,128M nand flash。

5,u-boot版本:u-boot-2009.08

6,linux 版本:linux-2.6.32.2

7,参考文章:

嵌入式linux应用开发完全手册,韦东山,编著。

Mini2440 之Linux 移植开发实战指南

到目前为止,我们一直都在命令行下移植,查看结果,LCD 屏幕上似乎总是如伸手不见五指的黑夜,神秘而又无可奈何,从这里开始,我们就要打开这道神秘之门了。

【1】LCD 背光控制原理

在 mini2440/micro2440 开发板中,LCD 背光是通过CPU 的LCD_PWR 引脚来控制的,从原理图中可以看出,它对应于GPG4,如图

Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动 - singleboy - singleboy的博客

当LCD_PWR 输出为高电平“1”时,将打开背光;当输出为低电平“0”时,将关闭背光(注意:这里只是打开和关闭背光,而并没有背光亮度的调节作用)。

【2】 在内核中添加背光驱动程序

现在,我们需要增加一个简单的背光驱动,以便能够通过软件便可简单的控制背光的开关。我们要达到的目的是:在命令终端通过向背光设备发送偶数比如“0”便可关闭背光,发送奇数比如“1”便可打开背光,这样使用起来就方便多了,而不需要专门的应用程序控制它,正如在用户手册中所描述的方法(2.5.10 控制LCD 的背光):
提示:LCD 背光设备文件:/dev/backlight
在命令行种输入:echo 0 > /dev/backlight 可以关闭LCD 背光。
在命令行种输入:echo 1 > /dev/backlight 可以打开LCD 背光。
为了实现这点,我们在linux-2.6.32.2/drivers/video/backlight 目录增加一个mini2440_backlight.c文件,内容如下:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include
#include
#include

#define DEVICE_NAME "backlight" //设备名称
#define DEVICE_MINOR 5 //次设备号,这里我们将设备注册为misc设备,这种设备的主设备号都为10

extern void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
extern void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);

static int mini2440_backlight_ioctl(struct inode *inode, 
                                  struct file *file, 
                                  unsigned int cmd, 
                                  unsigned long arg)
{
   switch(cmd)
     {
        case 0:

            //当接收的命令为0时,就将GPG4引脚设为低电平,关闭背光
            s3c2410_gpio_setpin(S3C2410_GPG(4), 0); 
            printk(DEVICE_NAME " turn off!\n");
            return 0;
        case 1:

            //当接收的命令为1时,就将GPG4引脚设为高电平,开启背光
            s3c2410_gpio_setpin(S3C2410_GPG(4), 1); 
            printk(DEVICE_NAME " turn on!\n");
            return 0;
        default:
            return -EINVAL;
     }
}

static struct file_operations dev_fops = 
{
    .owner = THIS_MODULE,
    .ioctl = mini2440_backlight_ioctl, //这里只使用控制IO口的方式来控制背光
};

static struct miscdevice misc =
{
    .minor = DEVICE_MINOR,
    .name = DEVICE_NAME,
    .fops = &dev_fops,
};

static int __init dev_init(void)
{
   int ret;
   ret = misc_register(&misc); //注册成misc设备
   if(ret < 0)
     {
        printk("Register misc device fiald!");
        return ret;
     }

     //将GPG4口配置成输出口
    s3c2410_gpio_cfgpin(S3C2410_GPG(4), S3C2410_GPIO_OUTPUT); 
    return ret;
}

static void __exit dev_exit(void)
{
    misc_deregister(&misc); //注销该misc设备
}

module_init(dev_init);
module_exit(dev_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("singleboy");
MODULE_DESCRIPTION("Backlight control for mini2440");

【3】把背光配置选项加入内核配置菜单

打开linux-2.6.32.2/drivers/video/backlight/Kconfig,定位到1929行附近,加入如下代码:

#
# Backlight & LCD drivers configuration
#

menuconfig BACKLIGHT_LCD_SUPPORT
 bool "Backlight & LCD device support"
 help
   Enable this to be able to choose the drivers for controlling the
   backlight and the LCD panel on some platforms, for example on PDAs.

#在里加入MINI2440 的背光驱动配置
config BACKLIGHT_MINI2440
 tristate "Backlight support for mini2440 from FriendlyARM"
 depends on BACKLIGHT_LCD_SUPPORT
 help
 backlight driver for MINI2440 from FriendlyARM

#
# LCD
#
config LCD_CLASS_DEVICE

再打开 linux-2.6.32.2/drivers/video/backlight/Makefile,定位到文件末尾,根据配置定义加入驱动目标文件,如下:

obj-$(CONFIG_BACKLIGHT_ADP5520) += adp5520_bl.o
obj-$(CONFIG_BACKLIGHT_MINI2440) += mini2440_backlight.o

这样,我们就在内核中移植好了 mini2440 的背光驱动。

【4】在内核配置菜单中确认 "Backlight support for mini2440 from FriendlyARM",被选中。

在内核源代码根目录执行:
make menuconfig,依次选择如下子菜单:

Device Drivers --->
Graphics support --->
 [*] Backlight & LCD device support  --->

就可以找到该配置选项,如图

Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动 - singleboy - singleboy的博客

 

在这里,如果没有被选中,按空格选中我们刚刚加入的mini2440 配置项,然后退出时保存内核配置菜单,在命令行执行:make uImage

将生成的arch/arm/boot/uImage复制到/nfsboot目录下,然后启动开发板,可以在启动时看到LCD屏显示的企鹅图像,这说明我们已经点亮了背光。

【5】编写测试程序linux-test/codetest/backlight_test.c,代码如下:

#include
#include
#include
#include

int main(int argc, char **argv)
{
    int turn;
    int fd;
    
    //检测命令后面带的参数
    if(argc == 1 || argc > 2)
    {
        printf("Usage: backlight_test on|off!\n");
        exit(1);
    }
    
    //打开背光设备
    fd = open("/dev/backlight", O_RDWR);
    
    if(fd < 0)
    {
        printf("Open Backlight Device Faild!\n");
        exit(1);
    }
    
    //判断输入的参数
    if(strcmp(argv[1], "on") == 0)
    {
        turn = 1;
    }
    else if(strcmp(argv[1], "off") == 0)
    {
        turn = 0;
    }
    else
    {
        printf("Usage: backlight_test on|off!\n");
        exit(1);
    }
    
    //进行IO控制
    ioctl(fd, turn);

    //关闭背光设备
    close(fd);

    return 0;
}

然后保存退出,之后在主机终端交叉编译

[root@localhost codetest]# arm-linux-gcc -o backlight_test backlight_test.c

将其复制到nfsboot目录下以便在开发板挂载该目录后能够执行

[root@localhost codetest]# cp backlight_test /nfsboot/nfs

【6】挂载nfs文件系统

在目标板的串口终端中执行

[root@mini2440 /mnt]#mkdir nfs
[root@mini2440 /mnt]#ls
data   etc    jffs2  nfs    temp   yaffs

[root@mini2440 /]#mount -o nolock -t nfs 10.1.0.128:/nfsboot/nfs /mnt/nfs  //注意要加 -o nolock参数,否则挂载不上。

[root@mini2440 /]#cd mnt/nfs
[root@mini2440 nfs]#ls
backlight_test   

【7】运行测试程序

[root@mini2440 nfs]#./backlight_test

[root@mini2440 nfs]#./backlight_test --help
Usage: backlight_test on|off!
[root@mini2440 nfs]#

[root@mini2440 nfs]#./backlight_test off
backlight turn off! //观察LCD屏,看到背光灯灭了
[root@mini2440 nfs]#./backlight_test on
backlight turn on! //观察LCD屏,看到背光灯亮了
[root@mini2440 nfs]#./backlight_test off
backlight turn off! //观察LCD屏,看到背光灯又灭了
[root@mini2440 nfs]#./backlight_test on
backlight turn on!  //观察LCD屏,看到背光灯亮了

只不过LCD 驱动还有些问题,下一节我们将会详细的介绍如何移植LCD 驱动。


关键字:Linux  内核  mini2440  移植  LCD背光驱动 引用地址:Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动

上一篇:Linux-2.6.32.2内核在mini2440上的移植(七)---LCD驱动移植
下一篇:Linux-2.6.32.2内核在mini2440上的移植(五)---激活RTC驱动

推荐阅读最新更新时间:2024-03-16 15:23

STM32学习——uCGUI移植
第一部分:在UCGUI移植之前 在移植之前,首先要了解在网上下的UCGUI 3.98源码的文件结构是。 UCGUI 3.98源码中有三个文件夹: 1)“tool文件夹”是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的. 2)“sample文件夹”下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能. 3)“Start文件夹”里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以
[单片机]
ARM在嵌入式linux内核裁剪与移植的应用
微处理器用一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器与传统的中央处理器相比,具有体积小,重量轻和容易模块化等优点。微处理器的基本组成部分有:寄存器堆、运算器、时序控制电路,以及数据和地址总线。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的
[单片机]
Imagination发布PowerVR Series8XT IP内核
2017年5月11日 ─Imagination Technologies 发布第一款以其最新的PowerVR Furian架构为基础的GPU IP内核 ─ Series8XT GT8525。Furian专为推动新一代的消费性设备所设计,能以移动功耗的预算提供长时间的高解析度、沉浸式图形内容以及数据运算功能。双集簇(two-cluster)GT8525可提供同类领先的性能、功耗与面积,以及独特的特性,以协助客户设计出适用于高端智能手机与平板电脑、中端专用型VR与AR设备、以及中级到高级的车用信息娱乐与ADAS系统等产品的SoC。 Imagination公司PowerVR产品及技术营销高级总监Chris Longstaff表示:
[嵌入式]
Imagination发布PowerVR Series8XT IP<font color='red'>内核</font>
英特尔近期将推出3.0GHz四内核服务器CPU
2月23日消息,英特尔官员在本星期与分析师举行的电话会议上表示,英特尔将按计划推出3.0GHz版本的四内核“Clovertown”服务器处理器以及采用45纳米工艺制造的双内核Xeon处理器。 据eweek.com网站报道,英特尔官员在2月21日与分析师召开的电话会议上还表示,英特尔在今后几个星期还将推出低耗能的四内核服务器处理器。这种处理器的耗电量只有50瓦。不过,英特尔没有提供发布这种处理器的具体日期。 英特尔发言人在随后的采访中对eWEEK网站说,我们将在未来几个星期推出低耗能的四内核Xeon处理器。 自从去年11月推出四内核Xeon处理器以来,英特尔一直给竞争对手AMD施加了很大的压力。据市场研究公司Mercury Re
[焦点新闻]
FreeRTOS移植-基于STM32F407
首先新建或找一个基于Keil的STM32基础工程,这里我已经创建好了一个STM32F407VET6的工程模板,工程结构如下图的第1步的矩形框内所示。 下面需要移植FreeRTOS了,将FreeRTOS的源码文件复制到工程文件夹中,一些用不到的文件可删除(哪些文件需要用到可参考 上一篇的源码结构分析部分),然后在Keil中也创建一个FreeRTOS目录,将c文件添加进工程,注意port.c来自于RDVS的ARM_CM4F,对应于移植到的SMT32F407硬件。 添加完c文件后,还要添加对应的h文件的搜寻路径,具体如下: 然后就可以编译了,先进行第1次编译: ......(省略显示若干行) FreeRTOSportabl
[单片机]
FreeRTOS<font color='red'>移植</font>-基于STM32F407
μC/OS-III在Cortex-M3处理器上的移植
引言 μC/OS-III是一款基于优先级调度的抢占式实时内核,Micrium公司于2011年8月公开了μC/OS-III的源码,其源码遵循ANSIC标准,因而具有良好的移植性,相信其将会被移植到越来越多的处理器体系上。本文主要完成基于Cortex-M3处理器的μC/OS-III移植,通过本次移植,加深对嵌入式操作系统原理的理解。此外,在μC/OS-III移植成功的基础上进行嵌入式应用程序开发,可以把主要精力集中到应用程序上,而硬件资源交由μC/OS-III管理,从而使得嵌入式应用程序更易开发和维护,在嵌入式软硬件结构变得越来越复杂的今天具有现实意义。 1 μC/OS-III和Cortex-M3特点 相对以前的版本,μC/O
[单片机]
μC/OS-III在Cortex-M3处理器上的<font color='red'>移植</font>
USB设备驱动移植之U盘挂载
移植环境 BootLoader:u-boot-1.1.6 kernel:linux-2.6.30.4 CPU:S3C2440 移植步骤 在linux-2.6.30.4内核中,已经支持 U 盘,USB 鼠标键盘了,这里只需要进行对应的配置,然后就可以完成对它们的支持。 1、内核的配置 #make menuconfig,然后进入配置单,配置如下: Device Drivers — SCSI device support — * SCSI device support legacy /proc/scsi/ support * SCSI disk support * SCSI CDROM support HID
[单片机]
USB设备驱动<font color='red'>移植</font>之U盘挂载
基于嵌入式ARM Linux步进电机驱动程序的设计
0 引言 随着激光雕刻机的不断发展和改进,嵌入式Linux的激光雕刻机比CNC(Computer numerical control)激光雕刻的优势不断显现,它大幅度提高了处理能力,方便了设计开发,节约了成本,是未来经济型激光雕刻机发展的趋势。而嵌入式ARM(Advanced RISC Machines)Linux步进电机驱动是实现激光雕刻的核心。 嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素较多,实现过程较为复杂。本文以Samsung公司的友善之譬S3C2440开发板为例,探讨如何使用嵌入式Linux开发字符设备驱动程序来驱动步进
[单片机]
基于嵌入式ARM <font color='red'>Linux</font>步进电机驱动程序的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved