2016-03-23 5 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上にあなたのモジュール名を入れる必要があります画像。

関連する問題