LDD設備訪問控制

設備訪問控制:

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虛擬終端,驅動複製設備創建虛擬設備;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章