一个字符设备驱动,但是在/dev下没有相应的设备解决办法
发布时间:2010-06-14 17:43:14 文章来源:www.iduyao.cn 采编人员:星星草
一个字符设备驱动,但是在/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手动创建设备文件。
------解决方案--------------------
学习中....
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
在驱动开发中出现 'struct' type redefinition 应该怎么办?? 大神们告诉小弟一下...
下面是我写的代码:
#pragma once
//**********...
-
大神们帮我看一下,我的代码错在什么地方? 加载成功,卸载就蓝屏了....
/*
*******************************************************...
-
sigma8653很罕见的问题
SOS!
sigma8653板子插上卡,上电后可以识别SD卡,然后软重启(reboot)就无法识别了!
奇怪的时,继续软重启一次又可...
-
Cancel自旋锁 起了什么作用?
发现IoCancelIrp 函数中
获取了Cancel自旋锁
设置了Irp->Cancel
调用了OnCancelIo函数
但是进入了On...
-
windows下 pnp设备的即插即用功能是怎么实现的?
看到 windows内核情景分析里说
加载驱动有三种方式 前两种是静态 分别是引导...
-
取消当前 IRP 执行的过程是怎样的?
#pragma code_seg("PAGE")
NTSTATUS MyWdmRead(PDEVICE_OBJECT DeviceObject,PIRP Irp)
{
...
-
vs2008中,link2001错误的问题,代码如下
vs2008中,link2001错误的问题,代码如下
#include <ntddk.h>
VOID OnUnload(IN PDRIVER_OBJ...
-
什么是内核缓冲区,用户缓冲区
比如网卡的内核缓冲区,那这个缓冲区是在pc内存还是在网卡的芯片上呢?
------解决方案---------------...
-
如果在一个函数中有提升IRQL的语句 是不是整个函数都不能放在分页内存中 ?
如果我在一个函数前使用了 #pragma code_seg("PAGE") ...
-
请教Linux下dm9000网卡驱动程序问题
应用程序网络编程是基于socket接口的,好像完全屏蔽了底层,不能像字符设备那样应用程序可以调用...