ÈçºÎÐ¶ÔØÕâ¸öÄ£¿é(µ÷ÓÃÁËtry_module_getº¯Êý)?
Ä£¿éΪchrdev.ko,ÄÚºËΪ2.6.22.6Ä£¿éµÄinit_moduleºÍcleanup_module:
int init_module(void){
Major=register_chrdev(0,"hello",&fops);
if(Major<0){
printk(KERN_ALERT"failure\n");
}else{
printk(KERN_ALERT"success\n");
printk(KERN_ALERT"The major number is %d\n",Major);
}
try_module_get(THIS_MODULE);
return 0;
}
void cleanup_module(void){
int ret=unregister_chrdev(Major,"hello");
if(ret<0) printk(KERN_ALERT"failure\n");
else printk(KERN_ALERT"success\n");
}
±àÒëÖ®ºó,È»ºóinsmod chrdev.ko
È»ºólsmod|grep chrdev
Êä³öΪ:chrdev 6148 1
½Ó×Årmmod -f chrdev
Êä³öΪ:resource temporarily unavailable
ËÄܸæËßÎÒÈçºÎÐ¶ÔØÕâ¸öÄ£¿é£¿Ð»Ð»£¡ Ð¶ÔØÄ£¿éº¯ÊýÓ¦¸Ã¼õÉÙÒýÓüÆÊý¡£ лл£¡
¼õÉÙÒýÓüÆÊýÊÇдÔÚÄ£¿éÀï(try_module_put(THIS_MODULE))»¹ÊÇʹÓÃÃüÁî(²»ÖªµÀ)£¿ µ±È»ÊÇдÔÚÄ£¿éÀÖÁÓÚÊDz»ÊÇtry_module_put(THIS_MODULE)ÎÒ²»ÖªµÀ£¬È¥¿´¿´Êé¡£ лл°æÖ÷£¡
¸Ð¼¤²»¾¡£¡
Ò³:
[1]