Linux系统驱动之Framebuffer驱动程序框架

2021-12-08 10:29:24 浏览数 (3)

资料下载

coding无法使用浏览器打开,必须用git工具下载:

代码语言:javascript复制
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

Framebuffer驱动程序框架

1. 怎么编写字符设备驱动程序

  • 驱动主设备号
  • 构造file_operations结构体,填充open/read/write等成员函数
  • 注册驱动:register_chrdev(major, name, &fops)
  • 入口函数
  • 出口函数

2. Framebuffer驱动程序框架

分为上下两层:

  • fbmem.c:承上启下
    • 实现、注册file_operations结构体
    • 把APP的调用向下转发到具体的硬件驱动程序
  • xxx_fb.c:硬件相关的驱动程序
    • 实现、注册fb_info结构体
    • 实现硬件操作

调用关系:

代码语言:javascript复制
例子1:
app:  open("/dev/fb0", ...)   主设备号: 29, 次设备号: 0
--------------------------------------------------------------
kernel:
         fb_open
         	int fbidx = iminor(inode);
         	struct fb_info *info = = registered_fb[0];


例子2:
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)         	

3. 怎么编写Framebuffer驱动程序

核心:

  • 分配fb_info
    • framebuffer_alloc
  • 设置fb_info
    • var
    • fbops
    • 硬件相关操作
  • 注册fb_info
    • register_framebuffer

0 人点赞