读书人

一个字符设备驱动但是在/dev下没有相

发布时间: 2012-02-08 19:52:21 作者: rapoo

一个字符设备驱动,但是在/dev下没有相应的设备
1. insmod virtual_disk.ko,加载模块;

2. cat proc/devices
Character devices:
1 mem
200 VirtualDisk
204 s3c2410_serial

3. lsmod
VirtualDisk 3756 0 - Live 0xbf000000

3. 但是,在/dev下没有VirtualDisk设备。
请问具体什么原因呢??

程序代码:
int VirtualDisk_init(void)
{
int result;
dev_t devno = MKDEV(VirtualDisk_major, 0); /*构建设备号*/

/* 申请设备号*/
if (VirtualDisk_major) /* 如果不为0,则静态申请*/
result = register_chrdev_region(devno, 1, "VirtualDisk");
else /* 动态申请设备号 */
{
result = alloc_chrdev_region(&devno, 0, 1, "VirtualDisk");
VirtualDisk_major = MAJOR(devno);/* 从申请设备号中得到主设备号 */
}
if (result < 0)
return result;

/* 动态申请设备结构体的内存*/
Virtualdisk_devp = kmalloc(sizeof(struct VirtualDisk), GFP_KERNEL);
if (!Virtualdisk_devp) /*申请失败*/
{
result = - ENOMEM;
goto fail_kmalloc;
}
memset(Virtualdisk_devp, 0, sizeof(struct VirtualDisk));/*将内存清零*/
/*初始化并且添加cdev结构体*/
VirtualDisk_setup_cdev(Virtualdisk_devp, 0);
printk(KERN_ALERT "Virtualdisk Success\n");
return 0;

fail_kmalloc:
unregister_chrdev_region(devno, 1);
return result;
}

/*模块卸载函数*/
void VirtualDisk_exit(void)
{
cdev_del(&Virtualdisk_devp->cdev); /*注销cdev*/
kfree(Virtualdisk_devp); /*释放设备结构体内存*/
unregister_chrdev_region(MKDEV(VirtualDisk_major, 0), 1); /*释放设备号*/
}

MODULE_AUTHOR("Zheng Qiang");
MODULE_LICENSE("Dual BSD/GPL");

module_param(VirtualDisk_major, int, S_IRUGO);

module_init(VirtualDisk_init);
module_exit(VirtualDisk_exit);

[解决办法]
在 VirtualDisk_init里面添加
#ifdef CONFIG_DEVFS_FS //支持devfs文件系统,在内核里面配置
devfs_mk_cdev(设备号, S_IFCHR|S_IRUGO|S_IWUSR, 设备名称);
#endif
或者用mknod手动创建设备文件。

[解决办法]
学习中....

读书人网 >驱动开发

热点推荐