微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LCD驱动(输入子系统)

LCD驱动(输入子系统)

时间:11-21 来源:互联网 点击:

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

之后会在内核的linux-2.6.22.6/drivers/video目录下生成:

cfbcopyarea.ko

cfbfillrect.ko

cfbimgblt.ko

拷贝到lcd.ko所在目录下即可。

3. 使用新的uImage启动开发板:

4.

insmod cfbcopyarea.ko

insmod cfbfillrect.ko

insmod cfbimgblt.ko

insmod lcd.ko

echo hello > /dev/tty1 // 可以在LCD上看见hello

cat lcd.ko > /dev/fb0 // 花屏

5. 修改 /etc/inittab

tty1::askfirst:-/bin/sh

用新内核重启开发板

insmod cfbcopyarea.ko

insmod cfbfillrect.ko

insmod cfbimgblt.ko

insmod lcd.ko

insmod buttons.ko

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top