歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux系統:拷貝的驅動程序解釋(3)

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

日期:2017/2/25 10:36:10   编辑:Linux教程
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