专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 驱动开发

一个字符设备驱动,但是在/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手动创建设备文件。

------解决方案--------------------
学习中....
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: