关于C#:explain devm_kzalloc参数和用法

explain devm_kzalloc parameters and usage

我是内核驱动程序编程的新手,并且想了解几个方面。

在以下来自http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=3.19的代码中

1
2
3
4
5
static int ocores_i2c_probe(struct platform_device *pdev)
{
   struct ocores_i2c *i2c;
    i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
}
  • pdev是指向平台设备的指针。初始化平台设备时,已经创建了pdev指向的结构的内容,驱动程序核心会将这些信息传递给此探测功能。 ??这与pci dev结构相同,在该结构中,驱动程序核心正在传递在探测期间标识的pci_dev以供驱动程序使用?我的理解正确吗?
  • 我不清楚devm_kzalloc的参数。第763行http://lxr.free-electrons.com/source/drivers/base/devres.c?v=3.19#L774是"为其分配内存的设备"是什么意思?最终,我们只需要在大小为struct ocores_i2c的内核中分配内存。是否将第一个参数用作跟踪机制以稍后自动释放它(基于阅读devres内核文档)?
  • devm_kzalloc的返回值是指向内核中新分配的大小为ocores_i2c的内存的指针。如果是这种情况,devm_kzalloc的第二个参数是否应该是sizeof(struct ocores_i2c)而不是sizeof(* i2c)?

  • 1)是的,内核将为您填充此结构,然后将其传递给您的probe函数以执行初始化。

    2)简而言之,所有devm_函数套件都将返回资源的生命周期与实际设备的生命周期联系在一起。 因此,当取消探测指定的设备时,将自动清除所有返回的资源。

    3)可能是的,尽管sizeof运算符将遵循i2c的定义,所以实际上与sizeof(struct ocores_i2c)基本上相同。