独自のシステムコールLinuxの実装

独自のシステムコールLinuxの実装

独自のシステムコールを実装することができたので、最新のカーネルv5.9を使用する必要があります。 linux-5.9-rc8をダウンロードし(安定バージョンでも同じエラーが発生します)、解凍します。その後、ディレクトリにcdします。

mkdir hello && cd hello

hello.c ファイルを作成し、次のコードを追加します。

#include <linux/kernel.h>
asmlinkage long sys_hello(void) 
{
    //printk prints to the kernel’s log file.
    printk("Hello world\n");
    return 0;
}

Makefileを作成し、次のコードを追加しました。

obj-y := hello.o

次に、cd ..ディレクトリのMakefileを開き、行を編集します。

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

到着

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/

Arch/x86/entry/syscalls/syscall_64.tbl ファイルのファイルの末尾に追加します。

548     64      hello   sys_hello

include/linux/syscalls.h ファイルの末尾と #endif ステートメントの前に以下を追加します。

asmlinkage long sys_hello(void);

コマンドのデフォルト構成の使用

make defconfig

ついに

make -j4

次のエラーが発生します

ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): undefined reference to `__x64_sys_hello'
make: *** [Makefile:1162: vmlinux] Error 1

私が行ったステップは、オンラインチュートリアルのウェブサイトからコピーしたことです。ほぼすべての手順を試してみましたが、カーネルのコンパイルに2〜3時間の待機時間以外はまだ同じエラーが発生しました。カーネルをコンパイルするには、手順で述べられていない特定のパッケージも必要です。

ベストアンサー1

おすすめ記事