Framebuffer 系统

博客内容介绍了Framebuffer系统的核心——fbmem.c,硬件程序通过register_framebuffer()注册fb_info结构体,包含LCD的硬件信息如尺寸、显存基址和时序。以s3c2410fb.c为例,LCD驱动程序包括硬件设置、LCD工作流程(行同步、列同步信号)以及LCD硬件操作,如引脚配置、寄存器设置和显存分配。
摘要由CSDN通过智能技术生成

 

 

此为LCD的驱动程序。fd=open("/dev/fb0");

 

此系统的核心为fbmem.c,具体的硬件程序使用register_framebuffer()函数,向其注册fb_info结构体,fb_info结构体中设置LCD的具体的硬件信息,提供具体的LCD尺寸大小,显存基地址以及时序设置等信息。

1.分析femem.c

 

fbmem_init
{
     register_chrdev(FB_MAJOR,"fb",&fb_fops);  //FB_MAJOR=29 fb相关的主设备号都是29
     fb_class = class_create(THIS_MODULE, "graphics");
}

 

static const struct file_operations fb_fops = {
	.owner =	THIS_MODULE,
	.read =		fb_read,
	.write =	fb_write,
	.ioctl =	fb_ioctl,
#ifdef CONFIG_COMPAT
	.compat_ioctl = fb_compat_ioctl,
#endif
	.mmap =		fb_mmap,
	.open =		fb_open,
	.release =	fb_release,
fb_open(struct inode *inode, struct file *file)
{
     	int fbidx = iminor(inode);
	struct fb_info *info;

        info = registered_fb[fbidx])    //以次设备号查找相应的fb_info

      if (info->fbops->fb_open) 
		res = info->fbops->fb_open(info,1);  //如果fb_info提供了open函数,则代用open函数
}
fb_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
{
    	int fbidx = iminor(inode);
	struct fb_info *info = registered_fb[fbidx];
        if (info->fbops->fb_read)
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值