解释devm_kzalloc参数和用法

explain devm_kzalloc parameters and usage

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

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

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

1) 是的,内核会为你填写这个结构,然后将它传递给你的probe函数来执行初始化。

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

3) 可能是的,虽然sizeof运算符会遵循i2c的定义,所以这其实和sizeof(struct ocores_i2c).

基本相同