歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux系統:拷貝的驅動程序解釋(3)

 dev_t devno=MKDEV(globalmem_major,0);   
  /*主設備號是globalmem_major,  
    從設備號是0,  
    通過#define MKDEV(ma,mi) (((ma)<<MINORBITS)|(mi))宏定義生成設備號devno  
   */   
  if(globalmem_major)   
    result = register_chrdev_region(devno,1,"globalmem");   
    /**/   
  else   
  {   
      result = alloc_chrdev_region(&devno,0,1,"globalmem");   
    /**/   
      globalmem_major = MAJOR(devno);   
  }   
  if(result<0)   
    return result;   
  globalmem_devp=kmalloc(sizeof(struct globalmem_dev),GFP_KERNEL);   
    /*  
       kmalloc的特殊之處在於分配的內存在物理地址上是連續的  
     */   
  if(!globalmem_devp)   
  {   
    result = -ENOMEM;   
    goto fail_malloc;   
  }   
  memset(globalmem_devp,0,sizeof(struct globalmem_dev));   
  /**/   
  globalmem_setup_cdev(globalmem_devp,0);   
  /*初始化並添加cdev結構體*/   
  return 0;   
  fail_malloc:unregister_chrdev_region(devno,1);   
  return result;   
}   
/*globalmem設備驅動模塊卸載函數*/   
void globalmem_exit(void)    自www.Examw.com
{    
  /*注銷設備,通常發生在驅動模塊的卸載函數中*/   
  cdev_del(&globalmem_devp->cdev);   
  kfree(globalmem_devp);   
  unregister_chrdev_region(MKDEV(globalmem_major,0),1);   
}   
MODULE_AUTHOR("Song Baohua");   
/**/   
MODULE_LICENSE("Dual BSD/GPL");   
module_param(globalmem_major,int,S_IRUGO);   
module_init(globalmem_init);   
module_exit(globalmem_exit);  
Copyright © Linux教程網 All Rights Reserved