2
出於測試目的,我使用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
當我開機的形象,我看到了/ lib/modules目錄測試「hello.ko」,但是當我檢查dmesg
,我沒有看到輸出指示加載的內核模塊。
當我手動運行insmod
上hello.ko
,我得到的輸出。另外,當我運行rmmod
時,我得到輸出。
我在做什麼錯?我需要這個模塊在啓動時自動加載。
編輯:
這裏輸出,驗證模塊沒有裝上開機,但它是一個有效的模塊。
/ # dmesg | grep "Hello"
/# insmod hello.ko
[ 68.503689] Hello World!
/# rmmod hello.ko
[ 72.702035] Goodbye Cruel World!