オペレーティングシステムの実験1-Linuxカーネルのコンパイルとシステムコールの追加

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言語プログラムを作成し、システムコール番号を通じてオペレーティングシステムのサービスルーチンを要求する

元の9件の記事を公開 いいね2 訪問559

おすすめ

転載: blog.csdn.net/qq_40939814/article/details/103945878