<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux之我行——LCD背光驅動在2440上的實例開發(fā)

          嵌入式Linux之我行——LCD背光驅動在2440上的實例開發(fā)

          作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
          一、開發(fā)環(huán)境
          • 機:VMWare--Fedora 9
          • 開發(fā)板:Mini2440--64MB Nand
          • 編譯器:arm-linux-gcc-4.3.2

          二、實現(xiàn)步驟

          本文引用地址:http://www.ex-cimer.com/article/201611/319005.htm

          1. 硬件原理圖分析。由原理圖得知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. 將驅動添加到內(nèi)核中,這里我們將采用靜態(tài)加載的方法。

          將my2440_backlight.c復制到內(nèi)核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. 配置內(nèi)核選項,選中上面添加的配置項

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


          5. 重新編譯內(nèi)核并下載到開發(fā)板上,在開發(fā)板/dev/目錄下建立設備的節(jié)點。設備名為backlight,主設備號為10,次設備號為5,在驅動源碼里有注釋

          #mknod /dev/backlight c 10 5

          6. 編寫應用程序測試背光驅動,文件名為backlight_test.c

          #include
          #include
          #include
          #include

          intmain(intargc,char**argv)
          {
          intturn;
          intfd;

          //檢測命令后面帶的參數(shù)
          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);
          }

          //判斷輸入的參數(shù)
          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. 交叉編譯應用程序,并下載到開發(fā)板的/usr/sbin/目錄下

          #arm-linux-gcc -o backlight_test backlight_test.c


          8. 運行效果。執(zhí)行應用程序時內(nèi)核都會打印出背光狀態(tài)信息,同時觀察LCD的背光也得到了控制



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();