Linux Framebuffer驱动框架、接口实现和使用

Linux 驱动-Frame Buffer代码分析

Framebuffer

在这里插入图片描述
  对于驱动开发人员来说,其实只需要针对具体的硬件平台SOC和具体的LCD(通过焊接连接到该SOC引脚上的LCD)来进行第一部分的寄存器编程(红色部分)。而第二、三、四部分内容(绿色部分)已经被抽象并实现在linux driver源码中了,LCD驱动开发人员只需要理解framebuffer内部的框架和接口使用即可。
其源代码位于fbmem.c文件
在这里插入图片描述

fbmem.c部分代码分析

初始化

首先是看驱动的入口函数module_init()

static int __init
fbmem_init(void)
{
	int ret;

	if (!proc_create_seq("fb", 0, NULL, &proc_fb_seq_ops))
		return -ENOMEM;

	ret = register_chrdev(FB_MAJOR, "fb", &fb_fops);
	if (ret) {
		printk("unable to get major %d for fb devs\n", FB_MAJOR);
		goto err_chrdev;
	}

	fb_class = class_create(THIS_MODULE, "graphics");
	if (IS_ERR(fb_class)) {
		ret = PTR_ERR(fb_class);
		pr_warn("Unable to create fb class; errno = %d\n", ret);
		fb_class = NULL;
		goto err_class;
	}

	fb_console_init();

	return 0;

err_class:
	unregister_chrdev(FB_MAJOR, "fb");
err_chrdev:
	remove_proc_entry("fb", NULL);
	return ret;
}
  • 在/proc文件下创建fb目录
    利用proc_create_seq()函数创建
    在这里插入图片描述

在使用cat命令查看该文件时显示的为
在这里插入图片描述
在这里插入图片描述

  • 注册字符设备
    使用注册字符设备的套路,调用register_chrdev()函数
    在这里插入图片描述
    这里的read与write都是对像素点进行操作
  • 创建类
    调用class_create()函数,在这并没有设备绑定在创建的类下,(在有具体的设备驱动注册时,会调用register_framebuffe()函数来创建帧缓冲设备,使之与fbmem关联,并绑定在该类下)
  • 帧缓冲区控制台初始化
    然后调用fb_console_init()函数
void __init fb_console_init(void)
{
	int i;

	console_lock();
	fb_register_client(&fbcon_event_notifier);
	fbcon_device = device_create(fb_class, NULL, MKDEV(0, 0), NULL,
				     "fbcon");

	if (IS_ERR(fbcon_device)) {
		printk(KERN_WARNING "Unable to create device "
		       "for fbcon; errno = %ld\n",
		       PTR_ERR(fbcon_device));
		fbcon_device = NULL;
	} else
		fbcon_init_device();

	for (i = 0; i < MAX_NR_CONSOLES; i++)
		con2fb_map[i] = -1;

	fbcon_start();
	console_unlock();
}

对于fbcon:参考以下文章
fbcon的注册和bind:https://blog.csdn.net/tiantao2012/article/details/71514346
fbcon总结

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值