主题 : 求助  请问自动创建设备节点怎么弄 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 74868
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-07-30
最后登录: 2012-11-17
楼主  发表于: 2012-11-06 20:41

 求助  请问自动创建设备节点怎么弄

请问自动创建设备节点  需要哪些条件?

我编译通过了  busybox也支持mdev的

可是没有生成设备节点啊

busybox中
  Linux System Utilities --->
  [*] mdev
  [*] Support /etc/mdev.conf
  [*] Support command execution at device addition/removal
kernel中
  File systems --->
  Pseudo filesystems --->
  [*] Virtual memory file system support (former shm fs)
  [  ] Tmpfs POSIX Access Control  Lists
    [*] Tmpfs POSIX Access Control Lists

C文件:
static int memdev_init(void)
{
    struct class *myclass;
  int result;
  int i;

  dev_t devno = MKDEV(mem_major, 0);

  /* 静态申请设备号*/
  if (mem_major)
    result = register_chrdev_region(devno, 2, "memdev");
  else  /* 动态分配设备号 */
  {
    result = alloc_chrdev_region(&devno, 0, 2, "memdev");
    mem_major = MAJOR(devno);
  }  
  
  if (result < 0)
    return result;

  /*初始化cdev结构*/
  cdev_init(&cdev, &mem_fops);
  cdev.owner = THIS_MODULE;
  cdev.ops = &mem_fops;
  
  /* 注册字符设备 */
  cdev_add(&cdev, MKDEV(mem_major, 0), MEMDEV_NR_DEVS);
  
  /* 为设备描述结构分配内存*/
  mem_devp = kmalloc(MEMDEV_NR_DEVS * sizeof(struct mem_dev), GFP_KERNEL);
  if (!mem_devp)    /*申请失败*/
  {
    result =  - ENOMEM;
    goto fail_malloc;
  }
  memset(mem_devp, 0, sizeof(struct mem_dev));
  
  /*为设备分配内存*/
  for (i=0; i < MEMDEV_NR_DEVS; i++)
  {
        mem_devp.size = MEMDEV_SIZE;
        mem_devp.data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);
        memset(mem_devp.data, 0, MEMDEV_SIZE);
  }
  /*自动创建设备文件*/
    myclass = class_create(THIS_MODULE,"test_char"); /*在sys下创建类目录/sys/class/test_char*/
    device_create(myclass, NULL, MKDEV(mem_major,0), NULL, "memdev0");  
  return 0;

  fail_malloc:
  unregister_chrdev_region(devno, 1);
  
  return result;
}
级别: 新手上路
UID: 74868
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-07-30
最后登录: 2012-11-17
1楼  发表于: 2012-11-06 20:43

 Re:求助 请问自动创建设备节点怎么弄

内核和busybox都设置了    源文件编译也通过的
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-11-07 08:18

 Re:求助 请问自动创建设备节点怎么弄

文件系统里dev目录下的其他设备节点文件是mdev创建的吗?
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 74868
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-07-30
最后登录: 2012-11-17
3楼  发表于: 2012-11-07 11:05

 回 2楼(kasim) 的帖子

其他的都是手工创建的

#cd  /opt/rootfs/dev
sudo mknod console  c  5  1
sudo mknod null  c  1  3
sudo mknod ttySAC0  c 204  64
sudo mknod mtdblock0  b31  0
sudo mknod mtdblock1  b31  1
sudo mknod mtdblock2  b31  2
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2012-11-07 13:22

 回 3楼(wuxichengxv) 的帖子

你有在启动的时候用"mdev -s"扫描/sys目录,并且将mdev设置为/proc/sys/kernel/hotplug的值吗?
这个帖子是我以前分析友善之臂root_qtopia文件系统启动过程的,希望对你有点帮助
http://www.aiothome.net/read.php?tid=1702#5048
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 74868
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-07-30
最后登录: 2012-11-17
5楼  发表于: 2012-11-08 19:03

 回 4楼(kasim) 的帖子

谢谢版主  嘿嘿