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
  • 相关阅读:
    spring 事物(一)—— 事物详解
    XMPP即时通讯协议使用(十一)——Openfire表结构汇总
    java 关键字汇总
    基于数据库的分布式锁实现
    hibernate 参数一览
    数据库并发及锁机制及Hibernate锁实现
    redis 分布式锁的正确实现方式
    支持跨域的html元素
    九度OJ 上剑指 offer 习题目录
    Leetcode: Palindrome Partition I II
  • 原文地址:https://www.cnblogs.com/Dream998/p/8540744.html
Copyright © 2011-2022 走看看