QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2704|回复: 1

2.4核的8255并口驱动程序的问题

[复制链接]
发表于 2006-7-17 07:22:39 | 显示全部楼层 |阅读模式
是针对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的错误提示
发表于 2006-7-17 21:33:20 | 显示全部楼层
dev下的设备文件应该跟驱动加载和卸载没关系吧
8255是系统带的吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-21 21:15 , Processed in 0.060015 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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