Привет, у меня есть драйвер сторожевого пса linux, как показано ниже:
struct omap_wdt_dev {
struct watchdog_device wdev;
struct device *dev;
void __iomem *base_addr;
uint32_t ttgr_pattern;
};
static int omap_wdt_start(struct watchdog_device *wdev)
{
struct omap_wdt_dev *omap_wdev = watchdog_get_drvdata(wdev);
/*...*/
omap_wdt_reload(omap_wdev);
return 0;
}
static int omap_wdt_plf_probe(struct platform_device *pdev)
{
struct omap_wdt_dev *omap_wdev;
omap_wdev = kzalloc(sizeof(*omap_wdev), GFP_KERNEL);
watchdog_set_drvdata(wdev, (void *)omap_wdev);
/*...*/
return 0;
}
В этом коде они создали структуру omap_wdt_dev
, в которой есть watchdog_device
. Затем в функции проверки omap_wdt_plf_probe
они используют указатель void внутри watchdog_device
, чтобы указать на "wdev" функцией: watchdog_set_drvdata(wdev, (void *)omap_wdev)
. Затем в функции omap_wdt_start
с входным параметром watchdog_device
они получают omap_wdt_dev
из watchdog_device
, чтобы использовать omap_wdt_dev
. Я вижу это техническое, используйте указатель void для хранения данных структуры, часто используется в linux ядре, но я не знаю названия этого метода.
Не могли бы вы объяснить мне больше об этом и покажите мне еще одну технику, которая используется в linux ядре?