简答的字符驱动
我自己写了个简单的字符驱动,编译什么都没有错,模块加载也成功了,但自动创建的设备节点没有,部分代码如下:
static void my_cdev_setup(struct my_cdev *dev, int index)
{
int err;
dev_t devno = MKDEV(device_major, index);
cdev_init(&dev->cdev,&my_cdev_fops);
dev->cdev.owner = THIS_MODULE;
dev->cdev.ops = &my_cdev_fops;
err = cdev_add(&dev->cdev,devno,1);
if(err)
printk(KERN_NOTICE"Error %d adding LED %d\n", err, index);
}
static int __init my_cdev_init(void)
{
int result;
dev_t devno;
printk(KERN_ALERT"init my char driver\n");
if(device_major)
{
devno = MKDEV(DEVICE_MAJOR, 0);
result = register_chrdev_region(devno,1,"my_cdev_qiong");
}
else
{
result = alloc_chrdev_region(&devno,0,1,"my_cdev_qiong");
device_major = MAJOR(devno);
}
if(result < 0)
return result;
my_cdevp = kmalloc(sizeof(struct my_cdev), GFP_KERNEL);
if(!my_cdevp)
{
result = -ENOMEM;
}
memset(my_cdevp, 0, sizeof(struct my_cdev));
my_cdev_setup(my_cdevp, 0);
my_cdev_class = class_create(THIS_MODULE,"liuqiong");
if(IS_ERR(my_cdev_class))
{
return -1;
}
device_create(my_cdev_class,NULL,devno,"liu" "%d",0);
return result;
}
static void __exit my_cdev_exit(void)
{
cdev_del(&my_cdevp->cdev);
device_destroy(my_cdev_class, MKDEV(device_major, 0));
class_destroy(my_cdev_class);
unregister_chrdev_region(MKDEV(device_major, 0), 1);
kfree(my_cdevp);
}
为什么创建设备节点会没有,如果用命令的话是可以创建成功的,还想问下在卸载模块时老是说模块在被使用,但我只是加载了,什么都没做,求高人解答!!!