1、全局。设备被多次打开,则打开它的所有文件描述符都可以共享该设备所包含的的数据。
2、持久。多次打开或者关闭设备,数据不会丢失。
3、多个进程同时读取一个设备,会为读取的数据发生竞争。
4、scull内部实现将说明在不使用中断的情况下如何实现阻塞试和非阻塞试的读写操作。
5、scullsingle:只允许一个进程使用该驱动程序
scullpriv:对每个终端/控制台都是私有的,对每个终端或控制台的进程将获取到不同内存区。
sculluid:可多次打开,但是每次只能有一个用户打开。
scullwuid:同上,但是实现阻塞试open
6、主设备号标识设备对应的是驱动程序,Linux内核允许多个驱动程序共享主设备号。
次设备号由内核使用,用于正确确定设备文件所指的设备。
dev_t用来保存设备编号,在<linux/types.h>中定义。
MAJOR(dev_t dev);获取主设备号
MINOR(dev_t dev);次
将主次设备号转换成dev_t类型:
MKDEV(int major, int minor)
7、在建立字符设备之前,要获取一个或者多个设备编号:
int register_chrdev_region(dev_t first, unsiged int count, char *name)
内核为我们分配所需要的主设备号:(动态分配。常用)
int alloc_chrdev_region(sev_t *dev, unsigned int firstminor, unsigned int count, char *name);
不使用时释放:
int unregister_chrdev_region(dev_t first, unsiged int count);
脚本调用insmod后,读取/proc/devices以获取新分配的主设备号。
8、设备驱动程序如何将设备编号和内部函数联系起来,这些内部函数用来实现设备的操作。