記事ディレクトリ
Linuxカーネルのコンパイルとシステムコールステップの追加
著者はubuntu18.04を使用して、カーネルlinux-5.3.17バージョンをコンパイルしてインストールします。
1古いカーネルバージョンを確認する
インストール後の新しいカーネルバージョンと比較する
uname -a
2ソースコード
https://www.kernel.org/
ubuntuの任意のフォルダーにソースコードをダウンロードします
3 root権限を入力します
不十分な権限によって引き起こされるエラーを防ぐ
su
4ソースコードを解凍し、特定のフォルダーに配置します
-J xzアルゴリズムを使用してファイルを圧縮および解凍します
-x解凍
-f必須パラメーター
-C解凍するフォルダーを指定します
tar -Jxf linux-5.3.17.tar.xz -C /usr/src/
5システムコールを追加する
合計3つのステップ、追加したコンテンツを自分で設定
1. システムコール番号を割り当て、システムコールテーブルを変更する
gedit ./arch/x86/entry/syscalls/syscall_64.tbl
2. システムコールサービスルーチンを宣言する
gedit ./include/linux/syscalls.h
3. システムコールサービスルーチンを実装する
gedit ./kernel/sys.c
6各必須パッケージをインストールします
カーネルをコンパイルしてインストールするときに、いくつかのソフトウェアパッケージが必要です。後でエラーを防ぐために、事前にインストールしてください
apt install libncurses5-dev make openssl libssl-dev bison flex
7残りの.config .oファイルをクリアします
最後のコンパイルエラーが原因で残った.config .oファイルをクリアします。最初のコンパイルの場合は、スキップできます(もちろん、コマンドの実行時に問題はありません)。
cd /usr/src/linux-5.3.17
make mrproper
8カーネルを設定する
カーネルオプションを設定します。デフォルトですべて終了できます。
make menuconfig
9カーネルをコンパイルする
-j6は6つのCPUコアでコンパイルし、出力エラーをerror.logファイルにリダイレクトして簡単に表示します。
もちろん、コアが2つしかない場合
は、-j2に変更するのが最も時間がかかり、約1が必要です。 2時間。著者i7第9世代、40分間の6コアコンパイル、参考として
// make -j6 2> error.log
make -j2 2> error.log
10コンパイルモジュール
約10分
make modules
11カーネルとモジュールをインストールする
最初にモジュールをインストールしてから、コアを
約10分間インストールします
// 安装模块
make modules_install
// 安装内核
make install
12 GRUBブートローダーを設定する
update-grub
13中間ファイルを消去する
中間ファイルをクリアします。Oファイル、これらのファイルは多くのスペースを占有し、その後の実験には意味がありません
make clean
14再起動
reboot
15カーネルのバージョンを表示する
uname -a
16古いカーネルを削除する
su
// 查询并删除旧内核
dpkg --get-selections|grep linux
apt purge ....
17追加したシステムコールをテストします
C言語プログラムを作成し、システムコール番号を通じてオペレーティングシステムのサービスルーチンを要求する