.koファイルを生成するために使用されるmakeファイルについて

.koファイルを生成するために使用されるmakeファイルについて

私はこのmakeファイルの用途を知っています。カーネルソースコードからカーネルのビルドシステムを呼び出すドライバのMakefile。しかし、何が起こっているのか理解できませんでした。

# Makefile – makefile of our first driver

# if KERNELRELEASE is not defined, we've been called directly from the command line.
# Invoke the kernel build system.
ifeq (${KERNELRELEASE},)
    KERNEL_SOURCE := /usr/src/linux
    PWD := $(shell pwd)
default:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean

# Otherwise KERNELRELEASE is defined; we've been invoked from the
# kernel build system and can use its language.
else
    obj-m := ofd.o
endif

たとえば、ここで何が起こるかは次のとおりです。

 `${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

そしてここ:

obj-m := ofd.o` 

コメントを追加してこの内容を理解するのに役立ちますか?

私はこれをこれから得ました。協会

makeファイルには関連する.cファイル(ドライバ)があります。

/* ofd.c – Our First Driver code */

#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>

static int __init ofd_init(void) /* Constructor */
{
    printk(KERN_INFO "Namaskar: ofd registered");

    return 0;
}

static void __exit ofd_exit(void) /* Destructor */
{
    printk(KERN_INFO "Alvida: ofd unregistered");
}

module_init(ofd_init);
module_exit(ofd_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Anil Kumar Pugalia <[email protected]>");
MODULE_DESCRIPTION("Our First Driver");

答え1

Makefileコメントで説明したように、このMakefileは2つの部分で構成されています。二度読むことになるからだ。まず、コマンドラインで make を呼び出し、次に kbuild で呼び出します。

# if KERNELRELEASE is not defined, we've been called directly from the     command line.
# Invoke the kernel build system.
ifeq (${KERNELRELEASE},)
    KERNEL_SOURCE := /usr/src/linux
    PWD := $(shell pwd)
default:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean

定義されていない場合は、KERNELRELEASEmakeがファイルを読み取るためです。 makeを呼び出し、オプションで-Cディレクトリをカーネルソースがある場所に変更するMakefileがあります。

その後、Makeはそこ(カーネルソースディレクトリ)からMakefileを読み込みます。SUBDIRSモジュールのソースコードがある場所です。 (私はSUBDIRSそれがもはや使用されておらず、M現在使用されていると思います)。

カーネルビルドシステムは、何を構築するかを知るために、モジュールディレクトリでMakefileを探します。KERNELRELEASEセクションが有効になります。

# Otherwise KERNELRELEASE is defined; we've been invoked from the
# kernel build system and can use its language.
else
    obj-m := ofd.o
endif

詳細は以下で確認できます。カーネル文書

関連情報