首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

一个字符设备驱动,但是在/dev下没有相应的设备解决办法

2012-02-08 
一个字符设备驱动,但是在/dev下没有相应的设备1. insmod virtual_disk.ko,加载模块2. cat proc/devicesCh

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

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

热点排行