zoukankan      html  css  js  c++  java
  • LCD背光驱动(字符设备)在FL2440的开发(2.6.33.7内核)

    一、开发环境
        主   机:fedora 14 (2.6.33.7)
        开发板:FL2440(nandflash:K9F1G08 128m)
        编译器:arm-linux-gcc 4.3.2
     
    二、原理分析
        硬件原理图分析。由原理图得知LCD的背光是由2440的GPG4口控制的,只要往GPG4口写入高电平,(1)则背光打开,写入低电平(0)则背光关闭。
     
     
    三、实现步骤
        1. 编写背光驱动。文件名为fl2440_backlight.c
    1. /*
    2.  *==============================================
    3.  *Name : fl2440_backlight.c
    4.  *Author : y.q.yang
    5.  *Date : 17/2/2011
    6.  *Copyright : GPL
    7.  *Description : fl2440 lcd backlight driver
    8.  *==============================================
    9.  */
    10. #include <linux/kernel.h>
    11. #include <linux/module.h>
    12. #include <linux/init.h>
    13. #include <linux/errno.h>
    14. #include <mach/hardware.h>
    15. #include <mach/regs-gpio.h>
    16. #include <mach/gpio-fns.h>
    17. #include <mach/gpio-nrs.h>
    18. #define DEVICE_NAME     “fl2440_backlight”
    19. #define DEVICE_MAJOR    230
    20. #define BL_OFF          0
    21. #define BL_ON           1
    22. #define S3C2410_GPIONO(bank,offset) ((bank) + (offset))
    23. #define S3C2410_GPIO_BANKG (32*6)
    24. #define S3C2410_GPG4 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 4)
    25. static int bl_open(struct inode *inode, struct file *filp)
    26. {
    27.     return 0;
    28. }
    29. static int bl_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
    30. {
    31.     if(cmd<|| cmd>1)
    32.     {
    33.         return -EINVAL;
    34.     }  
    35.     switch(cmd)
    36.     {
    37.         case BL_ON:
    38.         {
    39.             s3c2410_gpio_setpin(S3C2410_GPG4,BL_ON);
    40.             printk(DEVICE_NAME ” turn on! ”);
    41.             break;
    42.         }
    43.         case BL_OFF:
    44.         {
    45.             s3c2410_gpio_setpin(S3C2410_GPG4,BL_OFF);
    46.             printk(DEVICE_NAME ” turn off! ”);
    47.             break;
    48.         }
    49.         default:
    50.             printk(“cmd default! ”);
    51.             return -EINVAL;
    52.     }
    53.     
    54.     return 0;
    55. }
    56. struct file_operations bl_fops =
    57. {
    58.     .owner = THIS_MODULE,
    59.     .open = bl_open,
    60.     .ioctl = bl_ioctl,
    61. };
    62. static int __init bl_init(void)
    63. {
    64.     int ret;
    65.     
    66.     s3c2410_gpio_cfgpin(S3C2410_GPG4, 0×1 << 8);
    67.         
    68.     s3c2410_gpio_setpin(S3C2410_GPG4, BL_ON);
    69.     
    70.     ret = register_chrdev(DEVICE_MAJOR, DEVICE_NAME, &bl_fops);
    71.     
    72.     if(ret<0)
    73.     {
    74.         printk(“register failed! ”);
    75.         return ret;
    76.     }
    77.     return ret;
    78. }
    79. static void __exit bl_exit(void)
    80. {
    81.     unregister_chrdev(DEVICE_MAJOR, DEVICE_NAME);
    82. }
    83. module_init(bl_init);
    84. module_exit(bl_exit);
    85. MODULE_LICENSE(“GPL”);
    86. MODULE_AUTHOR(“y.q.yang”);
    87. MODULE_DESCRIPTION(“FL2440 backlight driver”);
        2. 把背光驱动代码部署到内核中去
    • #cp -f fl2440_backlight./linux-2.6.33.7/drivers/char //把驱动源码复制到内核驱动的字符设备下
    • #vim /linux-2.6.33.7/drivers/char/Kconfig //添加LCD背光设备配置
    • config FL2440_BACKLIGHT
    •     tristate “FL2440 Backlight Device”
    •     depends on ARCH_S3C2440
    •     default y
    •     ---help---
    •       FL2440 User Backlight
    • #vim /linux-2.6.33.7/drivers/char/Makefile //添加LCD背光设备配置
    • obj-$(CONFIG_FL2440_BACKLIGHT) += fl2440_backlight.o

        3. 配置内核,选择LCD背光设备选项

    1. #make menuconfig
    2. Device Drivers --->
    3.     Character devices --->
    4.         <*> FL2440 Backlight Device (NEW)

        4. 编译内核并下载到开发板上,查看已加载的设备:#cat /proc/devices,可以看到fl2440_backlight的主设备号为230

    1. 90 mtd
    2.  99 ppdev
    3. 116 alsa
    4. 128 ptm
    5. 136 pts
    6. 180 usb
    7. 188 ttyUSB
    8. 189 usb_device
    9. 204 s3c2410_serial
    10. 230 fl2440_backlight
    11. 231 fl2440_leds
    12. 232 fl2440_buttons
    13. 254 rtc
    14. Block devices:
    15.   1 ramdisk
    16. 259 blkext

    四、测试驱动

        1. 编写应用程序测试LED驱动,文件名:bl_test.c

    1. /*
    2.  *==============================================
    3.  *Name   : bl_test.c
    4.  *Author : y.q.yang
    5.  *Date   : 17/2/2011
    6.  *Copyright : GPL
    7.  *Description : fl2440 lcd backlight test
    8.  *==============================================
    9.  */
    10. #include <stdio.h>
    11. #include <stdlib.h>
    12. #include <fcntl.h>
    13. #include <sys/ioctl.h>
    14. int main(int argc, char **argv)
    15. {
    16.     int turn,fd;
    17.     
    18.     if(argc == 1 || argc >2)
    19.     {
    20.         printf(“Usage: bl_test on|off ”);
    21.         exit(1);        
    22.     }
    23.     
    24.     fd = open(“/dev/fl2440_backlight”, 0);
    25.     
    26.     if(fd<0)
    27.     {
    28.         printf(“Open backlight device failed! ”);
    29.         exit(1);
    30.     }
    31.     
    32.     if(strcmp(argv[1], “on”) == 0)
    33.     {
    34.         turn = 1;
    35.     }
    36.     else if(strcmp(argv[1], “off”) == 0)
    37.     {
    38.         turn = 0;
    39.     }
    40.     else
    41.     {
    42.         printf(“Usage: bl_test on|off ”);
    43.      exit(1);    
    44.     }
    45.     
    46.     ioctl(fd,turn);
    47.     
    48.     close(fd);
    49.     
    50.     return 0;
    51. }

         2. 在开发主机上交叉编译测试应用程序,并复制到文件系统的/usr/sbin目录下,然后重新编译文件系统下载到开发板上

    1. #arm-linux-gcc -o bl_test bl_test.c

        3. 在开发板上的文件系统中创建一个背光设备的节点,然后运行测试程序,效果图如下,观测开发板上的LED灯,可以看到每一步的操作对应的LCD液晶屏会点亮或者熄灭

      [root@yyq2440 /]# mknod /dev/fl2440_backlight c 230 0
    1. [root@yyq2440 /]# bl_test –help
    2. Usage: bl_test on|off
    3. [root@yyq2440 /]# bl_test off
    4. fl2440_backlight turn off
    5. [root@yyq2440 /]# bl_test on
    6. fl2440_backlight turn on

    五、补充问题

        暂无

    From: http://www.w3c.com.cn/lcd%E8%83%8C%E5%85%89%E9%A9%B1%E5%8A%A8%E5%AD%97%E7%AC%A6%E8%AE%BE%E5%A4%87%E5%9C%A8fl2440%E7%9A%84%E5%BC%80%E5%8F%912-6-33-7%E5%86%85%E6%A0%B8

  • 相关阅读:
    【题解】一本通例题 S-Nim
    【题解】一本通例题 取石子游戏
    【题解】[USACO09NOV]A Coin Game S
    【题解】取火柴游戏
    【题解】CF375D Tree and Queries
    Linux sudo用户提权与日志审计
    No space left on device
    CentOS下多种方法显示文本行号
    Python之行-01之初识python
    约瑟夫问题
  • 原文地址:https://www.cnblogs.com/ganrui/p/3706197.html
Copyright © 2011-2022 走看看