2

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

在以下代码中来自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的参数。第 763 行http://lxr.free-electrons.com/source/drivers/base/devres.c?v=3.19#L774的“分配内存的设备”是什么意思 ?归根结底,我们只需要在大小为 struct ocores_i2c 的内核中分配内存。第一个参数是否用作跟踪机制以在以后自动释放它(基于阅读 devres 内核文档)?
  3. devm_kzalloc 的返回值是指向内核中新分配的大小为 ocores_i2c 的内存的指针。如果是这种情况,devm_kzalloc 的第二个参数不应该是 sizeof(struct ocores_i2c) 而不是 sizeof(*i2c) 吗?
4

1 回答 1

2

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

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

3) 可能,是的,虽然sizeof算子会遵循 的定义i2c,所以这实际上与 基本相同sizeof(struct ocores_i2c)

于 2016-06-18T21:06:49.710 回答