|  | 
 
| 是针对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的错误提示
 | 
 |