《奔跑吧linux内核(入门篇)》5.4.1实验3的坑

从本节开始,建议参考rlk_lab/rlk_basic里边的原代码进行实验,因为书里有时候会略掉重要的东西。

#include的改动没有给出

#include <linux/device.h>
#include <linux/slab.h>

need_read处有个typo

max_free = max_free > count ? lbuf : max_free // 改为
max_free = max_free > count ? count : max_free

init和exit函数的改动没有给出

static int __init simple_char_init(void)
{
    int ret;

    // 改动1
    device_buffer = kmalloc(MAX_DEVICE_BUFFER_SIZE, GFP_KERNEL);
    if (!device_buffer)
        return -ENOMEM;

    ret = misc_register(&mydemodrv_misc_device);
    if (ret) {
        printk("failed register misc device\n");
        kfree(device_buffer); // 改动2
        return ret;
    }

    mydemodrv_device = mydemodrv_misc_device.this_device;

    printk("succeeded register char device: %s\n", DEMO_NAME);

    return 0;
}

static void __exit simple_char_exit(void)
{
    printk("removing device\n");

    kfree(device_buffer); // 改动3
    misc_deregister(&mydemodrv_misc_device);
}
发布了29 篇原创文章 · 获赞 1 · 访问量 3419

猜你喜欢

转载自blog.csdn.net/defrag257/article/details/91958440