Linux中Framebuffer驱动详解3

接上回目。上篇文章讲完了"kernel源码/drivers/video/fbmem.c中的fbmem_init()函数中的proc_create(),本章讲第二个调用函数:register_chrdev()

相信接触过驱动程序,尤其写过字符设备驱动程序的朋友们都知道,register_chrdev_region()和alloc_chrdev_region()用于向系统注册一个字符设备。

    int register_chrdev_region(dev_t from, unsigned count, const char *name);//静态申请和注册设备号

    int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name);  //动态申请和注册设备号

    int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops);

在linux2.6里面,register_chrdev_region()是register_chrdev()的升级版本。

register_chrdev(FB_MAJOR,"fb",&fb_fops);这里只是用了老版本函数注册一个名为"fb"的字符设备而已。注册之后可以在"/proc/devices"和"/sys"中看到"fb"这一名字。

 

FB_MAJORkernel源码/include/linux/major.h中定义:

#define FB_MAJOR  29  /* /dev/fb* framebuffers */

以上说明framebuffer设备的主设备号为29,为字符设备。

 

fb_fops在同文件中定义:

static const struct file_operations fb_fops = {
 .owner = THIS_MODULE,
 .read =  fb_read,
 .write = fb_write,
 .unlocked_ioctl = fb_ioctl,
#ifdef CONFIG_COMPAT
 .compat_ioctl = fb_compat_ioctl,
#endif
 .mmap =  fb_mmap,
 .open =  fb_open,
 .release = fb_release,
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
 .get_unmapped_area = get_fb_unmapped_area,
#endif
#ifdef CONFIG_FB_DEFERRED_IO
 .fsync = fb_deferred_io_fsync,
#endif
 .llseek = default_llseek,
};

fb_fops中定义了操作framebuffer设备的各个函数。后面我们会逐一分析。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值