主题 : 用mdev自动创建设备节点的问题??? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4674
精华: 0
发帖: 9
金钱: 80 两
威望: 42 点
综合积分: 18 分
注册时间: 2009-03-24
最后登录: 2011-05-17
楼主  发表于: 2009-11-26 10:05

 用mdev自动创建设备节点的问题???

用busybox自带的一个mdev自动创建设备节点出现问题,描述如下:

1.mdev需要的sysfs和tmpfs虚拟文件系统已经挂载;
2.也执行了echo /sbin/mdev > /proc/sys/kernel/hotplug和/sbin/mdev -s命令;
3.在驱动程序中也实现了对类设备接口的支持,代码如下:
复制代码
  1.  //定义一个设备类
  2. static struct class *pwm_class;
  3. static int __init pwm_init(void)
  4. {
  5.  int ret;
  6.  //注册为字符设备,主设备号为0让系统自动分配,设备名为my2440_pwm
  7.  ret = register_chrdev(PWM_MAJOR, PWM_NAME, &pwm_fops);
  8.  if(ret < 0)
  9.  {
  10.   printk(PWM_NAME " register falid!\n");
  11.   return ret;
  12.  }
  13.  //注册一个设备类,使mdev可以在/dev/目录下自动建立设备节点
  14.  pwm_class = class_create(THIS_MODULE, PWM_NAME);
  15.  if(IS_ERR(pwm_class))
  16.  {
  17.   printk(PWM_NAME " register class falid!\n");
  18.   return -1;
  19.  }
  20.  //创建一个设备节点,设备名为PWM_NAME,即:my2440_pwm
  21.  device_create(pwm_class, NULL, MKDEV(PWM_MAJOR, 0), NULL, PWM_NAME "%d", 0);
  22.  return 0;
  23. }

4. 启动开发板,查看/dev目录,系统原有的一些设备在这里都自动创建了节点,但是就我写的这个pwm驱动没出现。但查看/proc/devices目录,my2440_pwm已经加载成功,系统分配的主设备号是253,再查看/sys/class目录,也出现了/my2440_pwm/my2440_pwm0/目录,只是目录下没有dev这个文件,我看了下其他的成功自动创建设备节点对应的这个目录下都有这个dev文件。我想问题应该就在这儿了,为什么会出现这种情况呢???谁能指点一下吗?谢谢!!
级别: 新手上路
UID: 4674
精华: 0
发帖: 9
金钱: 80 两
威望: 42 点
综合积分: 18 分
注册时间: 2009-03-24
最后登录: 2011-05-17
1楼  发表于: 2009-11-26 16:28
问题解决了,原来MKDEV(PWM_MAJOR, 0)这里错了,应该给系统动态分配的主设备号,不应该还是原来的PWM_MAJOR即0
级别: 新手上路
UID: 20276
精华: 0
发帖: 29
金钱: 150 两
威望: 30 点
综合积分: 58 分
注册时间: 2010-04-29
最后登录: 2021-06-25
2楼  发表于: 2011-12-30 00:00
学习,原来我的驱动都是自己mknod的,lz这个思路可以学习,谢谢