OpenWrtカーネルモジュールパッケージの追加(二)
参照https://wiki.openwrt.org/zh-cn/doc/devel/packages http://blog.chinaunix.net/uid-9217288-id-3060464.html
Openwrtでユーザ状態パッケージを追加する方法について説明したが,現在ではカーネルモジュールパッケージを追加する方法について述べる.
カーネルモジュールはLinuxカーネル機能を拡張するインストーラです.カーネルモジュールのロードは、カーネルロードの後(insmodコマンドなど)に発生します.
Linuxソースコードには多くのカーネルアプリケーションが含まれています.menuconfigでは3つの選択肢があり、1.カーネルにコンパイルする;2.ロード可能なカーネルモジュールにコンパイルする;3.コンパイルしない.
これらのカーネルモジュールを含めるには、make menuconfigが対応するカーネルモジュールオプションを選択します.make menuconfigで目的のカーネルモジュールが見つからない場合は、package/kernel/modulesディレクトリのファイルにstanzaを追加する必要があります.次はpackage/kernel/modules/otherです.mkが抽出した例.
また、Linuxソースパッケージに属さないカーネルモジュールを追加することもできます.この場合、カーネルモジュールはpackage/ディレクトリに配置され、通常のパッケージと同じです.Package/Makefileファイルは、Package/xxxの代わりにKernelPackage/xxx定義を使用します.
次に、linuxソースパッケージに属さないカーネルモジュールの追加について簡単に説明しません.モジュールディレクトリ を作成する.
2.exampleディレクトリに入り、Makefileファイルとコードパスを作成する
Makefileの具体的な内容は以下の通りです(具体的なパラメータの説明は前の記事を参照してください)
3.srcディレクトリに入り、コードパスと関連ソースファイルを作成する
example.c具体的な内容は以下の通りである.
Makefileの詳細は次のとおりです.
メインパスbackfire/に戻り、コンパイルオプション構成を保存してコンパイル
オプションをMに設定し、終了を保存してモジュールをコンパイルします.
最後に必要なものを見つけましたkoファイル
この書類は私たちに必要なものです.koファイル.
Openwrtでユーザ状態パッケージを追加する方法について説明したが,現在ではカーネルモジュールパッケージを追加する方法について述べる.
関連紹介
カーネルモジュールはLinuxカーネル機能を拡張するインストーラです.カーネルモジュールのロードは、カーネルロードの後(insmodコマンドなど)に発生します.
Linuxソースコードには多くのカーネルアプリケーションが含まれています.menuconfigでは3つの選択肢があり、1.カーネルにコンパイルする;2.ロード可能なカーネルモジュールにコンパイルする;3.コンパイルしない.
これらのカーネルモジュールを含めるには、make menuconfigが対応するカーネルモジュールオプションを選択します.make menuconfigで目的のカーネルモジュールが見つからない場合は、package/kernel/modulesディレクトリのファイルにstanzaを追加する必要があります.次はpackage/kernel/modules/otherです.mkが抽出した例.
define KernelPackage/loop
TITLE:=Loopback device support
DESCRIPTION:=Kernel module for loopback device support KCONFIG:=$(CONFIG_BLK_DEV_LOOP) SUBMENU:=$(EMENU) AUTOLOAD:=$(call AutoLoad,30,loop) FILES:=$(MODULES_DIR)/kernel/drivers/block/loop.$(LINUX_KMOD_SUFFIX) endef $(eval $(call KernelPackage,loop))
また、Linuxソースパッケージに属さないカーネルモジュールを追加することもできます.この場合、カーネルモジュールはpackage/ディレクトリに配置され、通常のパッケージと同じです.Package/Makefileファイルは、Package/xxxの代わりにKernelPackage/xxx定義を使用します.
次に、linuxソースパッケージに属さないカーネルモジュールの追加について簡単に説明しません.
cd openwrt/package
mkdir example
2.exampleディレクトリに入り、Makefileファイルとコードパスを作成する
cd example
touch Makefile
mkdir src
Makefileの具体的な内容は以下の通りです(具体的なパラメータの説明は前の記事を参照してください)
#
# Copyright (C) 2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=example
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define KernelPackage/example
SUBMENU:=Other modules
TITLE:=example driver
DEPENDS:=@LINUX_2_6
FILES:=$(PKG_BUILD_DIR)/*.$(LINUX_KMOD_SUFFIX)
KCONFIG:=
endef
define KernelPackage/example/description
Kernel module to example
endef
EXTRA_KCONFIG:= \
CONFIG_EXAMPLE=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:= \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
SUBDIRS="$(PKG_BUILD_DIR)" \
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
$(EXTRA_KCONFIG)
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) -C "$(LINUX_DIR)" \
$(MAKE_OPTS) \
modules
endef
$(eval $(call KernelPackage,example))
3.srcディレクトリに入り、コードパスと関連ソースファイルを作成する
cd src
touch example.c Makefile
example.c具体的な内容は以下の通りである.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/* hello_init ---- , , 0 0 */
static int __init hello_init(void)
{
printk("I bear a charmed life.
");
return 0;
}
/* hello_exit ---- , */
static void __exit hello_exit(void)
{
printk("Out, out, brief candle
");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
Makefileの詳細は次のとおりです.
obj-$(CONFIG_EXAMPLE) += example.o
メインパスbackfire/に戻り、コンパイルオプション構成を保存してコンパイル
make menuconfig
Kernel modules --->
Other modules --->
kmod-example
オプションをMに設定し、終了を保存してモジュールをコンパイルします.
make package/example/compile
最後に必要なものを見つけましたkoファイル
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/example/example.ko
この書類は私たちに必要なものです.koファイル.