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)
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); /* 获取分配号的次设备号 */
}
unregister_chrdev_region(devid, 1); /* 注销设备号 */
上面了解了字符设备新的注册方法中涉及的:申请设备号函数alloc_chrdev_region(),或注册设备号的函数 register_chrdev_region(),释放设备号函数 unregister_chrdev_region()。
这里接下来继续了解新的字符设备驱动涉及的函数。申请号设备号后,就是初始化字符设备,最后,就是向 Linux内核添加设备,处理完功能后,最终需要删除设备。