Ошибка компиляции драйвера ядра Linux на STM32MP1

#linux #linux-device-driver #embedded-linux #yocto

#linux #linux-device-driver #встроенный-linux #yocto

Вопрос:

Я пытаюсь скомпилировать модуль ядра в Yocto для целевого объекта STM32MP1. Я могу без проблем скомпилировать пример helloworld. Но как только я захочу скомпилировать следующее:

 #include <linux/platform_device.h>
#include <linux/module.h
#include <linux/types.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Robert W. Oliver II");
MODULE_DESCRIPTION("A simple example Linux module.");
MODULE_VERSION("0.01");

static struct platform_device *pdev;

static int __init fake_eth_add(void)
{
    int inst_id = 0;
    pdev = platform_device_alloc("fake-eth", inst_id);
    return 0;
}

static void __exit fake_eth_put(void)
{
}

module_init(fake_eth_add);
module_exit(fake_eth_put);
 

Я получаю следующую ошибку:

root@txmp-1570:/home/rdm/ethtest # make
make -C /lib/modules/5.7.1/build M=/home/rdm/ethtest модули
make[1]: Ввод каталога ‘/lib/modules/5.7.1/build’
MODPOST 1 модули

ОШИБКА: modpost: «platform_device_alloc» [/home/rdm/ethtest/eth-ins.ko] не определено!
make[2]: *** [скрипты/Makefile.modpost:94: __modpost] Ошибка 1
make[1]: *** [Makefile:1642: модули] Ошибка 2
make[1]: выход из каталога ‘/lib/modules/5.7.1/build’
make: *** [Makefile:9: modules] Ошибка 2

Файл заголовка platform_device.h есть, но нет модуля * .c, как и должно быть в файле platform_device.c.

Мой вопрос в том, нужно ли мне выполнять какие-либо настройки параметров в ядре? Если да, что бы это было? До сих пор я ничего не нашел в справке Google относительно platform_device и настроек ядра.

Комментарии:

1. grep platform_device_alloc /proc/kallsyms показывает, что это определено для меня. Убедитесь, что CONFIG_MODULES определен.