一个字符设备驱动,但是在/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手动创建设备文件。
[解决办法]
学习中....