Test amacıyla, çekirdek modüllerinin nasıl oluşturulacağını göstermek için yocto tarafından sağlanan örnek tarifi kullanıyorum.Yocto: Görüntüye çekirdek modülü tarifi ekleniyor ancak önyükleme sırasında yüklenmiyor
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
dosyası çok basittir.
#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");
Şimdi, bu modülü görüntü tarifime ekledim. Ben görüntü önyükleme yaparken
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
, G/lib/modules dizininde testi "hello.ko" görüyorum ama dmesg
kontrol ederken, ben yüklenen çekirdek modülü gösteren çıktıyı görmüyorum.
insmod
'u hello.ko
üzerinde elle çalıştırdığımda, çıktıyı alırım. Ayrıca, rmmod
çalıştırdığımda, çıktıyı alırım.
Neyi yanlış yapıyorum? Önyükleme sırasında otomatik olarak yüklemek için bu modüle ihtiyacım var.
düzenlemek:
İşteçıkış, modül açılışta yüklenen olmadığını doğrulayarak, ancak geçerli bir modüldür.
/ # dmesg | grep "Hello"
/# insmod hello.ko
[ 68.503689] Hello World!
/# rmmod hello.ko
[ 72.702035] Goodbye Cruel World!