- menuconfig で「/」で検索すると、パス、依存関係、および各シンボルの状態が明らかになります。
- 動作する .config ファイルから開始し、oldconfig/olddefconfig または localmodconfig を使用して更新します。
- 安全にコンパイルしてインストールします: modules_install、initramfs、および GRUB アップデート。
- 一般的なエラー (カーネル ツリー外、混合ツールチェーン、隠れた依存関係) を回避します。

`make menuconfig`で設定を検索し、カーネルをマシンにインストールする方法を知りたい場合は、この包括的で実践的なガイドが役立ちます。メニュー、シンボル、依存関係で迷わないように基本から始め、コンパイルとインストールまでを解説します。Gentoo、Debian、および派生ディストリビューションに関するヒントも含まれています。
本書の目的は、カーネルコンフィギュレータを簡単に操作し、検索機能を使って任意のオプションを見つけ、シンボル形式とその依存関係を理解し、コンパイルとインストール中に発生する一般的なエラーを回避できるようになることです。これらすべてについて、ドライバ(ネットワーク、Wi-Fi、サウンド、ビデオ、カメラ、タッチスクリーン)の実例、Dockerなどのコンテナに関する推奨事項、Kbuildとそのツールチェーンに関する重要な警告などを交えながら解説します。
`make menuconfig` とは何ですか? 何のために使用されますか?
カーネルツールセットには複数の設定フロントエンドが含まれており、中でも`make menuconfig`はncursesベースのテキストインターフェースを備えているため、最も人気のあるものの1つです。このツールを使用すると、機能をカーネル統合(Y)、モジュール(M)、または無効化(N)として有効にできるほか、キーボードを使ってカテゴリやサブメニュー間を移動することもできます。
作業を開始する前に、ハードウェアについてよく理解しておくことをお勧めします。そうすることで、重要な機能を誤って無効にしてしまうことを防ぐことができます。lspci 、lspci -k、dmesg 、またはロードされているモジュールを表示する簡単なlsmodなどのコマンドを使用すると、必要なドライバを特定できます。現在の設定をソースフォルダにコピーして、それをベースとして使用することをお勧めします。
典型的な準備は、ソースツリー(例えば、 / usr / src / linux または使用している特定のバージョン) を実行し、実行中のカーネル ファイルをコピーします。 cp -v /boot/config-$(uname -r) .configその基盤があれば、 make menuconfig 最初からやり直すことなくオプションの調整を開始できます。
インターフェースには、デバイスドライバ、ファイルシステム、ネットワークサポート、CPU/仮想化などのカテゴリが含まれています。カーソルは矢印キーで移動し、ボタン間の切り替えはTabキーで行い、オプションの状態はスペースキーまたはY、M、Nキーで切り替えます。各項目には通常、Hキーまたはヘルプボタンでアクセスできる状況に応じたヘルプが含まれています。
menuconfig 内のオプション(シンボル、パス、依存関係)を検索する
内蔵の検索機能は混乱を避けるための鍵です。 / menuconfig内で(スラッシュ)を入力し、シンボル名を入力します(例: BT_HCIBTUSB o IPVLANまたはプロンプトテキストのキーワードを入力します。結果には シンボル (CONFIG_…)、説明、メニュー内の位置、依存関係、および定義されている場所。
結果を注意深く解釈してください。「場所」(メニューパス)、「依存条件」(満たすべき条件)、「選択項目」(このオプションが有効にする要素)などのセクションが表示されます。オプションが非表示になっている場合は、依存関係が不足している可能性があります。検索結果に従って、まず依存関係を有効にしてください。
オプションを見つけたら、「場所」に表示されているパスに移動してアクセスします。 統合 ()または モジュール (<M>最適なものを選択してください。モジュールはより柔軟ですが、特定の重要な機能(例えば、ルートディスクコントローラやファイルシステムなど)は ブーツ) 統合することをお勧めします。
ヘルプセクション(HまたはHelp)は役立ちます。ドライバの目的、安定性について説明し、モジュールとして有効化するか統合ドライバとして有効化するかのどちらが良いかを提案してくれる場合が多いです。(NEW)、(EXPERIMENTAL)、(DEPRECATED)、(OBSOLETE)などのラベルは、各オプションの状態を示しています。
ナビゲーションとシンボル: Y/M/Nの意味とメニュー表記
コンフィギュレータのエントリは、視覚的な表記を使用してその状態を示します。要素を一括して無効化または有効化できる場合は「 &」が表示され、モジュールとしてコンパイルできる場合は「< >」、「<M>」、「<*>」が表示されます。スペースキー(またはY/M/Nキー)を押すたびに、許可されている状態が切り替わります。
オプションを完全に無効にできない場合(上位の依存関係がある場合)、{M} や {*} が表示されることがよくあります。また、 -M- や -*-のような形式は、その状態が別のオプションによって強制されていることを示します。このような場合は、検索機能とヘルプを使用して、どの依存関係を有効または無効にする必要があるかを確認してください。
素早く移動するには、A~Zキーを押すと、その文字が太字で表示される次の行にジャンプします。スペースキーで状態を切り替え、Tabキーでボタン(選択、終了、ヘルプ、保存)を切り替え、Enterキーでサブメニューにアクセスします。これらのキーボードショートカットを使えば、作業効率が大幅に向上します。
完了したら、「保存」をクリックして保存してください。.config ファイルはソースディレクトリに配置されます。既に存在する場合は、以前のバージョンが.config.oldに名前変更されます。これは、変更点を比較したり、以前のバージョンにすばやく戻したりするのに非常に便利です。
ソースツリーを準備する: .config を再利用して更新する
最も効率的なアプローチは、 すでに機能している既知の構成前述のように/bootから現在の.configファイルをコピーし、新しいバージョンに更新します。 make oldconfig (アップデートを尋ねられます)、またはもっと早く make olddefconfig (新しいバージョンのデフォルト値は、ユーザーに確認することなく受け入れられます。) どちらのアプローチでも、バージョン間の移行時に時間を節約できます。
もう一つ非常に便利な方法は、 `make localmodconfig` を実行することです。これは、現在ロードされているモジュール(`lsmod` で確認できるもの)に基づいて設定ファイルを生成します。現在のハードウェアに合わせて微調整するのに最適ですが、別のマシン向けにコンパイルする場合は、追加のオプションを手動で確認する必要があります。
出発点に戻る必要がある場合は、 make defconfig アーキテクチャのデフォルト設定を生成します。フロントエンドの代替を見たい場合は、menuconfigの他に、 nconfigを作成します (現代の侵略)、 xconfigを作成する (Qt) または gconfigを作成する (GTK) グラフィカル インターフェイスを好む場合に便利です。
Gentooでは、リンクが / usr / src / linux 正しい情報源を指摘する eselect kernel list y eselect kernel setディストリビューション カーネルを使用すると、安全なデフォルト構成が得られ、重要なシステムのリスクが軽減されます。
コンパイルとインストール: 安全なコマンドとベストプラクティス
.configファイルを保存したら、コンパイルを起動します。 make -j$(nproc) 使用する すべてのCPUコアハードウェアと選択したオプションの数に応じて、このプロセスには数十分から 1 時間以上かかる場合があります。
モジュールなどの機能を有効にした場合は、後でインストールしてください。 make modules_installこれにより、モジュールがコピーされます /lib/modules/$(バージョン)。 そして、 make install カーネルと関連ファイルを /boot に配置し、多くのディストリビューションではブート マネージャーのエントリを自動的に更新します。
initramfsを生成するには(特定のモジュール、例えばコントローラーを使うときに必要) ストレージ またはZFS/NVIDIA)では、Gentooでは genkernel –initramfs をインストール他の環境では、次のようなツールが dracut o update-initramfs. 忘れてはいけない GRUBを更新する 配布システムが自動的に実行しない場合は、
Debianとその派生では、 update-initramfs -u y GRUBを更新する (例えば、 update-grub)または grub-mkconfig -o /boot/grub/grub.cfg複数のカーネルを持つシステムでは、異なる名前を維持すること(例えば、EXTRAVERSIONにラベルを追加するなど)が役立ちます。 安定バージョンを上書きしない まだ必要なもの。
Debianとその派生では、 update-initramfs -u y update-grub o grub-mkconfig -o /boot/grub/grub.cfg複数のカーネルを持つシステムでは、異なる名前を維持すること(例えば、EXTRAVERSIONにラベルを追加するなど)が役立ちます。 安定バージョンを上書きしない まだ必要なもの。
一般的なドライバーを有効にする: メニューでそれらを見つける場所
- イーサネットネットワークカードの場合: デバイス ドライバー > ネットワーク デバイスのサポート > イーサネット ドライバーのサポート 対応するチップセットドライバを選択します。起動に必須でない場合は、統合することも、別のモジュールとして残しておくこともできます。
- Wi-Fiの場合:チェック デバイスドライバー > ネットワークデバイスのサポート > ワイヤレスLAN 特定のドライバー(Atheros、 インテル(Broadcomなど)。多くの場合、次のようにコンパイルするのが実用的です。 モジュール 更新やテストを容易にするため。
- グラフィック: 入力 デバイスドライバー > グラフィックスサポート。 のために NVIDIA Nouveauまたはamdgpu搭載のAMD GPUをご利用の場合は、対応するサポートをご確認ください。ハイブリッドシステムの場合は、切り替えオプションをご確認ください。モジュール型グラフィックスと統合型グラフィックスのどちらを使用するかを決める際は、各ドライバーのヘルプドキュメントをご確認いただくことをお勧めします。
- 音:通る デバイスドライバー > サウンドカードのサポート > 詳細 Linux サウンドアーキテクチャ(ALSA)お使いのカードに適したドライバを選択し、ALSAの一般的なサポートを有効にしてください。不明な場合は、モジュールのままにしておくと柔軟性が高まります。
- ウェブカメラ: アクセス デバイスドライバー > マルチメディアサポートで、「カメラ/ビデオグラバー」を有効にし、「メディア USB 「アダプター」がアクティブ USBビデオクラス(UVC) ウェブカメラが UVC 標準である場合。
- タッチスクリーン: 入力 デバイスドライバー > HIDサポート > 特殊なHIDドライバー そして可能にします HIDマルチタッチ 一般的なマルチタッチパネル用。
ファイルシステム、セキュリティ、仮想化:重要な選択肢
ファイルシステムでは、EXT4(必要に応じて暗号化)、XFS、Btrfs、NTFS、VFAT/EXFAT、ISO/UDF、およびNFSやCIFSなどのネットワークファイルシステムを有効にできます。ブートルートファイルシステムについては、initramfs内のモジュールに依存しないように、カーネルに統合することをお勧めします。
セキュリティ面では、SELinux、カーネルキー(KEYS)、EVMなどの整合性技術といったオプションを検討してください。これらの機能の中にはパフォーマンスに影響を与えるものもありますが、機密性の高い環境において追加の保護層を提供します。
仮想化のセクションでは、KVMやハイパーバイザーに必要なその他の要素について説明します。最新のCPUでは、KVMと特定のIntel/AMDフラグを有効にすることは通常簡単で、仮想マシンにとって非常に有益です。
暗号化APIでは、ハードウェアが対応している場合、CPUアクセラレーションアルゴリズム(SSE2/SSSE3/AVX/AVX2)を有効にすることができます。これにより、暗号化、圧縮、および各種プロトコル操作の速度が向上します。
Dockerとオーケストレーターのカーネル:必須オプション
コンテナ(Docker、Docker Swarmなど)を実行する場合は、名前空間とcgroupsを有効にしてください。一般的なオプションには、CONFIG_NAMESPACES、CONFIG_NET_NS、CONFIG_PID_NS、CONFIG_IPC_NS、CONFIG_UTS_NS、およびサブコンポーネント(CPUACCT、DEVICE、FREEZER、SCHED、CPUSETS、MEMCG)を含むCONFIG_CGROUPSがあります。
コンテナネットワークでは、CONFIG_VETH (仮想イーサネット)、ブリッジ、およびネットフィルタが重要です。例としては、CONFIG_BRIDGE、CONFIG_BRIDGE_NETFILTER、CONFIG_NETFILTER_XT_MATCH_CONNTRACK、CONFIG_NETFILTER_XT_MATCH_ADDRTYPE、CONFIG_NETFILTER_XT_MATCH_IPVS、CONFIG_NF_NAT、およびCONFIG_IP_NF_TARGET_MASQUERADEなどのターゲットが挙げられます。これらのオプションの多くはモジュールとしてコンパイルできます。
CONFIG_IPVLANドライバは、高度なコンテナネットワーク環境でよく使用されます。不明な点がある場合は、「/」で検索機能を使用して依存関係を確認してください。モジュールとしてコンパイルすることで、必要なときにのみロードできます。
Dockerとの互換性を確認するための人気のスクリプト(check-config.sh)があります。このスクリプトに権限を付与し、 .configファイルを指定すると、完全なコンテナ環境を構築するために何が不足しているかを教えてくれます。
Kbuildとツールチェーン: 重要なお知らせ
カーネルビルドシステム(Kbuild)では、環境変数を使ってビルドをパラメータ化することができます。例えば、 LLVM=1 Clang/LLVMでコンパイルします。ただし、GNUツールとLLVMを混在させないでください(例: CC=gcc とともに LD=ld.lld)、 なぜなら ビルドを壊してしまう まったく明白ではない方法で。
LLVMで完全にコンパイルしたい場合は、 LLVM=1 または使用します CC=clang およびその他の一貫性のあるbinutils(ar、nm、ldなど)も同様です。特定のフラグや積極的な最適化は本番環境では推奨されない場合があるため、使用しているカーネルのドキュメントを必ず確認してください。
非常に古いブランチ(2.4など)では、次のような手順があります。 depを作る o きれいにする ビルドする前に、現在では通常必要ありませんが、以前のセットアップで問題があった場合は、 make mrproper これにより、ツリーはクリーンな状態に戻ります。クリーンアップする前に、.config ファイルのバックアップを作成してください。
カスタムカーネルを区別するために、多くの管理者はEXTRAVERSION (Makefile)にタグを追加したり、固有のイメージ名を使用したりします。これにより、毎日起動している安定版カーネルを誤って上書きしてしまうことを防ぎます。
「make: *** ターゲット 'menuconfig' を作成するルールがありません。停止してください。」なぜこのようなことが起こるのでしょうか?
このエラーは、カーネルソースツリーの外で`make menuconfig`を実行した場合、またはKconfig/mconfインフラストラクチャを含まないプロジェクトで実行した場合に発生します。「menuconfig」ターゲットは、カーネルのMakefileと対応するスクリプトによって提供されます。そのツリーに属していない場合、このルールは存在しません。
一般的な解決策: /usr/src/linux (または解凍したバージョンのフォルダ)にいることを確認し、ターゲットが「menuconfig」のカーネルMakefileが存在することを確認してください。独自の小規模プロジェクト(たとえば、Kconfigを使用した「hello-world」プロジェクト)でKconfigを使用する場合は、scripts/kconfigツール(またはkconfig-frontendsなどのパッケージ)と、mconf/nconfを正しく呼び出すMakefileを組み込む必要があります。このインフラストラクチャがないと、コマンドは何をすべきかわかりません。
実用的な結論:menuconfigはカーネルの一部です。一般的なMakefileと混同しないでください。最小限のプロジェクトでKconfigを試すには、適切な依存関係を含めるか、別途コンパイルされたKconfigユーティリティを使用して独自のワークフローを開発してください。
ダウンロードソース: mainline、stable、longterm、linux-next
カーネルは、お使いのディストリビューションのパッケージマネージャーまたは公式ウェブサイトから入手できます。kernel.orgでは、Mainline(最新の機能と最新のパッチ)、Stable(日常使用向けにテスト済み)、Longterm(LTS、企業や安定性を重視するユーザーに最適)の各ブランチに加え、今後のリリースに関する最新情報を提供するlinux-nextも提供しています。
tar.xz ファイルをダウンロードした場合は、解凍して作業ディレクトリに移動してください。/usr/src にコンパイルする必要はありません。必要な依存関係(コンパイラ、ヘッダー、binutils など)がインストールされていれば、どのディレクトリでもビルドは正常に動作します。Debian/Ubuntu では、通常、build-essential などのメタパッケージと関連ユーティリティが必要です。
Gentooでは、「emerge -s sources」はソースパッケージ(例えばgentoo-sources)をリストします。 emerge -a gentoo-sourcesツリーは/usr/srcに作成され、アクティブなバージョンを選択できます。 eselectカーネル設定およびコンパイルを行う前に、シンボリック リンク /usr/src/linux を目的のバージョンに変更します。
initramfs に genkernel などのツールを使用する場合は、/usr/src/linux のリンクが正しいソースを指している必要があることに注意してください。そうでない場合、コンパイルしたばかりのカーネルと互換性のないinitramfs が生成される可能性があります。
構成を比較し、環境をクリーンアップする
新しいバージョンにアップデートする場合、`make oldconfig` は新しい設定の手順を案内します。`make olddefconfig` は追加された設定のデフォルト値を受け入れます。アーキテクチャの `.config` ファイルと比較して何が変わったかを確認するには、新しい `.config` ファイルを生成し、`diff` を使用して既存の `.config` ファイルと比較できます。
いろいろ試してみて何かがうまくいかない場合は、`make mrproper`を実行して最初からやり直すことを検討してください。注意:このコマンドはコンパイル成果物と設定ファイルを削除するため、事前に.configファイルを保存しておいてください。古いビルドがツリーに溜まっている場合は、適切なタイミングでクリーンアップすることで予期せぬエラーを防ぐことができます。
良い習慣としては、アクティブな設定を上書きする前に、.config ファイルの名前付きバージョン(例: .config-01、.config-02…) を保存しておくことです。こうすることで、変更を並行してテストしながら、安定した設定に戻すことができます。
外部ドライバ(NVIDIAやZFSなど)を使用している場合は、新しいカーネルをインストールした後、外部モジュールを再構築し、initramfsを再生成してください。これは、ドライバの不整合によって発生する機能の欠落やブラックスクリーンといった問題を回避する最善の方法です。
「/」を使った検索機能を使いこなし、Y/M/Nの意味とその表記法を理解し、olddefconfigやlocalmodconfigといったツールを活用することで、カーネルの設定とコンパイルはもはや迷路ではなくなります。よく知られた.configファイルベース、ツリーの適切なクリーンアップ、そして依存関係への細心の注意があれば、ハードウェアに合わせて最適化されたカーネルが完成し、本番環境での使用はもちろん、システムの制御を失うことなく最新機能を試すことも可能です。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。
