zoukankan      html  css  js  c++  java
  • LCD驱动程序

    LCD驱动程序

    假设
    app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0

    kernel:
    fb_open
    int fbidx = iminor(inode);
    struct fb_info *info = = registered_fb[0];

    app: read()

    kernel:
    fb_read
    int fbidx = iminor(inode);
    struct fb_info *info = registered_fb[fbidx];
    if (info->fbops->fb_read)
    return info->fbops->fb_read(info, buf, count, ppos);

    		src = (u32 __iomem *) (info->screen_base + p);
    		dst = buffer;
    		*dst++ = fb_readl(src++);
    		copy_to_user(buf, buffer, c)         	
    

    问1. registered_fb在哪里被设置?
    答1. register_framebuffer

    怎么写LCD驱动程序?

    1. 分配一个fb_info结构体: framebuffer_alloc
    2. 设置
    3. 注册: register_framebuffer
    4. 硬件相关的操作

    测试:

    1. make menuconfig去掉原来的驱动程序
      -> Device Drivers
      -> Graphics support
      S3C2410 LCD framebuffer support

    2. make uImage
      make modules
      cp arch/arm/boot/uImage /work/nfs_root/uImage_nolcd

    3. 使用新的uImage启动开发板:
      nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
      bootm 30000000

    insmod cfbcopyarea.ko
    insmod cfbfillrect.ko
    insmod cfbimgblt.ko
    insmod lcd.ko

    echo hello > /dev/tty1 // 可以在LCD上看见hello
    cat lcd.ko > /dev/fb0 // 花屏

    1. 修改vi /etc/inittab
      tty1::askfirst:-/bin/sh
      用新内核重启开发板
      nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
      bootm 30000000

    mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/first_fs /mnt
    cd /mnt/

    insmod cfbcopyarea.ko
    insmod cfbfillrect.ko
    insmod cfbimgblt.ko
    insmod lcd.ko
    insmod buttons.ko

    在开发板上按ls 回车,液晶屏则列出所在目录的文件

    版权声明:本文为博主原创文章,转载请注明文章来源,有需要帮忙可加QQ:871263854
  • 相关阅读:
    springcloud学习(五)之GateWay
    springcloud学习(四)之Feign
    springcloud学习(三)之Hystrix
    springcloud学习(二)之Ribbon
    springcloud学习(一)之Eureka
    关于ES6尾调用优化
    CSS常考知识点
    Chrome动画调试最佳实践
    HTML常考知识点
    代码之旅:基础规范
  • 原文地址:https://www.cnblogs.com/Dream998/p/8540744.html
Copyright © 2011-2022 走看看