2016-03-23 35 views
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,我沒有看到輸出指示加載的內核模塊。

當我手動運行insmodhello.ko,我得到的輸出。另外,當我運行rmmod時,我得到輸出。

我在做什麼錯?我需要這個模塊在啓動時自動加載。

編輯

這裏輸出,驗證模塊沒有裝上開機,但它是一個有效的模塊。

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

回答

4

你應該在你的食譜中添加你的模塊名稱KERNEL_MODULE_AUTOLOAD,通常是這樣的:

KERNEL_MODULE_AUTOLOAD += "hello" 

這應該把你的模塊名稱爲/etc/modules-load.d/modname.conf上圖片。