51今日赛:点燃激情,决战巅峰,你的荣耀时刻即将开启!

核心内容摘要

亚洲影音新浪潮:揭秘“91在线视精品”如何引爆全球视觉盛宴
潮流新声,智享生活:喿辶臿辶喿与喿辶喿7,重新定义你的数字体验

日本“91”大片震撼上映

目录

主次设备号的定义

设备号常用宏

设备号的分配与释放

1 动态分配与释放

2 静态分配与释放参考资料

主次设备号的定义在 Linux 里/dev/xxx这种设备文件本质上是一个特殊文件inode里面最关键的“身份信息”就是一个设备号 dev_t(本质上是一个整型编码是一个32位的数据类型高12位为主设备号低20位为次设备号)主设备号major告诉内核“应该找哪个驱动/哪个字符设备类或者块设备类来处理这个打开请求”次设备号minor告诉驱动“同一个驱动下的哪一个具体实例/通道/端口/逻辑设备”该类型的定义是在include/linux/types.h文件中当用户态做fd open(/dev/xxx, O_RDWR);VFS 在解析到这是字符设备/块设备文件后会拿到这个 inode 里保存的dev_t拆出 major/minor然后去内核里找到对应的cdev字符设备或 bdev块设备把这次open转交给对应的file_operations。

在自己的设备中我们可以输入ls -l /dev/xxx0来查看设备节点的主次设备号与设备类型使用下述指令可以查看系统当前注册的主设备号cat /proc/devices

设备号常用宏在include/linux/kdev_t.h包含了一些设备号相关的常见宏MAJOR(dev_t)/MINOR(dev_t)拆出主/次设备号MKDEV(major, minor)把主/次设备号合成一个dev_t

设备号的分配与释放设备号分配的本质是向内核申请一个设备号区间一个 major 若干连续 minor并在退出时把这段区间归还。

设备号分配与释放的函数在头文件include/linux/fs.h这里声明了alloc_chrdev_region()register_chrdev_region()unregister_chrdev_region()并且注释里直接标明来源/* fs/char_dev.c */还定义了动态 major 的范围常量CHRDEV_MAJOR_*。

1 动态分配与释放动态分配alloc_chrdev_region()/ 释放unregister_chrdev_region()函数原型如下声明位置include/linux/fs.hint alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name); void unregister_chrdev_region(dev_t from, unsigned count);实现位置代码fs/char_dev.calloc_chrdev_region()传入major0的语义要求内核在“动态主设备号范围”内找一个未占用 major并把baseminor..baseminorcount-1这段 minor 区间登记进去成功后通过dev返回起始dev_t即major:baseminor。

unregister_chrdev_region()反向把这段区间从内部表里摘掉并释放若跨 major会按段循环处理。

2 静态分配与释放静态分配register_chrdev_region()/ 释放unregister_chrdev_region()函数原型声明位置include/linux/fs.hint register_chrdev_region(dev_t from,unsigned count,constchar *name); void unregister_chrdev_region(dev_t from,unsigned count);实现位置代码fs/char_dev.cregister_chrdev_region()由调用者给出from MKDEV(major, first_minor)内核只做两件关键事检查该 major/minor 区间是否与已登记区间重叠冲突则失败将这段区间登记为已占用必要时同样按 major 分段处理。

释放仍统一使用unregister_chrdev_region()同上按段撤销登记。

参考资料野火字符设备驱动Linux设备驱动程序第三版

日系galgame手游汉化版大全-日系galgame手游汉化版大全应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123