5.3.4.注册字符设备驱动新接口4 : cdev_alloc

register_chrdev_region
    __register_chrdev_region

 

alloc_chrdev_region
    __register_chrdev_region

5.3.4.注册字符设备驱动新接口4

程序需要内存从哪里来:

全局变量: .data数据段 ,程序在加载时去执行,程序关闭就没有了,灵活性不够

局部变量:  栈 。用的时候自动分配,用完自动释放,太灵活

堆内存:     堆 。 用时需要申请,用完需要释放
5.3.4.1、使用cdev_alloc
(1)cdev_alloc的编程实践

5.3.4.注册字符设备驱动新接口4 : cdev_alloc_第1张图片
(2)从内存角度体会cdev_alloc用与不用的差别
(3)这就是非面向对象的语言和面向对象的代码
(4)再次感叹C语言的博大精深,好好去看《4.C语言高级专题》


5.3.4.2、cdev_init的替代
(1)cdev_init源码分析


(2)不使用cdev_init时的编程
(3)为什么讲这个

5.3.5.字符设备驱动注册代码分析1
5.3.5.1、老接口分析 

5.3.4.注册字符设备驱动新接口4 : cdev_alloc_第2张图片
register_chrdev
    __register_chrdev
        __register_chrdev_region
        cdev_alloc
        cdev_add

static inline int register_chrdev(unsigned int major, const char *name,
				  const struct file_operations *fops)
{
	return __register_chrdev(major, 0, 256, name, fops);
}


1.  一个函数只调用了 一个函数:  分层
__register_chrdev :  这个是内核调用的
    0 : 次设备号
    256 :

2. inline  : 兼顾效率





register_chrdev  驱动调用
    __register_chrdev  内核调用
        __register_chrdev_region  注册 设备号
        cdev_alloc  动态分配内存
        cdev_add

5.3.5.2、新接口分析

5.3.4.注册字符设备驱动新接口4 : cdev_alloc_第3张图片
register_chrdev_region
    __register_chrdev_region

alloc_chrdev_region
    __register_chrdev_region

5.3.4.注册字符设备驱动新接口4 : cdev_alloc_第4张图片

5.3.4.注册字符设备驱动新接口4 : cdev_alloc_第5张图片

你可能感兴趣的:(朱老师,5linux驱动开发,驱动开发,linux)