\r\n\r\n

自作Linuxカーネルのコンパイル方法

自分でリナックスカーネルをコンパイルするのは、変な技術的な問題ですよね?ここまで、なぜそうするのかを説明してきましたが、今度は自分でやってみましょう

Gentooのインストールと同時に自分のLinuxカーネルをコンパイルすることは、非常に奇妙で技術的なことだと考えられていることの一つです。その理由については、すでに説明したとおりです。手順を説明する前に、いくつかの重要な概念を簡単に説明します。

カーネル(a kernel)は何ですか?

つまり、最も重要とは言えないまでも、オペレーティングシステムの重要な部分なのです。オペレーティングシステムは、プログラムを実行させ、ハードウェアにアクセスできるようにする役割を担っています。しかし、実はこれらの作業をすべて行っているのがカーネルなのです。

Linuxカーネルの特別な点は、自分のハードウェアに合わせてカスタマイズできることです。これは、どのコンピュータでも同じであるwindowsntカーネルとは対照的である。そのために、カーネルはコンパイルと呼ばれるプロセスを経る必要がある。

詳しくは、Linuxカーネル入門をご覧ください。

コンパイルは何ですか?

一般的に、プログラムは人間が読める形式で書かれている。これによって、ソフトウエアを作ることが容易になりました。例えば、Linuxカーネルは主にC言語というプログラミング言語で書かれていますが、コンピュータはこれを理解することができません。機械語という複雑な言語しか認識できないのです。そのために、コンパイラと呼ばれる特殊なソフトウェアを使って、テキスト行を翻訳しているのです。

プログラミング言語の変換には、さまざまなコンパイラが使用されます。例えばGCCは、Cコードをマシンコードに変換するコンパイラです(中略)。コンパイラは、翻訳されたコードを特定のマシン用に最適化することもできる。また、この操作を行うことで、プログラムから不要な機能を削除することもできる。

通常、多くのソフトはこの作業をすでに行っています。その代わり、変換されたバイナリ命令が簡単に手に入るので、それをダウンロードする。例えば、今あなたが起動しているWebブラウザは、すでにコンパイルされています。これは、何かをコンパイルするのは少し複雑で時間がかかるからです。大きな本を外国語に翻訳するようなものだと考えてください。

つまり、カーネルをコンパイルするということは、そのコードを実際にコンピュータ上で動くコードに変換することである。

カーネルソースの取得

燃料がなければ火は起こせません。同様に、コードがなければ、プログラムをコンパイルすることはできません。ほとんどのLinux OSでは、いくつかの例外を除き、通常は同じです。その多くは、独自のカスタムカーネルソースを提供しています。できることなら、使ってみてほしい。例えば、UbuntuなどのDebian系のOSを使用している場合、以下のコマンドでソースをインストールする必要があります。

sudo apt-get updatesudo apt-get install linux-source

ご希望であれば、このパッケージの別のバージョン(例:linux-source-4.8.0)をインストールすることも可能です。インストールされたファイルは、/usr/src/ディレクトリにありますので、そこに移動して、以下のサイトで内容を確認してください。

cd /usr/src/ls

tar bz2.で終わるファイルが出てきますが、これが今回使用するソースです。

sudo tar xjvf linux-source-4.4.0.tar.bz2

もちろん、正しい名前のファイルに置き換えてください。ファイルがかなり大きくなるので、処理には少し時間がかかります

代替方法

希望者は、Linuxカーネルの公式サイトからソースコードを入手することができます。Linuxオペレーティングシステムで提供されていない場合のみ行うことをお勧めします。ご希望のバージョンを選択し、ダウンロードしてください。このルートを通る場合、空のフォルダにダウンロードする必要があります。こうすることで、将来さらに多くのカーネルをコンパイルしたくなったときに、それらを整理するのに適したフォルダーを持つことができます。

これが完了したら、以下のコマンドでファイルを解凍してください。

tar xJvf linux-4.9.11.tar.xz

使用するファイル名がダウンロードしたバージョンと一致していることを確認してください

カスタムカーネル

このステップでは、カーネルのどの部分を削除するかを選択することができます。例えば、カーネルは様々なデバイスに対応したドライバを多数提供しています。このサポートが不要な場合は、これらを削除することで速度面でのメリットが得られ、またカーネルを小さくすることができます。

前提条件

作業を進める前に、カスタマイズやコンパイルができる何らかのプログラムをインストールする必要があります。

Debianベースのシステムでは、特に基本パッケージのビルドが必要です。

sudo apt-get install build-essential gcc libncurses5-dev libssl-dev

libncurses5 dev パッケージは、カーネルの設定を容易にしますので、必ずインストールしてください。他のLinuxオペレーティングシステムにも同様のプログラムがありますが、異なる名称を使用している場合があります。例えば、ソフトツイードハットであれば、ncursesという名前になります。

まだインストールされていない場合は、GNU Compiler Collection (GCC)も必要です。元のソースコードをコンピュータが理解できるものに翻訳する役割を担うツールです。つまり、コンパイルです。

これらのプログラムをインストールしたら、解凍したLinuxのソースフォルダにいるようにターミナルを開いてください。例えば、linuxのソース方式であれば、以下のようになります。

cd /usr/src/linux-source-4.4.0

カーネルコンフィギュレーションファイル

カーネルをコンパイルする前に、それがどのように行われたいかをGCCに伝える必要があります。これは、makeというコマンドラインツールを使って行うことができます。次のコマンドを入力します。

sudo make localmodconfig

makelocalmodconfigコマンドは、どのカーネルコンポーネントが現在実行中であるかを検出し、それらをコンパイル済みとしてマークします。カーネルが自分のフォルダにある場合は、sudoは必要ありません。

以下のようなメッセージが表示されることがありますが、Enterキーを押すことでスキップすることができます - これらは通常、新しいカーネル機能です。

しかし、localmodconfigは完璧ではありません!現在使用していない部分があると、対応しているすべてのコンテンツが検出されないことがあります。そのため、手動で有効にする必要があります。また、このステップを完全にスキップして、代わりに次のコマンドを使用することもできます。これにより、現在使用されているものと同じオプションで新しいカーネルがコンパイルされます。

そのようにしたいが、以前にlocalmodconifgコマンドを使用したことがある場合は、次のようにします。

sudo make clean

これはクリーンなビルドになります。以前にこのソースコードでカーネルをコンパイルしたことがある場合にも、このコマンドを使用すべきです。

その他の構成

カーネルソースフォルダの中に、.configというファイルがあります。これは、GCCがコンパイルするものを選択するために使用するものです。手動で編集する代わりに(お勧めしません)、いくつかの端末ツールを使用します。これにより、コンパイルオプションの選択が容易になります。

これが終わったら、さらに微調整を行う。

sudo make nconfig

カラーメニューがポップアップ表示されます。カーネルの設定メニューです。移動は矢印キーで行います。右矢印キーを押すと、横に「--->」と表示された項目が展開されます。左矢印キーを押して、これらのサブメニューの外に移動します。

スペースバーを押すと、メニューの横にある<gt;または[]マークが表示され、メニュー項目が切り替わります。これにより、さまざまなメニューオプションが循環します。内部で*やMが表示されている場合は、特定のカーネルコンポーネントがコンパイルされます。両者の違いは、Mオプションが必要なときにロードされることだけです。あまり使用しないドライバをコンパイルする場合に有効かもしれません。

特定のスイッチの機能について詳しく知りたい場合は、F2キーを押してください。 コンパイルされているものについての有益な説明が表示されます。

終了したら、F9ボタンを押して保存し、終了してください。

カーネルのコンパイルとインストール

カスタム make ファイルを作成したので、カーネルをコンパイルする必要があります。

sudo make -j$(nproc --all)

ウェブからカーネルソースをダウンロードした場合は、sudoは必要ありません。コマンドの後半は、カーネルのコンパイル時間を短縮するために、すべてのCPUカーネルを使用するようにします。これは、あまり支障なく他の作業にコンピュータを使いたい場合は排除するか、他の数字(例えば-j2)に変更することができます。しかし、これではコンパイルが遅くなってしまいます

このプロセスには長い時間がかかることがあり、コンパイルを選択する量が少ないほど短くなり、それでも忍耐が必要です。

その後、このコマンドを入力すると、カーネルの残りの部分のコンパイルが終了します。

sudo make modules_install

実際にこのカーネルを使用するには、以下のコマンドを入力する必要があります。

sudo make install

これにより、カーネルが自動的に /boot フォルダにコピーされ、適切に動作するためのファイルが生成されます。

カーネルを交換するためにgrubを使用する

新しいカーネルをインストールした後に再起動すると、システムが動作しなくなることがあります。これは通常、カーネルが正しくコンパイルされていない(つまり、コンピュータがうまくサポートされていない)ことが原因です。例として、私はノートパソコンを所有しています。これを防ぐには、GRUBを編集して、古いカーネルに切り替えられるようにすることをお勧めします。そのためには、次のコマンドを使用します。

sudo nano /etc/default/grub

GRUB#U HIDDENŠU TIMEOUT と GRUBŠU HIDDENŠTIMEOUTŠquiet 行の前に Š フラグを置く。その後、以下のコマンドを実行して、これらの変更を保存してください。

sudo grub-mkconfig -o /boot/grub/grub.cfg

これで、コンピュータを再起動すれば、新しいカーネルがうまくいかない場合、古いカーネルに切り替えることができます。アドバンスドオプションのメニュー項目から、起動させたいカーネルを選択するだけです。うまくいったら、おめでとうございます。自分でコンパイルしたカーネルを使用することになります。

もっと多くのカーネルや他のプログラムをコンパイルすることに興味はありますか?

写真提供:chombosan/Shutterstock

  • 2021-03-15 10:33 に公開
  • 閲覧 ( 24 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ