weixin_44977179 2020-04-10 22:03 采纳率: 0%
浏览 140

Linux中内核版本为5.6.2 ,在开发板上插入有关中断的驱动时,插入OK,测试也OK,然后卸载驱动后重新插入就报错

我用的是linux 5.6.2版本,我写了一个开发板(exynos4412-fs4412)的按键驱动,用 insmod xxxx.ko 插入成功,测试也成功,然后用 rmmod xxxxx.ko 卸载掉,当我再次 insmod xxxx.ko 时,出现如下图片中错误

相关的函数为:
static int init key_drv_init(void){
int ret;
printk("----------------%s---------------\n",
FUNCTION__);

// 1 give space
key_dev = kzalloc(sizeof(struct dev_desc),GFP_KERNEL);
// 2 apply equip number
key_dev->dev_major = register_chrdev(0,"key_dev",&key_fops);
// 3 create equip node
key_dev->cls = class_create(THIS_MODULE,"key_cls");
key_dev->dev = device_create(key_dev->cls,NULL,MKDEV(key_dev->dev_major,0),NULL,"key0");

// 1 get interrupt number
key_dev->irqno = get_irqno_from_node();

// 2 apply interrupt   // include handle function in it
ret = request_irq(key_dev->irqno,key_irq_handler,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,
    "key_dev_eint_one",NULL);   //  IRQF_TRIGGER_FALLING
if(ret!=0){
    printk("request_irq error\n");
    return ret;
}

// 4 address io
key_dev->reg_virt_base = ioremap(GPX1_1DATE,8);

// A: initial queue head
init_waitqueue_head(&key_dev->wq_head);

// one:initial tasklet or work
//tasklet_init(&key_dev->mytasklet,tasklet_half_irq_func,88);
//tasklet_init(&key_dev->mytasklet,tasklet_half_irq_func,88);
INIT_WORK(&key_dev->mywork, work_half_irq_func);
return 0;

}

static void __exit key_drv_exit(void){

//tasklet_kill(&key_dev->mytasklet);
iounmap(key_dev->reg_virt_base);
free_irq(key_dev->irqno,NULL);
device_destroy(key_dev->cls,MKDEV(key_dev->dev_major,0));       //destory device
class_destroy(key_dev->cls);
unregister_chrdev(key_dev->dev_major,"key_dev");        //release equipment number
kfree(key_dev);
printk("----------------%s---------------\n",__FUNCTION__);

}

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧