新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2020-4-16
- 在线时间
- 8 小时
|
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);
}
|
|