linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
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驅動程序?
分配一個fb_info結構體: framebuffer_alloc
設置
注冊: register_framebuffer
硬件相關的操作
測試:
make menuconfig去掉原來的驅動程序 -> Device Drivers -> Graphics support S3C2410 LCD framebuffer support
make uImage make modules
cp arch/arm/boot/uImage /work/nfs_root/uImage_nolcd
使用新的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 // 花屏
修改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 回車,液晶屏則列出所在目錄的文件
總結
以上是生活随笔為你收集整理的linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HD2500显卡驱动linux,Inte
- 下一篇: c语言条件编译的例子,C语言条件编译分析