mknod的标准形式:mknod DEVICENAME {b/c} MAJOR MINOR
1.DEVICENAME是要创建的设备文件名,可以包含目录
2.b和c分别表示块设备和字符设备
3.MAJOR和MINOR分别表示主设备号和次设备号
示例:mknod /dev/myDevice c 128 512
联想一:
主设备号:用来表示一个特定的驱动程序,例如在insmod加载驱动时分配的一个主设备号
次设备号:用来表示该驱动的各设备
当执行mknod /dev/myDevice c 128 512时,会把/dev/myDevice 映射到主设备号为128的驱动,这样操作myDevice设备才会调用相关驱动。
联想二:
在驱动中关于主设备号的创建:
major = register(0, "myDriver", &myFile_fops);//参数1为0时表示系统自动生成主设备号,不为0时,参数1表示要申请的主设备号,为了防止为设备号冲突,需要用cat /proc/devices查看已经注册的主设备号。
联想三:
根据一知道我们要操作设备名时需要需要将设备名与设备号关联,mknod是创建设备节点,即做了关联操作,如何在linux驱动中自动的关联设备名和设备号?
当我们注册驱动时会在linux系统的/sys目录下生成设备信息,mkdev能根据这些设备信息创建设备节点,即需要在驱动中提供设备信息。两条语句:
major = register(0, "myDriver", &myFile_fops);
drv_class = class_create(THIS_MODULE, "myDriver");
drv_class_dev = device_create(drv_class, NULL, MKDEV(major, 0), NULL, "cgl");//创建/dev/cgl设备节点
只提供借鉴,在最新的内核中已经不这么申请设备号....
联想四:
一个字符设备要注册设备号、建立设备节点