从本节开始,建议参考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);
}