私はOpenwrtでカーネルモジュールを開発する方法を学んでいます。私はこんにちは世界を試してみます。パッケージのディレクトリツリーは次のとおりです。Openwrtカーネルモジュール
khelloworld/
Makefile
src/
khelloworld.c
Makefile
OpenWrtのMakefileのソース:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=khelloworld
PKG_RELEASE:=1
PKG_VERSION:=1.0
include $(INCLUDE_DIR)/package.mk
define KernelPackage/khelloworld
SUBMENU:=HELLO WORLD MODULES
TITLE:=khelloworld
MAINTAINER:=Nobody
MENU:=1
FILES:=$(PKG_BUILD_DIR)/$(PKG_NAME).$(LINUX_KMOD_SUFFIX)
endef
EXTRA_KCONFIG:= \
CONFIG_HELLO_MOD=m
EXTRA_CFLAGS:= \
$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
#MAKE_OPTS:= \
# EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
# $(EXTRA_KCONFIG)
define Build/Prepare
# Copy sources
mkdir -p $(PKG_BUILD_DIR)
cp -R ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) -C "$(LINUX_DIR)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
ARCH="$(LINUX_KARCH)" \
SUBDIRS="$(PKG_BUILD_DIR)" \
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
$(EXTRA_KCONFIG) \
modules
endef
$(eval $(call KernelPackage,khelloworld))
ソースのMakefile:
obj-m += khelloworld.o
all:
$(MAKE) -C "$(LINUX_DIR)" \
$(MAKE_OPTS) \
modules
Cのhelloworldのソース:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void) {
printk(KERN_INFO "Hello World KERNEL!!!\n");
return 0;
}
void cleanup_module(void) {
printk(KERN_INFO "Goodbye World KERNEL!!!\n");
}
このモジュールこのコマンドでうまくコンパイルする:パッケージ/ khelloworld /コンパイル
作るそれから私は、このコマンドを使用して、私のOpenWrtの中でそれをインストール:
opkg install kmod-khelloworld-xxxxxx.ipk
とインストールはエラーなしで実行されます。問題dmesg
は、init関数の予期されたメッセージを表示しません。
が、それは私がinsmod
が欠落していると考え
[ 9493.863000] khelloworld: version magic '3.4.11-rt19 mod_unload modversions MIPS32_R1 32BIT ' should be '3.4.11-rt19 SMP preempt mod_unload MIPS32_R1 32BIT '
このメッセージが表示されます。だから、僕は"$(eval $(call KernelPackage,khelloworld))"
define Build/install
insmod $(PKG_BUILD_DIR)/khelloworld.ko
endef
前のMakefileへのインストール次のマクロを追加しましたが、それは問題を解決しませんでした。 この問題に関するアイデアは誰にもありますが、どのように解決できますか?
あなたはinitとexit文がありません。あなたはそれを試しましたか? – LethalProgrammer
問題を解決しない@LethalProgrammer –
modprobeを使用してモジュールをロードしましたか? – LethalProgrammer