【问题标题】:Understanding the use of memset in this example了解本例中 memset 的使用
【发布时间】:2013-04-13 00:51:15
【问题描述】:

我正在研究Linux Device Driver book(http://lwn.net/Kernel/LDD3/)中的一个例子,我不明白函数memset在这种情况下的用途和用处,希望有人可以向我解释。我知道我们使用 kmalloc 为我们的设备结构分配内存,并且使用 memset 我们将 0 放在内存地址前面?这是一个例子:

int scull_p_init(dev_t firstdev)
{
int i, result;

result = register_chrdev_region(firstdev, scull_p_nr_devs, "scullp");
if (result < 0) {
    printk(KERN_NOTICE "Unable to get scullp region, error %d\n", result);
    return 0;
}
scull_p_devno = firstdev;
scull_p_devices = kmalloc(scull_p_nr_devs * sizeof(struct scull_pipe), GFP_KERNEL);
if (scull_p_devices == NULL) {
    unregister_chrdev_region(firstdev, scull_p_nr_devs);
    return 0;
}
memset(scull_p_devices, 0, scull_p_nr_devs * sizeof(struct scull_pipe));
for (i = 0; i < scull_p_nr_devs; i++) {
    init_waitqueue_head(&(scull_p_devices[i].inq));
    init_waitqueue_head(&(scull_p_devices[i].outq));
    init_MUTEX(&scull_p_devices[i].sem);
    scull_p_setup_cdev(scull_p_devices + i, i);
}

【问题讨论】:

    标签: driver device memset kmalloc


    【解决方案1】:

    memset 没有将 0 放在 scull_p_devices 前面。它正在从scull_p_devices 中的地址覆盖内存,直到分配区域的大小为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2013-12-13
      • 2020-07-09
      相关资源
      最近更新 更多