驱动程序是如何利用次设备号来区分不同设备的。

每次在内核调用一个设备驱动程序时,它都会告诉驱动程序它正在操作哪个设备。主设备号和次设备号合在一起构成单个数据并用来标识特定的设备。组合后的设备号保存在稍后介绍的索引节点(inode)结构的i_rdev字段中。一些驱动程序接收一个指向inode结构的指针作为{dy}个参数。一些驱动程序接收一个指向inode结构的指针作为{dy}个参数。假定称该指针为inode,则可以通过inode->i_rdev得到设备号。

unix使用dev_t保存设备号,通常定义为一个16位整数。linux内核使用了一个新的类型,即kdev_t。下面的这些宏和函数是可以对kdev_t执行操作;

MAJPR(kdev_t);  从kdev_t结构中得出主设备号。

MINOR(kdev_t);得出次设备号

MKDEV(int ma,int mi);通过主设备号和次设备号创建kdev_t

kdev_t_to_nr(kdev_t dev);将kdev_t转换为一个整数(一个dev_t)

to_kdev_t(int dev);将一个整数转换为kdev_t。注意内核模式中没有定义dev_t,因此使用int。

只要在程序中采用这些操作去处理设备号,即便内部数据结构发生了变化,代码也依然能正常工作 。