麦子学院字符设备驱动201126

麦子学院字符设备驱动201126

一,需要了解知识
(一)设备号
1,内核中通过类型dev_t,来描述设备号,其实质是unsigned int 32位整数,其中高12位为主设备号,低20位为次设备号。

int register_chadev_region(dev_t from, unsigned count, const char *name)
第一个参数:申请设备号范围起始值
第二个参数:从from开始申请多少个
第三个参数:设备号名字(为了方便管理)

2,设备号独一无二,主设备号表示同一类型设备,次设备号表示同一类型的不同设备。就像摄像头,分前置和后置。
(二)设备信息描述
1,对于设备信息的静态描述

struct cdev{
	struct kobject kobj; //设备管理机制,不是由我们操作的,由内核设备管理模型操作。
	struct module *owner; //为了加载驱动实现的。
	const struct file_operation *ops;
	struct list_head list; //一个链表
	dev_t dev; //设备号
	unsigned int count; //支持的设备
}

2,对于设备信息行为的描述
file_operation
3,相关注册函数
(1)只有登记注册,内核才能统一管理
(2)相关注册函数

a,int cdev_add(struct cdev *p, dev_t dev, unsigned count);
第一个参数:设备信息结构体
第二个参数:设备号
第三个参数:个数
目的:把字符设备注册到内核里
b,void cdev_init(struct cdev *, const struct file_operations *);
目的:建立设备信息和设备行为之间的联系

(三)驱动生存周期
1,insmod **.ko,装载驱动,生存周期开始;
2,rmmod **ko,卸载驱动,生存周期结束。
(四)代码分析
1,MKDEV(主设备号,次设备号); //宏定义,非函数。在这里插入图片描述该宏定义是在Kdev_t.h中定义的,也就是内核中实现的,所以可以直接调用。
2,printk
和printf很像,都是打印错误信息,不同的是,printk是分打印级别的。在这里插入图片描述
目的:只打印相关信息。
3,kzalloc与kmalloc
(1)与malloc功能相似,不过malloc是用户空间用来申请一段内存,在内核空间必须用kzalloc或kmalloc
(2)kzalloc与kmalloc区别
kzalloc会把申请到的空间全部清零。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值