ビルド準備
以下のパッケージをインストールします。sudo apt install gcc make flex bison bc libncurses-dev libelf-dev libssl-dev
カーネルソースコードの取得
以下のサイトにカーネルのソースコードが掲載されています。
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.2.7.tar.xz
ビルド
ソースコード展開
tar xf linux-6.2.7.tar.xz
設定
ここではデフォルト設定を行います。cd linux-6.2.7 make defconfig
さらなる設定を行う場合 (TUI)
make menuconfig上記のように入力すると、次のTUIベースの設定画面が表示されます。これを使って必要なCONFIGを追加/削除できます。
さらなる設定を行う場合 (コマンドライン)
以下のようにscript/configを使用するscripts/config -e CONFIG_DEBUG_INFO_DWARF5その後、設定されていないシンボルをデフォルトにする
make olddefconfig
参考
以下にコマンドラインでCONFIGを設定する方法を説明しています。コンパイル
make -j32
上記の-j32は、32並列でのコンパイルを行うオプション。実際のCPU数に合わせて適宜変更。
次のメッセージが表示されればビルド成功。下記のbzImageは、多くのLinux OSでvmlinuz-6.1.0-5-amd64のような名前になっているものと同じです。
Kernel: arch/x86/boot/bzImage is ready (#1)
起動テスト
ここではrootfsにDebian 11のドライブイメージを使い、QEMUで起動してみます。なお、QEMUの使用方法に関しては、以下に関連記事がまとめられています。rootfsドライブイメージのダウンロード
以下のようにrootfsのイメージをダウンロードします。wget https://cloud.debian.org/images/cloud/bullseye/20230124-1270/debian-11-nocloud-amd64-20230124-1270.qcow2
起動
次のとおりQEMUを実行します。--nographicオプションを付与しているので、仮想マシンにシリアルデバイスが作成されます。 また、カーネルオプションにconsole=ttyS0を付与して、コンソールをシリアルデバイスに設定しています。 これらによりQEMUを実行している端末が、そのままシリアルデバイスへの入出力端末となります。
なお、defconfigで設定した場合、virtio経由のストレージ機能がカーネルに組み込まれます。 initrdなしで直接rootfsをカーネルがマウントできます。
sudo qemu-system-x86_64 \ -cpu host \ --enable-kvm \ -m 1024 \ -nographic \ -drive id=drive0,format=qcow2,file=debian-11-nocloud-amd64-20230124-1270.qcow2,if=virtio \ -kernel arch/x86_64/boot/bzImage \ -append "root=/dev/vda1 console=ttyS0"以下のようなログインプロンプトが表示されれば成功です。
(省略) Debian GNU/Linux 11 debian ttyS0 debian login:このイメージでは、ユーザ名としてrootと入力すると、パスワードなしで以下のようにログインできます。
Linux debian 6.2.7 #1 SMP PREEMPT_DYNAMIC Sun Mar 19 02:39:21 UTC 2023 x86_64 (省略) root@debian:~#
起動失敗時のQEMU強制終了方法
QEMU起動中にCtrl-a、続いてcを入力するとQEMUのモニタ画面に移行します。ここでqを入力します。(Ctrl-a, cを入力) QEMU 7.2.0 monitor - type 'help' for more information (qemu) q
0 件のコメント:
コメントを投稿