嵌入式Linux之我行——LCD背光碟機動在2440上的執行個體開發

來源:互聯網
上載者:User

  嵌入式Linux之我行——LCD背光碟機動在2440上的執行個體開發

一、開發環境

  • 主  機:VMWare--Fedora 9
  • 開發板:Mini2440--64MB Nand
  • 編譯器:arm-linux-gcc-4.3.2

二、實現步驟

1. 硬體原理圖分析。由原理圖得知LCD的背光是由2440的GPG4口控制的

 

2. 編寫背光碟機動。檔案名稱為my2440_backlight.c

#include <linux/errno.h><br />#include <linux/kernel.h><br />#include <linux/module.h><br />#include <linux/slab.h><br />#include <linux/input.h><br />#include <linux/init.h><br />#include <linux/serio.h><br />#include <linux/delay.h><br />#include <linux/clk.h><br />#include <linux/miscdevice.h></p><p>#include <asm/io.h><br />#include <asm/irq.h><br />#include <asm/uaccess.h><br />#include <mach/regs-clock.h><br />#include <plat/regs-timer.h><br />#include <mach/regs-gpio.h><br />#include <linux/cdev.h></p><p>#define DEVICE_NAME "backlight" //裝置名稱<br />#define DEVICE_MINOR 5 //次裝置號,這裡我們將裝置註冊為misc裝置,這種裝置的主裝置號都為10</p><p>static int my2440_backlight_ioctl(struct inode *inode, </p><p> struct file *file, </p><p> unsigned int cmd, </p><p> unsigned long arg)<br />{<br /> switch(cmd)<br /> {<br /> case 0:</p><p> //當接收的命令為0時,就將GPG4引腳設為低電平,關閉背光<br /> s3c2410_gpio_setpin(S3C2410_GPG4, 0);<br /> printk(DEVICE_NAME " turn off!/n");<br /> return 0;<br /> case 1:</p><p> //當接收的命令為1時,就將GPG4引腳設為高電平,開啟背光<br /> s3c2410_gpio_setpin(S3C2410_GPG4, 1);<br /> printk(DEVICE_NAME " turn on!/n");<br /> return 0;<br /> default:<br /> return -EINVAL;<br /> }<br />}</p><p>static struct file_operations dev_fops =<br />{<br /> .owner = THIS_MODULE,<br /> .ioctl = my2440_backlight_ioctl, //這裡只使用控制IO口的方式來控制背光<br />};</p><p>static struct miscdevice misc =<br />{<br /> .minor = DEVICE_MINOR,<br /> .name = DEVICE_NAME,<br /> .fops = &dev_fops,<br />};</p><p>static int __init dev_init(void)<br />{<br /> int ret;</p><p> ret = misc_register(&misc); //註冊成misc裝置</p><p> if(ret < 0)<br /> {<br /> printk("Register misc device fiald!");<br /> return ret;<br /> }</p><p> //將GPG4口配置成輸出口<br /> s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP); </p><p> return ret;<br />}</p><p>static void __exit dev_exit(void)<br />{<br /> misc_deregister(&misc); //登出該misc裝置<br />}</p><p>module_init(dev_init);<br />module_exit(dev_exit);</p><p>MODULE_LICENSE("GPL");<br />MODULE_AUTHOR("Huang Gang");<br />MODULE_DESCRIPTION("Backlight control for my2440");<br />

3. 將驅動添加到核心中,這裡我們將採用靜態載入的方法。

   將my2440_backlight.c複製到核心drivers/video/backlight/目錄下

#cp -f my2440_backlight.c linux-2.6.30.4/drivers/video/backlight/</p><p>

 修改backlight/目錄下的Kconfig檔案,添加背光選項

#gedit linux-2.6.30.4/drivers/video/backlight/Kconfig</p><p>config MY2440_LCD_BACKLIGHT<br /> tristate "My2440 LCD Backlight Controls"<br /> depends on BACKLIGHT_LCD_SUPPORT<br /> default y</p><p>

修改backlight/目錄下的Makefile檔案,在最後一行添加

#gedit linux-2.6.30.4/drivers/video/backlight/Makefile</p><p>obj-$(CONFIG_MY2440_LCD_BACKLIGHT) += my2440_backlight.o</p><p>

4. 配置核心選項,選中上面添加的配置項

Device Drivers ---><br /> Graphics support ---><br /> [*] Backlight & LCD device support ---><br /> --- Backlight & LCD device support<br /> <*> My2440 LCD Backlight Controls (NEW)<br /> < > Lowlevel LCD controls<br /> < > Lowlevel Backlight controls<br />

5. 重新編譯核心並下載到開發板上,在開發板/dev/目錄下建立裝置的節點。裝置名稱為backlight,主裝置號為10,次裝置號為5,在驅動源碼裡有注釋

#mknod /dev/backlight c 10 5<br />

6. 編寫應用程式測試背光碟機動,檔案名稱為backlight_test.c

#include <stdio.h><br />#include <stdlib.h><br />#include <fcntl.h><br />#include <sys/ioctl.h></p><p>int main(int argc, char **argv)<br />{<br /> int turn;<br /> int fd;</p><p> //檢測命令後面帶的參數<br /> if(argc == 1 || argc > 2)<br /> {<br /> printf("Usage: backlight on|off!/n");<br /> exit(1);<br /> }</p><p> //開啟背光裝置<br /> fd = open("/dev/backlight", O_RDWR);</p><p> if(fd < 0)<br /> {<br /> printf("Open Backlight Device Faild!/n");<br /> exit(1);<br /> }</p><p> //判斷輸入的參數<br /> if(strcmp(argv[1], "on") == 0)<br /> {<br /> turn = 1;<br /> }<br /> else if(strcmp(argv[1], "off") == 0)<br /> {<br /> turn = 0;<br /> }<br /> else<br /> {<br /> printf("Usage: backlight on|off!/n");<br /> exit(1);<br /> }</p><p> //進行IO控制<br /> ioctl(fd, turn);</p><p> //關閉背光裝置<br /> close(fd);</p><p> return 0;<br />}<br />

7. 交叉編譯應用程式,並下載到開發板的/usr/sbin/目錄下

#arm-linux-gcc -o backlight_test backlight_test.c<br />

8. 運行效果。執行應用程式時核心都會列印出背光狀態資訊,同時觀察LCD的背光也得到了控制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.