码迷,mamicode.com
首页 > 其他好文 > 详细

LCD背光驱动(字符设备)在FL2440的开发(2.6.33.7内核)

时间:2014-05-04 20:34:02      阅读:409      评论:0      收藏:0      [点我收藏+]

标签:des   blog   class   code   tar   ext   

一、开发环境
    主   机:fedora 14 (2.6.33.7)
    开发板:FL2440(nandflash:K9F1G08 128m)
    编译器:arm-linux-gcc 4.3.2
 
二、原理分析
    硬件原理图分析。由原理图得知LCD的背光是由2440的GPG4口控制的,只要往GPG4口写入高电平,(1)则背光打开,写入低电平(0)则背光关闭。
 
bubuko.com,布布扣
 
三、实现步骤
    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!\n”);
  41.             break;
  42.         }
  43.         case BL_OFF:
  44.         {
  45.             s3c2410_gpio_setpin(S3C2410_GPG4,BL_OFF);
  46.             printk(DEVICE_NAME ” turn off!\n”);
  47.             break;
  48.         }
  49.         default:
  50.             printk(“cmd default!\n”);
  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!\n”);
  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\n”);
  21.         exit(1);        
  22.     }
  23.     
  24.     fd = open(“/dev/fl2440_backlight”, 0);
  25.     
  26.     if(fd<0)
  27.     {
  28.         printf(“Open backlight device failed!\n”);
  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\n”);
  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

 

LCD背光驱动(字符设备)在FL2440的开发(2.6.33.7内核),布布扣,bubuko.com

LCD背光驱动(字符设备)在FL2440的开发(2.6.33.7内核)

标签:des   blog   class   code   tar   ext   

原文地址:http://www.cnblogs.com/ganrui/p/3706197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!