Yocto: добавляется рецепт модуля ядра в образ, но он не загружается при загрузке

В целях тестирования я использую примерный рецепт, предоставленный yocto, чтобы продемонстрировать, как создавать модули ядра.

SUMMARY = "Example of how to build an external Linux kernel module"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"

inherit module

PR = "r0"
PV = "0.1"

SRC_URI = "file://Makefile \
           file://hello.c \
           file://COPYING \
          "

S = "${WORKDIR}"

# The inherit of module.bbclass will automatically name module packages with
# "kernel-module-" prefix as required by the oe-core build environment.

Файл hello.c очень простой.

#include <linux/module.h>

int init_module(void)
{
    printk("Hello World!\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Goodbye Cruel World!\n");
}

MODULE_LICENSE("GPL");

Теперь я добавил этот модуль в свой рецепт изображения.

SUMMARY = "A console-only image that fully supports the target device \
hardware."

IMAGE_FEATURES += "splash package-management"

IMAGE_INSTALL += "test-mod autoconf automake binutils make busybox"

LICENSE = "MIT"

inherit core-image

Когда я загружаю образ, я вижу тест «hello.ko» в каталоге / lib / modules, но когда я проверяю dmesg, я не вижу вывода, указывающего, что модуль ядра загружен.

Когда я вручную запускаю insmod на hello.ko, я получаю результат. Кроме того, когда я запускаю rmmod, я получаю результат.

Что я делаю неправильно? Мне нужен этот модуль для автоматической загрузки при загрузке.

изменить:

Вот результат, подтверждающий, что модуль не загружен при загрузке, но является допустимым модулем.

/ # dmesg | grep "Hello"
/ # insmod hello.ko 
[   68.503689] Hello World!
/ # rmmod hello.ko 
[   72.702035] Goodbye Cruel World!

person Paul Knopf    schedule 23.03.2016    source источник
comment
Не понял Вот, добавил этот модуль в свой рецепт изображения. часть! какой файл?   -  person dipankar pal    schedule 31.12.2020
comment
IMAGE_INSTAL += your-recipe в вашем рецепте изображения.   -  person Paul Knopf    schedule 05.01.2021


Ответы (1)


Вы должны добавить имя своего модуля в KERNEL_MODULE_AUTOLOAD в вашем рецепте, как правило, так:

KERNEL_MODULE_AUTOLOAD += "hello"

Это должно поместить имя вашего модуля в /etc/modules-load.d/modname.conf на образе.

person Jussi Kukkonen    schedule 24.03.2016
comment
Работал для меня только в файлах .conf, таких как local.conf или мета .conf, но, например, не имел никакого эффекта от рецепта изображения. - person fault-tolerant; 23.09.2019
comment
Во многих областях рецепты с изображениями немного особенные. Вы можете использовать KERNEL_MODULE_AUTOLOAD в файлах conf и в фактическом рецепте ядра или модуля (или bbappend к ядру или рецепту модуля). - person Jussi Kukkonen; 23.09.2019