QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1878|回复: 0

2.4核驱动程序的问题

[复制链接]
发表于 2006-7-15 21:59:01 | 显示全部楼层 |阅读模式
是针对8255驱动程序的,建立设备文件的疑问,初始化是这样写的。
static int __init s_init_module(void)
{
  int ret;



  //注册模块;
  if ((ret=devfs_register_chrdev(major,s_name,&Tmint_fops_ADDR)) < 0)
   {
   printk("\r\n<1>82C55 Register Fail!\r\n");
   return ret;
   }
  
  //动态分配主设备号;
  if(major == 0)
   major = ret;
  
  //建立设备文件;
  devfs_handle = devfs_register(NULL, "8255",DEVFS_FL_DEFAULT,
   major, 0, S_IFCHR | S_IRUSR | S_IWUSR,&Tmint_fops_ADDR, NULL);
  
  ADDR_mem();
  //printk("init IO_ADDR module is ok!\n");
  return 0;
}
我将驱动模块动态添加进内核,insmod /lib/modules/8255.o



lsmod 查看到了8255
我查看了/proc/devices 里面显示了8255
又看了一下/dev/中,也存在8255 ,这里的8255应该是insmod命令建立的
问题是在/proc/devices中的8255,一般是通过devfs_mk_dir()建立,但我在驱动程序中并没有找到这样的函数,而且添加模块的时候也没有用到mknod命令,那这里的8255是从哪里来的?是devfs_register 建立的吗?但devfs_handle_t devfs_register函数是个空函数啊?
static inline devfs_handle_t devfs_register (devfs_handle_t dir,
          const char *name,
          unsigned int flags,
          unsigned int major,
          unsigned int minor,
          umode_t mode,
          void *ops, void *info)
{
    return NULL;
}



然后我用rmmod 8255命令删除模块的时候,lsmod发现8255没有了,/proc/devices中也没有了8255,而/dev中的8255仍然存在,会不会影响到下次的加载使用?



static void __exit s_cleanup_module(void)
{
   int retv;
  
   //注销模块;
  retv=devfs_unregister_chrdev(major,s_name);
  
   //取消内存区域映射;
  iounmap(IO_Addr);

  //释放申请的内存区域;
  release_mem_region(ADDR_sys_offset,ADDR_Size);
  if(retv<0)
   {
      printk("<1>IO_ADDR UnRegister Fail!\n");
      return ;
   }
  printk("<1>IO_ADDR:Good Bye!\n");
}


我rmmod 8255后再次加载的时候,出现了can not find parent  , error 17的错误提示
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-28 21:42 , Processed in 0.102680 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表