设备访问控制:
1,独占方式访问,一次只能有一个进程访问设备,其他进程打开设备的时候,在open方法中均返回-EBUSY,告诉用户空间设备忙;
int open(struct inode *i_node , struct file *filp){
if(atomic_dec_unless_positive(&pc) && pid==current->pid){
atomic_inc(&pc);
return -EBUSY;
}
... ...
}
2,单个用户多个进程访问设备;
a,非阻塞open
int open(struct inode *i_node , struct file *file){
if(owner!=current->cred->uid.val && atomic_dec_unless_positive(&uid) && !capable(CAP_SYS_ADMIN)){
atomic_inc(&uid);
return -EBUSY;
}
spin_lock(spin);
count++;
spin_unlock(&pin);
... ...
}
b,阻塞open
3,复制虚拟设备;例如:tty虚拟终端,驱动复制设备创建虚拟设备;