独自のシステムコールを実装することができたので、最新のカーネル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時間の待機時間以外はまだ同じエラーが発生しました。カーネルをコンパイルするには、手順で述べられていない特定のパッケージも必要です。