OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4018|回复: 3

块设备驱动中的rmmod的问题

[复制链接]

2

主题

7

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-4-16
在线时间
8 小时
发表于 2020-8-11 10:34:16 | 显示全部楼层 |阅读模式
static void __exit ramdisk_exit(void)
{
        printk("ramdisk exit\r\n");
        /* 释放gendisk */
        put_disk(ramdisk.gendisk);
        del_gendisk(ramdisk.gendisk);

        /* 清除请求队列 */
        blk_cleanup_queue(ramdisk.queue);

        /* 注销块设备 */
        unregister_blkdev(ramdisk.major, RAMDISK_NAME);

        /* 释放内存 */
        kfree(ramdisk.ramdiskbuf);
}

上面是正点原子的块设备驱动的源码
但是运行rmmod 的时候会出现段错误,我找了一会发现是 ramdisk_exit里面ramdisk.gendisk卸载的顺序问题,应该先del_gendisk(ramdisk.gendisk);然后再put_disk(ramdisk.gendisk);
分享一下,节约你们的时间

改正后
static void __exit ramdisk_exit(void)
{
        printk("ramdisk exit\r\n");
        /* 释放gendisk */
        del_gendisk(ramdisk.gendisk);
        put_disk(ramdisk.gendisk);

        /* 清除请求队列 */
        blk_cleanup_queue(ramdisk.queue);

        /* 注销块设备 */
        unregister_blkdev(ramdisk.major, RAMDISK_NAME);

        /* 释放内存 */
        kfree(ramdisk.ramdiskbuf);
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

187

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
558
金钱
558
注册时间
2019-5-22
在线时间
267 小时
发表于 2020-8-11 16:01:26 | 显示全部楼层
是,不改的话在卸载驱动会报段错误
回复 支持 反对

使用道具 举报

9

主题

890

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2391
金钱
2391
注册时间
2019-9-25
在线时间
397 小时
发表于 2020-8-11 16:08:40 | 显示全部楼层
嗯,是的。
回复 支持 反对

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2179
金钱
2179
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-8-12 09:42:32 | 显示全部楼层
要先使用del_gendisk函数卸载gendisk对象  之后再使用put_disk释放gendisk对象所占内存空间,
森罗万象
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 08:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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