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が抽出した例.
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ファイル.