このページの本文へ

前へ 1 2 次へ

Windows Info 第313回

WSL(Windows Subsystem for Linux)のカーネルは差し替えられる

2022年02月06日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回は、WSL2のカーネルをコンパイルして差し替えてみる。Linuxは自分自身でカーネルのコンパイル、差し替えができるようになっているが、いくつか準備もある。手順としては誰でも可能な方法にしているが、記事量の関係もあり、Linuxカーネル自体について細かく説明できない。Linuxカーネルのカスタマイズに関しては別途解説することとし、今回は準備と手順を解説する。

LinuxカーネルをソースコードからコンパイルしてWSL2で動かした

カーネルをコンパイルするための準備

 WSL2用には、マイクロソフトがパッチを当てたカーネルが必要だが、そのソースコードはGitHubで公開されている。このため、コンパイルに必要なパッケージをインストールしたら、gitコマンドでソースをコピー(clone)してくれば、あとはmake(Linux/Unix系のソフトウェア開発用コマンド)がなんとかしてくれる。

 まずは、必要となるパッケージのインストールだが、その前にディストリビューションを最新状態にしておく。

sudo apt update
sudo apt upgrade -y

 次に以下のちょっと長いコマンドで必要なパッケージを導入する。

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools dwarves -y

 「sudo apt install」から最後の「-y」の間にあるのがカーネルのコンパイルに必要なパッケージだ。ここでは個々に解説できないので、何をインストールしたのか知りたければ、manやネット検索でなんとかしてほしい。

 次にカーネルのソースコードをコピーしてくる。もってくる場所はどこでもいい。一応Linuxでは、システムなどのソースコードは「/usr/src」に置くことになっている。しかし、自分のホームディレクトリでもよい。

 カーネルのソースコードをもってくるには、どのバージョンなのかを示す「タグ」を指定する必要がある。こうした情報に関しては、githubのWSL2カーネルのプロジェクトのページを見る。具体的には、以下のURLにタグの一覧がある。

●Tags · microsoft/WSL2-Linux-Kernel
 https://github.com/microsoft/WSL2-Linux-Kernel/tags

 ここを見ると原稿執筆時の最新版は「linux-msft-wsl-5.10.81.1」となっていた。今回は解説の都合上、これを使うが他のバージョンでも構わない。ただ、あまり古いものは現在の環境では動作しない可能性もある。開発は日々進んでいるので、いずれは別のタグができているはずだし、今回の記事のものはもう無くなっているかもしれない。基本的には、ページ先頭の最新ビルドのタグを探して利用すればいいはずだ。ただし、開発途上のものなので、うまく動かないなどの問題が出る可能性はゼロではない。どうやってもダメなら他のタグを試すぐらいの「根気」は必要である。

 タグが判明したら、以下のgitコマンドでソースコードを「clone(コピー)」する。

sudo git clone --branch linux-msft-wsl-5.10.81.1 https://github.com/microsoft/WSL2-Linux-Kernel.git ~/wsl2-kernel-5.10.81.1

 「--branch」の後ろがGitHubで見つけたタグであり、次は、WSL2カーネルプロジェクトのURLだ。最後の「~/wsl2-kernel-5.10.81.1」は、ソースコードのコピー先である。1.6GBほどあるので少し時間がかかる。

 Cloneが終わったら、次はカーネルの構成を指定する「.config」ファイルを作成する。これは、現在のカーネルの構成を取得して作る。現在のカーネルの.configは「/proc/config.gz」にある。procファイルシステムはカーネルが作る仮想ファイルシステムなので、実はディストリビューションに寄らず、同じconfigファイルが出てくる。

 まずはクローン先のディレクトリに移動し、以下のコマンドを使う。teeを使うのは、sudoコマンドはリダイレクトを管理者権限では実行しないため、zcatにsudoを付けてもソースコードのディレクトリに書き込みができないため。ソースコードのディレクトリ全体がrootの所有になっていて、リダイレクトは実行したユーザー権限での書き込みになるからだ。直接リダイレクトせずteeにsudoを付けることでファイルの書き込みをroot権限でしてくれる。

zcat /proc/config.gz | sudo tee .config >/dev/null

 これで基本的な準備はできたが、カーネルをコンパイルする手順が記述してあるMakefileを書き換えて、バージョン表記を変更しておくと、あとで確認が楽となる。具体的には、Makefile先頭部分にある「EXTRAVERSION」の行を書き換えて、自分が作成したカーネルであることがはっきりとわかるようにしておくとよい。

ソースコードディレクトリにあるMakefileの冒頭にバージョンを指定する変数があるので、これを変更しておくと、カーネルが変更されたことが確実にわかる。冒頭画面のunamaコマンドは、Makefileを変更して作成したもの

 次に必要に応じてカーネルのコンフィギュレーションを変更する。これには、前述の.configファイルを直接編集するか、以下のコマンドを使ってGUIのコンフィギュレーションプログラムmenuconfigを起動できる。

sudo make menuconfig

 どちらにしても、カーネルのコンフィギュレーションをするには、Linuxカーネルやデバイスドライバーなどの知識が必要で、ここ簡単に解説とはいかない。とりあえず今回は、現在動いているWSL2カーネルとまったく同じ構成にしているので、特に変更する必要なく動作するはずである。なお、デバイスドライバーを組み込みたいといった場合など、今回は自力でなんとかしてほしい。おそらくmenuconfigのDevice Driversの下に設定項目があるはずだ。

menuconfigを使うとメニュー形式でカーネルの構成を変更可能。ただし、今回解説した手順では、コンフィギュレーションを書き換える必要なしにWSL2で動作するカーネルを作ることができる

 コンフィギュレーションが終了したら(あるいは何もしなかったら)、最後に以下のコマンドでカーネルをコンパイルする。

sudo make -j$(nproc)

 「-j$(nproc)」は、makeを複数プロセスで実行するもの。「$(nproc)」部分でWSL2に割り当てられたプロセッサ数に変換される。具体的にいくつなのかはPCにより違い「echo $(nporc)」を実行すれば表示できる。また、場合によってはコンパイル中に確認メッセージが表示されるが「y」で先に進んで、まずは問題ないはずだ。

 少し時間がかかるが、コマンドが終わるとソースコードディレクトリに「vmlinux」ファイルができているはずだ。これがカーネルである。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
2
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥660
3
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
4
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
5
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
¥1,780
6
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
¥18,980
7
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
8
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
9
Amazon Kindle - 目に優しい、かさばらない、大きな画面で読みやすい、6週間持続バッテリー、6インチディスプレイ電子書籍リーダー、ブラック、16GB、広告なし
Amazon Kindle - 目に優しい、かさばらない、大きな画面で読みやすい、6週間持続バッテリー、6インチディスプレイ電子書籍リーダー、ブラック、16GB、広告なし
¥13,980
10
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,645

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン