Объяснить параметры и использование devm_kzalloc
Я новичок в программировании драйверов ядра и хотел бы понять несколько аспектов.
В приведенном ниже коде от 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);
}
- 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 ответ
Решение
1) Да, ядро заполнит эту структуру для вас, а затем передаст ее вашему probe
функция для выполнения инициализации.
2) Короче говоря, все devm_
Набор функций свяжет жизненный цикл возвращаемого ресурса с жизненным циклом фактического устройства. Поэтому все возвращенные ресурсы будут автоматически очищены, когда указанное устройство не будет проверено.
3) Наверное, да, хотя sizeof
Оператор будет следовать определению i2c
так что это на самом деле так же, как sizeof(struct ocores_i2c)
,