前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux FrameBuffer分析

Linux FrameBuffer分析

作者头像
DragonKingZhu
发布2022-05-08 15:46:19
4080
发布2022-05-08 15:46:19
举报
代码语言:javascript
复制
/* framebuffer分析 */

/* framebuffer初始化 */
static int __init fbmem_init(void)
{
	proc_create("fb", 0, NULL, &fb_proc_fops);

	//注册主设备号29, 次设备号为0的字符设备
	if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
		printk("unable to get major %d for fb devs\n", FB_MAJOR);

  //创建class。 既然创建class, 那就需要创建class_devcie。可是没有, 那一定在那里创建呢?
	fb_class = class_create(THIS_MODULE, "graphics");
	if (IS_ERR(fb_class)) {
		printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
		fb_class = NULL;
	}
	return 0;
}

/* 当应用程序调用open函数,就调用fb_open函数 */

static int fb_open(struct inode *inode, struct file *file)
{
	int fbidx = iminor(inode);	//获取次设备号
	struct fb_info *info;
	int res = 0;

	info = get_fb_info(fbidx);  //根据次设备号获取fb_info结构

	file->private_data = info;
	if (info->fbops->fb_open) {
		res = info->fbops->fb_open(info,1);
		if (res)
			module_put(info->fbops->owner);
	}
	return res;
}

//根据次设备号获取fb_info结构
static struct fb_info *get_fb_info(unsigned int idx)
{
	fb_info = registered_fb[idx];
	return fb_info;	
}

/* 那 registered_fb 结构是从那里获得的?*/

//注册frame_buffer。
int register_framebuffer(struct fb_info *fb_info)
{
	ret = do_register_framebuffer(fb_info);
}

static int do_register_framebuffer(struct fb_info *fb_info)
{
	//查找空闲的fb_info
	for (i = 0 ; i < FB_MAX; i++)  
		if (!registered_fb[i])
			break;

	registered_fb[i] = fb_info;  
}	
/*把传进来的fb_info放如到registered_fb数组中。 在get_fb_info用到了。 
  可见当我们注册fb_info结构时, 就会将注册的fb_info放到registered_fb中
*/


/*那如何写LCD驱动程序呢?

1: 分配一个fb_info结构
		framebuffer_alloc()函数
2: 设置fb_info结构
    2.1 设置不变的参数: fb_info->fix
    2.2 设置可变的参数:  fb_info->var
    2.3 设置fbops:       fb_info->fbops
    2.4 设置调色板:     fb_info->pseudo_palette
3: 注册fb_info结构
		register_framebuffer()函数
4: 硬件相关的初始化
		4.1 初始化IO端口用作LCD
		4.2 初始化LCDCON1-5
		4.3 初始化framebuffer。 并把framebuffer的基地址告诉LCD控制器
		4.4 使能LCD。包括背光,LCD控制器, LCD自身的电源

*/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档