一、開發環境- 主機:VMWare--Fedora 9
- 開發板:Mini2440--64MB Nand
- 編譯器:arm-linux-gcc-4.3.2
二、實現步驟
本文引用地址:http://www.j9360.com/article/201611/319005.htm1. 硬件原理圖分析。由原理圖得知LCD的背光是由2440的GPG4口控制的

2. 編寫背光驅動。文件名為my2440_backlight.c
#include #include #include #include #include #include #include #include #include #include
#include #include #include #include #include #include #include
#defineDEVICE_NAME"backlight"//設備名稱 #defineDEVICE_MINOR5//次設備號,這里我們將設備注冊為misc設備,這種設備的主設備號都為10
staticintmy2440_backlight_ioctl(structinode*inode, structfile*file, unsignedintcmd, unsignedlongarg) { switch(cmd) { case0: //當接收的命令為0時,就將GPG4引腳設為低電平,關閉背光 s3c2410_gpio_setpin(S3C2410_GPG4,0); printk(DEVICE_NAME" turn off!n"); return0; case1: //當接收的命令為1時,就將GPG4引腳設為高電平,開啟背光 s3c2410_gpio_setpin(S3C2410_GPG4,1); printk(DEVICE_NAME" turn on!n"); return0; default: return-EINVAL; } }
staticstructfile_operations dev_fops= { .owner=THIS_MODULE, .ioctl=my2440_backlight_ioctl,//這里只使用控制IO口的方式來控制背光 };
staticstructmiscdevice misc= { .minor=DEVICE_MINOR, .name=DEVICE_NAME, .fops=&dev_fops, };
staticint__init dev_init(void) { intret;
ret=misc_register(&misc);//注冊成misc設備
if(ret<0) { printk("Register misc device fiald!"); returnret; } //將GPG4口配置成輸出口 s3c2410_gpio_cfgpin(S3C2410_GPG4,S3C2410_GPG4_OUTP);
returnret; }
staticvoid__exit dev_exit(void) { misc_deregister(&misc);//注銷該misc設備 }
module_init(dev_init); module_exit(dev_exit);
MODULE_LICENSE("GPL"); MODULE_AUTHOR("Huang Gang"); MODULE_DESCRIPTION("Backlight control for my2440"); |
3. 將驅動添加到內核中,這里我們將采用靜態加載的方法。
將my2440_backlight.c復制到內核drivers/video/backlight/目錄下
#cp -f my2440_backlight.c linux-2.6.30.4/drivers/video/backlight/ |
修改backlight/目錄下的Kconfig文件,添加背光選項
#gedit linux-2.6.30.4/drivers/video/backlight/Kconfig |
configMY2440_LCD_BACKLIGHT tristate"My2440 LCD Backlight Controls" dependsonBACKLIGHT_LCD_SUPPORT default y |
修改backlight/目錄下的Makefile文件,在最后一行添加
#gedit linux-2.6.30.4/drivers/video/backlight/Makefile |
obj-$(CONFIG_MY2440_LCD_BACKLIGHT)+=my2440_backlight.o |
4. 配置內核選項,選中上面添加的配置項
Device Drivers ---> Graphics support ---> [*] Backlight & LCD device support ---> --- Backlight & LCD device support <*> My2440 LCD Backlight Controls (NEW) < > Lowlevel LCD controls < > Lowlevel Backlight controls |
5. 重新編譯內核并下載到開發板上,在開發板/dev/目錄下建立設備的節點。設備名為backlight,主設備號為10,次設備號為5,在驅動源碼里有注釋
#mknod /dev/backlight c 10 5 |
6. 編寫應用程序測試背光驅動,文件名為backlight_test.c
#include #include #include #include
intmain(intargc,char**argv) { intturn; intfd;
//檢測命令后面帶的參數 if(argc==1||argc>2) { printf("Usage: backlight 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; } elseif(strcmp(argv[1],"off")==0) { turn=0; } else { printf("Usage: backlight on|off!n"); exit(1); }
//進行IO控制 ioctl(fd,turn);
//關閉背光設備 close(fd);
return0; } |
7. 交叉編譯應用程序,并下載到開發板的/usr/sbin/目錄下
#arm-linux-gcc -o backlight_test backlight_test.c |
8. 運行效果。執行應用程序時內核都會打印出背光狀態信息,同時觀察LCD的背光也得到了控制
評論