Linux Framebuffer驱动框架、接口实现和使用-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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的注册和bindhttps://blog.csdn.net/tiantao2012/article/details/71514346
fbcon总结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |