ウェブサイト検索

Linuxカーネルの設定


以前、カーネルのコンパイルと設定について話しましたが、一般的なアイデアに焦点を当てました。今回は、構成部分をより深く掘り下げ、ハードウェアに完璧にマッチするカーネルを作成する際に必要な有益なアドバイスを提供します。

これに関する主なアイデアは、ハードウェアを非常によく理解する必要があるということです。それに正確に合わせたカーネルを構築するためです。最初に、カーネルをコンパイルするために必要なものをカバーし、その後Linuxカーネルの設定、コンパイル、インストールに移ります。

今回は、バニラカーネルをコンパイルするか、ディストリビューションカーネルをコンパイルするかはそれほど重要ではありません。ただし、私たちは「作業方式」を推奨しますが、もちろんそれに従う必要はありません。このガイドを読むことで、あなたに最適なものを決定できるようになります。Linuxシステムの内部や開発ツールについての適度な知識があることを期待しています。

このチュートリアルでは、あなたは学びます:

  • Linuxカーネルのソースコードをダウンロードする方法
  • ハードウェアを特定する方法
  • 構成されたLinuxカーネルのコンパイル方法
  • 新しいカーネルのインストール方法と使用方法

Linuxカーネルのソースコードをダウンロードする

始めるために、私たちはGitHubからLinuxのソースコードをダウンロードします。これは次のgitコマンドで実行できます。


git clone https://github.com/torvalds/linux.git

私たちのチュートリアルではカーネルを小さくしますが、適切な時間内にコンパイルするためには、まだある程度のハードウェア性能が必要です。したがって、現代のマルチコアシステムでは約15分かかりますが、古い遅いシステムでは1日かかることもあります。大きなプロジェクトをコンパイルすることは、特にメモリにおいて、マシンに大きな負担をかけます。

ハードウェアを知る

もしあなたがすでに自分のコンピュータの内部について自信を持っているなら、この部分を飛ばしても構いません。そうでない場合や、何か疑問がある場合は、読み進めてください。この部分はあなたのマシン専用のカーネルを作るために重要なので、時間をかけてください。

システムのハードウェアに関する情報を取得するために、lspci コマンドを使用できます。


sudo lspci -vv > lspcioutput

これは lspcioutput という名前のファイルを作成し(もちろん名前は変更できます)、コマンド lspci の情報で満たします。このコマンドは詳細情報を得るために冗長に実行されます。作成されたファイルをお気に入りのエディタで開き、手元に置いておきましょう。すべてを読んで、ハードウェアコンポーネントについての一般的な理解を得てください。

例をさらに進めると、以下が私たちのlspciの出力のイーサネットコントローラー部分に表示される内容です:


00:06.0 Ethernet controller: nVidia Corporation MCP65 Ethernet (rev a3)
        Subsystem: Giga-byte Technology Device e000
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- 
SERR- FastB2B- DisINTx+
         Status: Cap+ 66MHz+ UDF- 
FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0 (250ns min, 5000ns max)
        Interrupt: pin A routed to IRQ 42
        Region 0: Memory at f6007000 (32-bit, non-prefetchable) [size=4K]
        Region 1: I/O ports at c800 [size=8]
        Capabilities: [44] Power Management version 2
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable+ DSel=0 DScale=0 PME-
        Capabilities: [50] MSI: Enable+ Count=1/8 Maskable+ 64bit+
                Address: 00000000fee0300c  Data: 4171
                Masking: 000000fe  Pending: 00000000
        Capabilities: [6c] HyperTransport: MSI Mapping Enable- Fixed+
        Kernel driver in use: forcedeth

ご覧のとおり、ハードウェアに関する多くの情報が得られます。この情報は、必要な情報を整理するために必要かもしれません。この場合、私たちが必要としているのは名前(nVidia Ethernet MCP65)と、使用中のドライバーであるforcedethです。

もし強制的にethモジュールを取得するためにカーネル設定で有効にする必要があるオプションを見つけたい場合は、「forcedeth kernel config」でGoogle検索すると、私たちが探しているのはCONFIG_FORCEDETHであることがわかります。簡単です。

lspciは名前が示すように、すべてを網羅しているわけではありません。一般的なルールとして、/procや/sysはハードウェアに関する多くの情報を提供します。lspciの出力には、例えばCPU情報は含まれていません。必要な情報に関しては、/proc/cpuinfoが役立ちます。

外部のUSB接続デバイスをサポートしたい場合は、lsusbが役に立ちます。特定のハードウェアに必要なドライバーが確実にわからない場合や、Googleで解決できない場合は、関連していると思われるすべてのオプションを有効にしておくことをお勧めします。オーバーヘッドは無視できるほど小さいものであり、経験を積むことで有効にするべきものと無効にするべきものがわかるようになります。最初から完璧なカーネルを得ることは期待しないでください。練習が完璧をもたらします。

注意
Linuxシステムのハードウェアを知るためのチュートリアルをチェックしてください。このチュートリアルでは、システムのハードウェアに関する情報を明らかにするためのさまざまなコマンドやヒントが紹介されています。

すべての準備が整ったと思ったら、もう一度座って考えてみてください:将来何が必要になるでしょうか?外部カードリーダー?iPod?ドライバーを有効にすれば、ハードウェアサポートの欠如による今後の問題を回避できます。

ハードウェア構成を詳細に、使用しているカーネルモジュールなどを含めて、リストとして書き留めるために、古典的なペンと紙を使用することをお勧めします。ファイルは出入りし、ハードディスクもそうですが、ケースのどこかに貼り付けた紙の一片が、あなたや他の人の助けになるでしょう。

コンピュータで何をしますか?仮想化を使用しますか?Xenおよび/またはKVMサポートを有効にします。あなたのディストリビューションはSELinuxやTomoyo、他のセキュリティフレームワークを強制していますか?それは必要ですか?該当する部分を有効にしてください。

設定が整ったので、構成の部分に進みましょう。

Linuxカーネルの設定方法

私たちは以前、私たちの方法について説明すると言いました:さて、それがここにあります。私たちは、もちろん、私たちのハードウェアでうまく動作するのを見た場合は、分布の設定を使用しますが、通常はそうなります。なぜなら、私たちには何も珍しいものがないからです。

あなたの/bootディレクトリ内にconfig-5.13.0-27-genericというファイルがあるはずですが、正確なファイル名は異なる可能性が高いです。これは新しいLinuxカーネルのバージョンごとに変更されるためです。このファイルを、私たちのクローンしたLinuxカーネルディレクトリの.configファイル、すなわち~/linux/.configに単純にコピーできます。

  1. 次のコマンドを自分のパスとファイル名を使用するように適応してください。

    
    cp /boot/config-5.13.0-27-generic ~/linux/.config/.config 
    

    コンパイルしようとしているカーネルに可能な限り近いバージョンを使用してください。これにより、互換性の問題が発生しないことが保証されます。

  2. もしそのまま設定ファイルを使いたいのであれば、次のように入力してください。

    
    make oldconfig 
    

    その後、コンパイルを進めます。ただし、私たちはそれを望んでいないので、このコマンドを実行します:

    
    make menuconfig 
    
  3. cursesベースの使いやすいメニューが表示されます。「代替構成ファイルを読み込む」に移動し、設定ファイルの名前(例として.configを推奨)を入力します。これでオプションを変更し、最後に設定ファイルを保存することができます。

  4. 「一般設定」では通常そのままにしていますが、もちろん好きなものを変更する自由があります。いつもの警告があります:知らないことは変更しないでください。この種の構成は依存関係ベースであることを覚えておいてください:アイテムを無効/有効にすると、それに依存するアイテムも影響を受けます。したがって、たとえば、ネットワークを無効にすると、すべてのネットワーク関連オプションも自動的に無効になります。

  5. 「プロセッサタイプと機能」はターゲットプロセッサを反映するように変更する必要があります:私たちはAMD K8ベースのCPUを持っているので、「プロセッサファミリ -> Opteron/Athlon64/Hammer/K8」を選択しました。

  6. 「ネットワーキングサポート」では、これはシンプルなイーサネット接続を持つデスクトップ/ワークステーションなので、アマチュア無線、赤外線、Bluetooth、ワイヤレス、および適用されないその他のオプションを無効にしました。もちろん、あなたの経験は異なる場合があります。また、各項目にはヘルプメニューが関連付けられており、画面下部の「ヘルプ」ボタンを通じてアクセスできます。その中で、ドライバーが何をするのか、どのハードウェアのサポートがあるのかなどがわかります。

  7. 「デバイスドライバ」に進むと、ここではおそらく多くの無効化が必要になるでしょう。なぜなら、ここにはLinuxがサポートするハードウェアドライバの大部分があるからです。ハードウェア構成シートを手元に置いて、適切な選択をしてください。最初に新しいカーネルが起動しない場合は、動作しているカーネルを起動し(ブートローダーのタイムアウトを約10秒に設定して、選択する時間を持ちましょう)、何が問題だったのかを確認します。ツリー内のドキュメントやインターネットを利用してください。

  8. 「カーネルハッキング」について進めると、カーネル開発者になりたい場合、ここではバグを特定し文書化するのを助けるオプションがあります。それ以外の場合は、これらをそのままにしておいてください。デバッグオプションはシステムを肥大化させ、遅くする傾向があります。

  9. 終了したら、「代替構成ファイルを保存」を選択し、.config(再度推奨)を入力してから、終了します。これでカーネルのコンパイルの準備が整いました。ただし、最後のアドバイスとして、安全策から始めて、不要なドライバーを徐々に削除していくことで、スリムで動作するカーネルを作成することをお勧めします。大きいものから小さいものへ移行する方が、逆よりも簡単です。

Linuxカーネルのビルドとインストール

正しいオプションでカーネルが設定されたので、次はそれをコンパイルすることに進みます。前述したように、コンパイルのプロセスは、システムのハードウェアによってかなりの時間がかかることがあります。

  1. Linuxカーネルをビルドすることは、実際にはどのシステムでも同じです。

    
    make
    

    これにより、後でインストールするカーネルイメージがビルドされます。-jnをmakeの引数として使用できます。ここでnは、システムのCPUコア数+1で、並列ビルドを有効にし、その結果、プロセスが加速されます。

  2. この次のステップも普遍的です。

    
    make modules_install
    
  3. ほとんどのディストリビューションでは、この次のステップも同じになります。他のいくつか、例えばArchなどでは、makeの代わりにcpを使用する必要があります。各ディストリビューションでカスタムカーネルをインストールする方法はオンラインで見つけることができますし、カーネルパッケージを作成して通常のパッケージ管理ツールで単純にインストールすることもできます。どのように行うにせよ、ディストリビューションのドキュメントが優先されることを忘れないでください。

    
    make install
    
  4. それでは、最新のカーネルがインストールされたので、テストしてみましょう!再起動して、新しいカーネルを選択してブートします。

カーネルのバグをトラブルシューティングする

バニラカーネルを構築し、バグ(例えば、Oopsやパニック)が見つかった場合は、ドキュメント(カーネルツリーのルートにあるREPORTING-BUGS)を読み、バグをできるだけ詳細に文書化してください。ディストリビューションでパッチが当てられたカーネルの場合は、そのディストリビューションのバグ報告ツールを使用する必要があります。当然、メンテナは上流に連絡して問題を解決します。

締めくくりの考え

常に良い作業用カーネルと設定ファイルを手元に置いておくことで、自分の時間とエネルギーを節約できます。良いカスタムカーネルは、特にほとんどすべてのカーネルドライバが含まれている汎用ディストリビューションを使用する場合、より応答性の高いシステムを提供します。頑張ってください。

関連記事: