Linux驱动③新字符设备驱动实验

一、分配和释放设备号

老式设备注册的弊端:使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可

  • 需要我们事先确定好哪些主设备号没有使用。
  • 会将一个主设备号下的所有次设备号都使用掉,比如现在设置 LED 这个主设备号为200,那么 0~1048575(2^20-1)这个区间的次设备号就全部都被 LED 一个设备分走了。这样太浪
    费次设备号了!一个 LED 设备肯定只能有一个主设备号,一个次设备号。

新式申请设备号:

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
int register_chrdev_region(dev_t from, unsigned count, const char *name)

注销设备号:

void unregister_chrdev_region(dev_t from, unsigned count)

linux源码分析:
在这里插入图片描述

int major; /* 主设备号 /
int minor; /
次设备号 /
dev_t devid; /
设备号
if (major) { /* 定义了主设备号 /
devid = MKDEV(major, 0); /
大部分驱动次设备号都选择 0 / register_chrdev_region(devid, 1, “test”);
}
else
{ 没有定义设备号 *
alloc_chrdev_region(&devid, 0, 1, “test”); /
申请设备号
major = MAJOR(devid); /* 获取分配号的主设备号 /
minor = MINOR(devid); /
获取分配号的次设备号 */
}

二、新的字符设备注册方法

  1. 在 Linux 中使用 cdev 结构体表示一个字符设备
  2. struct cdev test_cdev;创建字符设备
  3. cdev_init(struct cdev *cdev, const struct file_operations *fops)
  4. int cdev_add(struct cdev *p, dev_t dev, unsigned count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值