独自の Linux カーネルを構築します。 Linux カーネルが「イメージ」と呼ばれる理由

30.07.2019 写真とビデオ

今日は、できるだけ明確かつ簡潔にお話したいと思います。 Linux/UNIX カーネル管理。このトピックでは、シェルを使用してカーネルとカーネル モジュールに関する情報を取得する方法、動作中にカーネル モジュールをロードおよび削除する方法、接続されている/無効になっているモジュールが必要かどうかを確認する方法、設定する方法について説明します。 オペレーティング·システム必要なモジュールをダウンロードします。

一般情報

接続されているモジュールのリストを表示します。 この瞬間助けがあれば可能 チーム:

プリントサーバー:/tmp/123# lsmod ipv6 で使用されるモジュール サイズ 235396 10 ループ 12748 0 parport_pc 22500 0 parport 31084 1 parport_pc snd_pcm 62660 0 snd_timer 17800 1 snd_pcm snd 45636 2 _timer サウンドコア 6368 1 snd snd_page_alloc 7816 1 snd_pcm psmouse 32336 0 serio_raw 4740 0 pcspkr 2432 0 i2c_piix4 7216 0 i2c_core 19828 1 i2c_piix4 ac 4196 0 ボタン 6096 0 evdev 8000 0 ext3 105576 5 jbd 39476 1 ext3 mbcache 71 08 1 ex t3 sd_mod 22200 7 ide_cd_mod 27684 0 cdrom 30176 1 ide_cd_mod ata_generic 4676 0 ahci 23596 6 リバタ 140448 2 ata_generic、ahci scsi_mod 129548 2 sd_mod、リバタ ドック 8304 1 リバタ e1000 102656 0 piix 6568 0 ide_pci_generic 3908 0 ide_core 96168 3 ci_generic サーマル 1 5228 0 プロセッサ 32576 1 サーマル ファン 4196 0 サーマル_sys 10856 3 サーマル、プロセッサー、ファン

上の例では、システムに多数のモジュールがロードされていることがわかります。 それらのほとんどはカーネルに付属しており、ライセンスは無料です。 独自のモジュール (NVIDIA ビデオ アダプター ドライバーなど) もあります。 したがって、モジュール方式のアプローチでは、プロプライエタリなライセンスで許可されていれば、フリーでないコンポーネントをカーネルに含めることができ、これらのモジュールをハードウェア製造元から入手する必要がなくなります。

この例では、対応するモジュールがビデオ、SATA、SCSI、フロッピー ディスク、サウンド カードなどのデバイスをサポートしていることもわかります。 ネットワークデバイス、IPV6 など、ext3 などのファイル システムのサポート、および Sun のリモート プロシージャ コール (RPC)。

その上 モジュール名 lsmod コマンドでは、モジュールのサイズ、ユーザー数、ユーザー名も表示されます。

modinfoコマンド 1 つ以上のモジュールに関する情報を提供します。

カーネルサーバー:/tmp/123$ /sbin/modinfo ipv6 ファイル名: /lib/modules/2.6.26-2-686/kernel/net/ipv6/ipv6.ko エイリアス: net-pf-10 ライセンス: GPL 説明: Linux の IPv6 プロトコル スタック作者: 数十のキャストが依存: vermagic: 2.6.26-2-686 SMP mod_unload modversions 686

上の例では、コマンドが 改造情報に、ipv6 モジュールに関する情報を示します。これには、ファイル名とパス、ライセンス、説明、モジュール作成者などのパラメータが含まれます。モジュール パラメータはモジュールによって異なる場合があります。

特に触れておきたいのは ファイル名パラメータ、モジュールファイルへのパスとファイル名が含まれます。 ipv6 モジュールのファイル名は次で終わります。 .ko、これは、このモジュールが以下に属していることを示しています。 カーネルバージョン 2.6。 以前に カーネルバージョン - 2.4、で終わるモジュール名 .o)。 ご覧のとおり、モジュールは /lib/modules/2.6.26-2-686/ ディレクトリのサブディレクトリにあります。 この道、ディレクトリ 2.6.26-2-686 は、カーネル バージョン (およびスクリプトの作成で積極的に使用される uname -r コマンドの出力) に対応します。 サブディレクトリ構造 指定されたディレクトリカーネル モジュールとモジュールの目的の関係を反映しています。以下の例がこれを明確に示していると思います。

カーネルサーバー:/tmp/123# ls -l /lib/modules/2.6.26-2-686/kernel/ total 12 drwxr-xr-x 3 root root 1024 Oct 1 15:40 Arch drwxr-xr-x 3ルート root 4096 10 月 1 日 18:02 暗号 drwxr-xr-x 54 ルート root 1024 10 月 1 日 15:40 ドライバー drwxr-xr-x 51 ルート root 3072 10 月 1 日 18:02 fs drwxr-xr-x 6 ルート root 1024 10 月 1 18:02 lib drwxr-xr-x 37 root root 1024 Oct 1 15:40 net drwxr-xr-x 11 root root 1024 Oct 1 18:02 サウンド

この例では、カーネル モジュールがサブディレクトリに配置されていることがわかります。 fsこれは、ファイル システム モジュールがここにあることを示唆しています。 - モジュール サウンドカード等々。

どうやって知るのですか どのようなカーネルモジュールが必要か、どれが削除できるのでしょうか?

それは簡単です: カウンターの場合 によって使われた がゼロに等しい場合、カーネル モジュールは誰にも、何にも使用されません。 したがって、削除することができます。

カーネルモジュールの削除チームとして起こる rmmodモジュール名.

操作中にリモート モジュールが必要になる場合があります。モジュールをロードするには、次のコマンドを実行する必要があります。 インモッド/path/to/module.ko

insmod を他のコマンドと組み合わせて使用​​する興味深い例:

# uname -r 2.6.27-ovz-smp-alt9 # insmod /lib/modules/`uname -r`/kernel/drivers/block/floppy.ko # rmmod フロッピー # modinfo -F ファイル名フロッピー /lib/modules/2.6 .27-ovz-smp-alt9/kernel/drivers/block/floppy.ko # insmod $(modinfo -F filename floppy) # lsmod | grep フロッピー フロッピー 58244 0

他にもあります チームのために モジュール管理: 。 このコマンドの特徴は、モジュール間の依存関係を考慮してモジュールを削除/追加することです (モジュール間の依存関係はファイルに書き込まれます) /lib/modules/version/modules.dep)。 使用例:

# modprobe -r vfat vfat: デバイスまたはリソースがビジーです # lsmod | grep fat vfat 13132 1 fat 38744 1 # umount /windows/D # modprobe -r vfat # modprobe -v --show vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/ fat/fat.o /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o # lsmod | grep fat # modprobe -v vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o /lib/modules/2.4.21-37.0.1.EL の使用/kernel/fs/fat/fat.o シンボル バージョン プレフィックス "" /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o /lib/modules/2.4 の使用.21-37.0.1.EL/kernel/fs/vfat/vfat.o # lsmod | grep fat vfat 13132 0 (未使用) fat 38744 0

上で述べたように、カーネル モジュールには相互に依存関係があり、それはファイルに書き込まれます。 /lib/modules/version/modules.dep. このファイル depmod コマンドによって生成され、実行時にディレクトリ構造が調べられます。 /lib/modules/current_kernel_version/そして依存関係に関する情報を生成します。

Linux には設定ファイルがあることにも注意してください。 /etc/modules.conf、彼はそこに向き直って、 モッドプローブそして デブモッド。 このファイルは主にモジュールのエイリアスを調整するために使用されます。 一部の OS では、次のような異なる構成ファイルが使用されます。 /etc/modprobe.confまたはディレクトリ 設定ファイル - /etc/modprobe.d/。

現在の Linux カーネルに関するもう 1 つの優れた情報源は、次の場所にあります。 /boot/config-2.6....これを使用すると、十分な情報 (たとえば、カーネルが cifs ファイル システムをサポートしているかどうか) を取得できます。

Samba-server:~# grep CONFIG_SMB_FS /boot/config-2.6.32-5-686 # CONFIG_SMB_FS は設定されていません samba-server:~# grep CONFIG_CIFS /boot/config-2.6.32-5-686 CONFIG_CIFS=m # CONFIG_CIFS_STATSは設定されていません CONFIG_CIFS_WEAK_PW_HASH=y CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y # CONFIG_CIFS_DEBUG2 は設定されていません CONFIG_CIFS_DFS_UPCALL=y CONFIG_CIFS_EXPERIMENTAL=y

それが今日のすべてです。 いつものように、皆様のコメントをとても嬉しく拝見させていただきます! では、コアを組み立てる方法を学びます。

よろしくお願いします、マクシム!

GNU/Linux をベースにした大規模なオペレーティング システム ファミリ。 これらのコードはオープンで、自由に配布され、無料であるということを聞いたことがあるでしょう。 彼らは言う、あなたが望むものを誰でも連れてってください、しかし条件だけです GPLライセンス観察してください。これはまったく難しいことではありません。 しかし、この現象の本質は何か、その意味は何なのかを十分に明確に説明している人はほとんどいません。 そこで、そのような説明を試みます。

本質を簡単に言うと

すべては 1991 年に始まり、フィンランドの学生 Linus Torvalds が新しいオペレーティング システムのカーネル コードを公開したときに始まりました。 Linuxシステム。 なぜ野外で? 彼がサポートしてくれたから。 しかし、おそらくあなたはすでにこれを知っています(または簡単に見つけます)。 明確な分類が必要な点に注目していきます。

Linux

Linux はオペレーティング システムではなく、単なるカーネルです。 コンピューターを起動し、そのコンポーネント (「ハードウェア」) を機能させるために必要な一連のソフトウェア ソリューション。他のプログラムの機能の基礎となります。

GNU

GNU - キット 単純なアプリケーション、上記のカーネルが登場する前から存在していました。 これらのプログラムを使用すると、ユーザーは画面をただ見つめるだけでなく、コンピュータと少なくともある程度の対話を実行できるようになります。 もちろんソースコードも公開されています。

GNU/Linux は単なるカーネルではなく、OS です。 GNU の代わりに、Android の Dalvik など、他のものが存在する可能性があります。

運転手

テクノロジーは発展しており、コンピューターハードウェアの数は増加し、機器は進化しています。 そして、すべての製品が動作するにはドライバーが必要です。 そのため、一部のドライバーはコアに直接ねじ込まれています。 GNU や Linux のように無料 (フリー ソフトウェア) であれば、コードは確実にオープンです。

適切な無料ドライバーがない場合は何もできず、独自のドライバーをインストールする必要があります。 コードがオープンかどうかは、ハードウェアのメーカーにのみ依存します。

アプリケーション

カテゴリに関連するカスタム アプリ オープンソース、多くの場合、異なるオペレーティング システム用のバージョンで製造されています。 これらは Linux の一部ではありません。 確かに、特定のディストリビューションの標準であるものもあれば、 グラフィカルシェル、ただしカーネルの一部ではありません。

当然のことながら、サポートされているすべてのオペレーティング システムについて、すべてのオプションのコードが公開されています。 同じ状況がさまざまな公益事業にも当てはまります。

誰が作るのか

Linux カーネルは、愛好家のグループによって改良されています。 ライナス・トーバルズ自身が参加することもあります。 アーカイブにパックされたカーネル コードは、後で独立してコンパイルするために kernel.org からダウンロードできます。

ドライバーは、無料の場合でもコミュニティによって作成されることがよくあります。 プリンター、スキャナー、ビデオカード用、 Wi-Fiアダプター...一般的に、何のためにたくさんあります。

たとえば、Gutenprint パッケージは、多くのプリンター モデル用のドライバーのセット全体です。 さらに、印刷品質は、多くの場合、メーカーの「ネイティブ」ドライバーを使用したときに生成されるインジケーターに匹敵します。

場合によっては、ハードウェア メーカー自体が、GPL や BSD などの適切なライセンスに基づいてコードを公開することがあります。 このような出来事は通常、オープンソース支持者の間で言葉では言い表せない喜びを引き起こします。

すでにご想像のとおり、 カスタムアプリケーションコミュニティまたは個人の愛好家によって作成されることもあります。 しかし、営利企業は、自社の製品の一部をフリー ソフトウェアの形で国民に提供することで、自社を宣伝することも好みます。 印象的な例: オフィススイート OpenOffice.org は長い間 Oracle によって公開されていました。

さらに、配布キット全体を作成する企業もあります。 Red Hat、SuSE、Xandros は、すぐに使用できるバイナリ アセンブリに対して料金を請求しますが、コードを隠す権利はありません。 つまり、これらのコードは、どのように処理されるかに関係なく、オープンなままにしておく必要があります。 これは GPL ライセンスの要件です。

誰が使うのか

プログラマーはソフトウェアを見て、「これは良いことですが、もっと良くできるはずだ!」と考えます。 開発者の Web サイトからコードを含むアーカイブをダウンロードし、それを改善します。 彼に参加を希望する専門家のグループが加わり、新しいプロジェクトが生まれます。

これは、「フォーク」がどのように現れるかです(英語の「fork」から、 この場合「支店」と訳されます)。 既存のプログラムのコードベースに基づいた新しいプログラム。

たとえば、優れたオーディオ プレーヤー Amarok から、さらに優れたオーディオ プレーヤー Clementine が作られています。 そしてパッケージから オフィスアプリケーション OpenOffice.org - LibreOffice、急速に発展しており、非常に有望です。

したがって、この原則を使用してオペレーティング システム全体のクローンが作成されます。 無料の CentOS OS は、有料の Red Hat Enterprise Linux のソース コードからコンパイルされています。 もちろん、Red Hat の上司たちはイライラして肘を噛んでいるでしょうが、何もできないのです。 ソース彼らのものではありません。

ただし、この場合、変更は主に登録されたロゴを切り取ることになりますが、コードの公開義務がなければ、CentOS の存在自体が原理的に不可能になります。

結論

オープンソースは、特に Linux および一般的なすべてのフリー ソフトウェアの基本的な概念です。 コードは自分のプロジェクトに使用したり、コミュニティの取り組みを通じて無害かどうかを確認したり、研究したり、開発に参加してスキルを向上させたり、崇高な目的で人々を改善したり支援したりすることができます。

特定の GNU/Linux ディストリビューションにとって重要なソフトウェアのバイナリ アセンブリがありませんか? ドライバーはカーネルに含まれていないのでしょうか? 私たちはソース コードを含むアーカイブを取得し、解凍し、アセンブリ手順を読み、コンパイルし、インストールし、使用しました。 メーカーに依存したり、特定のオペレーティング システムに縛られたりすることはありません。これが真の自由です。

過去の出版物:

組み立て Linux カーネル
親愛なる読者の皆さん、こんにちは。 今日はそんな面白い活動についてお話します Linuxカーネルの構築方法。 カーネルを自分でアセンブルする必要があるのはなぜですか? 実際には、多くの理由が考えられます。 追加機能カーネル、お使いのコンピュータに合わせてカーネルを最適化し、カーネルを最新バージョンに更新します。 この記事では、カーネルに cryptoloop サポート (ループバック暗号化デバイス) を含める問題を解決する一環として、ソース コードの取得、Linux カーネルの構成、コンパイル、システムへのインストールのプロセスを説明します。

ソースコードの取得
まず最初にソースコードを取得する必要があります。これは可能です 違う方法そしてさまざまな情報源から。 システム リポジトリとカーネルの公式 Web サイトの 2 つだけを考慮することを提案します。 リポジトリには、公式 Web サイトにあるものよりも古いバージョンのカーネルが含まれている可能性が高くなりますが、これらのソースには、使用している製品の製造元からのパッチと修正が含まれている必要があります。 Linuxディストリビューション。 何も必要ない場合は、このアプローチをお勧めします。 新技術または、新しいカーネルでのみサポートされている機能。 ターミナルに次のように入力すると、システムのリポジトリに含まれるカーネル ソースのすべてのバージョンを表示できます ( Ubuntu Linux、他のディストリビューションではパッケージ名が異なる場合があります):

apt-キャッシュ検索linux-source

このコマンドにより、利用可能なパッケージがリストされます。


ご覧のとおり、私は現在のバージョンのパッケージと 3.5 バージョンのパッケージしか持っていません (実際には 現行版カーネルも 3.5)。 この方法で利用可能なカーネルのリストを拡張するには、追加のリポジトリを接続する価値があります。 コマンド sudo apt-get install linux-source を使用してカーネルを取得できます。

linux-source - ソースパッケージの名前。場合によっては異なる場合があります。
コマンドが完了すると、/usr/src ディレクトリにファイル (私の場合は linux-source-3.5.0.tar.bz2) が表示されます。 フォルダーに移動してアーカイブを解凍し、便宜上シンボリック リンクを作成しましょう。

Cd /usr/src sudo tar -xjvf linux-source-3.5.0.tar.bz2 sudo ln -s linux-source-3.5.0 linux

一番必要な場合は 最新バージョンカーネルは、Web サイト kernel.org からいつでもダウンロードできます。 ウェブサイトのレイアウトは次のようになっていることに注意してください。 安定版テストと変更を目的としたカーネルとバージョン (通常、名前にはリリース候補の略語「RC」が含まれます)。 システムに不必要な問題が発生したくない場合は、安定バージョンをダウンロードすることをお勧めします。

ソースを含むアーカイブを /usr/src フォルダーに保存しましょう。 生成されたアーカイブを解凍するには、追加のユーティリティをインストールする必要がある場合があります。

Sudo apt-get install xz-utils

ここで、リポジトリからカーネルをダウンロードする場合と同様に、ソース アーカイブを解凍してリンクを作成する必要があります。

Cd /usr/src sudo tar -xpJf linux-3.8.5.tar.xz sudo ln -s linux-3.8.5.tar.xz linux

設定とコンパイル。
ここからが最も興味深い部分です。 始める前に、いくつかインストールしましょう 追加パッケージ:

sudo apt-get install build-essential kernel-package libncurses-dev

作成いたします 新しい構成、現在システムで使用されているカーネルに基づきます。

Cd /usr/src/linux sudo make oldconfig

さらに設定すると 新しいバージョンシステム内にあるカーネルよりも古いカーネルが存在する場合、現在のカーネルの構成にないパラメータがシステム内に存在する可能性があります。 この場合、プログラムは選択を求めるメッセージを表示しますが、Enter キーを押すだけでデフォルト値のままにすることができます。 いずれの場合も、構成はまだ完了していません。 これで、構成作成メニューから必要な設定を行うことができます。

Sudo make menuconfig

設定プログラムがターミナルで起動します。

ここでは、ナビゲートしやすいように構成オプションがセクションに分割されています。 上で述べたように、カーネルに cryptoloop サポートを含める必要があります。 これを行うには、「デバイス ドライバー」セクションに移動し、そこから「ブロック デバイス」サブセクションに移動します。

「Cryptoloop Support」パラメータがあり、その横に文字「M」があります。これは、暗号化デバイスのサポートが、modprobe コマンドで有効にできるカーネル モジュールとして追加されることを意味します。 このテクノロジーが常にサポートされるように、このテクノロジーのサポートをカーネルに直接組み込む必要があります。 フォーカスを「Cryptoloop Support」パラメータに移動し、スペースバーを押します。 文字「M」は記号「*」に置き換える必要があります。これは、このテクノロジーのサポートがカーネルに「組み込まれる」ことを意味します。 スペースが入っている場合は、そのテクノロジーがまったくサポートされないことを意味するので注意してください。

変更を保存するかどうかを確認するメッセージが表示されるまで、「Tab」キーを押して「終了」ボタンをクリックします。

私たちは「はい」と答えます。 設定が正常に完了しました。
コンパイルを始めましょう。 まず、以前のアセンブリから残っているファイルを削除します。初めてアセンブリを開始する場合は、コマンド sudo make-kpkg clean を実行する必要はありません。

コンパイルを開始しましょう:

Sudo make-kpkg -j4 --initrd --append-to-version=-mykernel kernel_image kernel_headers

J4 - コンパイルに使用するスレッドの数を示すフラグです。 コンパイルを大幅に高速化します マルチコアプロセッサ。 ここでの数字 4 は 4 つのスレッドを示します。 システムが「認識」するプロセッサのコアの数と同じ数のスレッドをインストールします。
-mykernel - カーネルが手動でコンパイルされたことを示す接頭辞。変更できますが、実際には何も影響しません。

コンパイルプロセスが始まりました。 コンピューターの能力に応じて、10 分から数時間かかる場合があります。

システムへのカーネルのインストール

コンパイルが完了すると、拡張子「deb」を持つ 2 つのファイルが /usr/src ディレクトリに表示されます。 インストールパッケージ新しいカーネルは、dpkg ユーティリティを使用してインストールできます。

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

おめでとう! カーネルがインストールされ、システムはデフォルトでこのカーネルで起動しますが、新しいカーネルに問題がある場合は、起動画面で古いカーネルを選択することでいつでも古いカーネルで起動できます (Grub)。 これで今日の記事を終わります。読者の皆様の成功を祈っています。

Linux カーネルの再構築は非常に興味深いビジネスですが、何らかの理由で初心者を怖がらせることがよくあります。 ただし、複雑なことは何もなく、Linux カーネルのコンパイルは、他のプログラムをソースからビルド (コンパイル) するのと同じくらい難しくありません。 現在のカーネルに含まれていない機能が必要な場合、または逆に、何かを無効にしたい場合には、カーネルの再構築が必要になることがあります。 全て さらなるアクション Ubuntu Linux 上で実行します。

ユーティリティのインストール

Linux カーネルを構成およびビルドするには、カーネルのビルドおよび構成に必要ないくつかのパッケージ (kernel-package、build-essential、libncurses-dev) をインストールする必要があります。 これは次のコマンドで実行できます。

sudo apt-get install build-essential kernel-package libncurses-dev

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

次に、カーネルのソースコードをダウンロードする必要があります。 Ubuntu用のカーネルをダウンロードします。 ダウンロードできます 特定のバージョンたとえば、現在使用しているカーネル、または最新バージョンをダウンロードします。 使用している Linux カーネルのバージョンを確認するには、-r オプションを指定して uname コマンドを実行します。

名前 -r

コマンドの出力は次のようになります。

$uname -r 2.6.27-11-generic

カーネル ソースを含むパッケージの名前は通常、 次のビュー: Linux ソースのバージョン。 たとえば、カーネル バージョン 2.6.24 の場合: linux-source-2.6.24。 最も 最新バージョン Ubuntu リポジトリ内のカーネルは、最後にバージョンを指定せずに、単に linux-source と呼ばれます。 最新バージョンのソースコードをインストールするには Ubuntu カーネル Linux の場合は、次のコマンドを実行します。

sudo apt-get install linux-source

このコマンドは、カーネル ソースをダウンロードし、/usr/src ディレクトリに配置します。 この記事の執筆時点では、ダウンロードしたカーネルの最新バージョンは 2.6.27 であり、これを使用します。 /usr/src ディレクトリに移動して ls コマンドを実行すると、ファイルの中に linux-source-2.6.27.tar.bz2 というファイルがあることがわかります。 Linuxカーネル(Ubuntuカーネル)のソースコードです。

カーネルソースコードの解凍

/usr/src ディレクトリに移動してカーネルを解凍しましょう。 これを行うには、次のコマンドを実行します。

Cd /usr/src sudo tar xjf linux-source-2.6.27.tar.bz2 sudo ln -s linux-source-2.6.27 linux

カーネル構成

次に、カーネルの構成に進みます。 構成を最初から作成しないように、現在使用されているカーネル構成をベースにします。 現在の構成を取得するには、make oldconfig コマンドを実行します。 ターミナルで実行します。

Cd /usr/src/linux sudo make oldconfig

make oldconfig を実行すると、カーネル構成オプションを含む .config ファイルが作成されます。

make help コマンドを実行すると、Linux カーネルのすべての make オプションに関するヘルプを表示できます。

カーネル構成を変更するには、次のコマンドを使用します。 コンソールユーティリティメニュー構成。 実行するには、次を実行します。

Sudo make menuconfig

特定のカーネル オプションを有効または無効にできるインターフェイスが表示されます。

たとえば、「NTFS 書き込みサポート」オプションを有効にします。 これを行うには、下ボタンを押して「ファイル システム」項目を見つけ、Enter キーを押します。

ファイルシステム設定メニューが表示されます。 このリストで「DOS/FAT/NT ファイルシステム」項目を見つけて Enter キーを押します。

「NTFS 書き込みサポート」に移動し、スペースを押すと、項目の横にアスタリスクが表示されます。 このオプションカーネルに組み込まれます。

ここで「Exit」を選択し(右ボタンを押してから Enter キーを押します)、ユーティリティを終了します。 ユーティリティを終了する前に、変更を保存するかどうかを尋ねるメッセージが表示されます。[はい] を選択します。

カーネルのコンパイル

前のステップで加えた変更を使用してカーネルをコンパイルします。 まず、以前のコンパイルで残っているファイル (存在する場合) を削除するコマンドを実行しましょう。

Sudo make-kpkg clean

最後に、カーネルのコンパイルを開始するには、次のコマンドを実行します。

Sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

-append-to-version スイッチは、コンパイル後に取得されるカーネル イメージ ファイルの名前に文字列 -mykernel を追加するために使用され、カーネルを識別しやすくなります。 -mykernel の代わりに、任意のプレフィックスを使用できます。

カーネルのコンパイルには非常に時間がかかり、コンピュータの能力に応じて数十分から数時間かかる場合があります。

カーネルのインストール

カーネルをコンパイルすると、linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb、linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00 の 2 つの出力ファイルを受け取りました。カスタム_i386.deb。 dpkg -i コマンドを使用します。これにより、カーネルが自動的にインストールされ、GRUB ブート ローダー (ファイル /boot/grub/menu.lst 内) に書き込まれます。 カーネルはデフォルトのカーネルとしてインストールされることに注意してください。そのため、カーネルが起動しない場合は、以前のカーネルを使用して起動し (コンピュータの起動時に GRUB メニュー リストにあるはずです)、手動でカーネルを変更する必要があります。 menu.lst ファイル。 したがって、カーネルをインストールするには、次のコマンドを実行します。

Dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb

新しいカーネルでシステムを起動する

新しいカーネルを使用してシステムの機能を確認してみましょう。 コンピュータを再起動してください。 GRUB ブート ローダー メニューに次のように表示されます。 新商品、新しいカーネルに対応しており、デフォルトで起動するはずです。 すべてがうまくいけば、システムは新しいカーネルで起動します。

約 2,000 万行のコードで構成されるコア Linuxは世界最大のオープンソース プロジェクトの 1 つです。

カーネルとは何ですか

コアは最下位レベルを表します ソフトウェアコンピューターハードウェアと対話するもの。 これは、いわゆる環境で実行されるすべてのアプリケーションの相互作用を担当します。 物理ハードウェアを使用した「ユーザー モード」により、プロセスが ( IPC).

カーネルの種類

カーネルには主に3つのタイプがあります- モノリシック (モノリシック), マイクロカーネル (マイクロカーネル) そして ハイブリッド (ハイブリッド).

例えば Linuxはモノリシックコアですが、 OS Xそして ウィンドウズハイブリッドカーネルを使用します。

マイクロカーネル

マイクロカーネル CPU、メモリ、IPC のみを管理します。 コンピューター上のその他のほとんどすべてのものは追加ハードウェアとみなされ、ユーザー モードで維持できます。 マイクロカーネルは移植性が高いため、 ビデオ カードやオペレーティング システム全体を変更する予定がある場合でも、新しい OS が以前の OS と同じようにハードウェアで動作するのであれば、心配する必要はありません。 マイクロカーネルに必要なディスク容量と RAM も少なくなります。 さらに、プロセスのほとんどがユーザー モードで実行され、システムの重要な部分にアクセスできないため、より安全であると考えることができます。

長所

  • 携帯性
  • RAMとハードディスクの設置面積が小さい
  • 安全性

マイナス

  • カーネルとハードウェア間のソフトウェア抽象化層が追加されるため、システム全体が遅くなる可能性があります
  • プロセスは情報を受け取るために列に並んで待つ時間を無駄にする可能性がある

モノリシックカーネル

モノリシックカーネルは、プロセッサ、メモリ、IPC の管理だけでなく、デバイス ドライバー、管理も含むため、マイクロカーネルの逆です。 ファイルシステムそして システムコール。 モノリシック カーネルには、ハードウェアへのアクセスと動作の速度という点で利点があります。 マルチタスクモードプログラムがメモリまたは別のプロセスから情報を取得する必要がある場合、情報を直接取得できるため、応答を待つキューで時間を無駄にすることがないからです。 一方で、これによっても引き起こされるのが、 特定の困難、 なぜなら 大量カーネル モードで実行されているプロセスは、そのうちの 1 つに問題があるためにシステム全体のクラッシュにつながる可能性があります。

長所

  • もっと 高速アクセス工程から設備まで
  • プロセス自体間の通信がより簡単になる
  • 追加のドライバーをインストールする必要がなく、ハードウェア サポートを簡単に実装できます。
  • キューで待機する必要がないため、プロセスの通信が高速化されます。

マイナス

  • メモリとハードディスクの空き容量を増やす
  • さらなるセキュリティ問題

ハイブリッドコア

ハイブリッドカーネル カーネルは、どの部分をユーザー モードで実行するか、どの部分をカーネル モードで実行するかを自分で決定できます。 通常、デバイス ドライバーと I/O システムはユーザー モードで動作し、システム コールはカーネル モードで処理されます。 このアプローチは、モノリシック カーネルとマイクロカーネルの両方の利点を組み合わせたものですが、ドライバーがハードウェア メーカーに依存しているため、ハードウェア メーカーの注意も必要になります。 さらに、このアプローチには、マイクロカーネル アーキテクチャから引き継がれたパフォーマンス上の問題がいくつか発生する可能性があります。

長所

  • 開発者は、何をカーネル モードで実行し、何をユーザー モードで実行するかを選択できます。
  • モノリシックカーネルと比較してサイズが小さい
  • 他のタイプに比べて柔軟性が高い

マイナス

  • パフォーマンス上の潜在的な欠点
  • デバイスドライバーのインストールはユーザーとハードウェアの製造元によって異なります

Linux カーネル ファイル

大多数では GNU/Linux-system カーネル ファイルは /boot ディレクトリにあります。たとえば、 CentOS 6:

# ls -l /ブート/ | grep linu -rwxr-xr-x 1 ルート root 4221232 12 月 15 日 23:48 vmlinuz-2.6.32-573.12.1.el6.x86_64 -rwxr-xr-x 1 ルート root 4221968 2 月 10 日 01:15 vmlinuz-2.6.32 -573.18.1.el6.x86_64 -rwxr-xr-x 1 ルート root 4221776 2015 年 8 月 14 日 vmlinuz-2.6.32-573.3.1.el6.x86_64 -rwxr-xr-x 1 ルート root 4220144 9 月 23 日 01:29 vmlinuz -2.6.32-573.7.1.el6.x86_64 -rwxr-xr-x 1 ルート root 4220368 11 月 10 日 20:31 vmlinuz-2.6.32-573.8.1.el6.x86_64

名前に vmlinuz が含まれるファイルがカーネル ファイルです。 vmlinuzという名前は世界から来ました UNIX、60年代以降、カーネルファイルは単にunixと呼ばれていました。 いつ ライナス・トーバルズ開発を開始しました Linux 90 年代には、彼はそれを単に Linux と呼んでいました。

この実装はいつ登場しましたか? 仮想メモリ- に リナックスという名前接頭辞「vm」が追加されました ( 仮想メモリ)。 そのため、しばらくの間、カーネル ファイルは単に vmlinux と呼ばれていましたが、ファイルのサイズは増加し続け、時間の経過とともに圧縮され始め、名前の最後の文字が x から z に置き換えられました。 zlib圧縮)。 コアは、次の方法で圧縮されることもよくあります。 LZMAまたは BZIP2また、一部のカーネルは単に zImage と呼ばれます。

/boot ディレクトリには、ファイル initrd.img-version (または initramfs-version)、System.map-version、および config-version も含まれています。 initrd.img-version ファイルはシステムの初期ブートに使用され、その間にカーネル自体が解凍されてロードされます。 System.map ファイルは、スモッグ カーネルをロードする前にメモリを管理するために使用されます。 設定ファイルカーネルパラメータと、コンパイル中にカーネルにロードされるモジュールのリストが含まれます。

Linux カーネル アーキテクチャ

核心部から Linuxモノリシックです - 他のタイプのカーネルと比較して、最大かつ最も複雑です。 これらの欠点を軽減するために、カーネル開発者は、システム全体を再起動することなく、動作中にカーネルにロードできるモジュールを操作できる機能をカーネルに追加しました。

Linuxカーネルモジュール

もしも ウィンドウズもともとすべてが入っていた 必要なドライバーで、ユーザーがしなければならないのは、それらの一部を有効にするだけですか?

これがまさにモジュールの仕組みです Linuxとも呼ばれます。 (LKM) これらは、カーネルがすべてのコンピュータ機器と対話し、すべてのメモリを占有しないようにするために不可欠です。

通常、モジュールはカーネルの機能を拡張して、デバイス、ファイル システム、およびシステム コールを操作できるようにします。 LKMファイル拡張子は .ko です。

# find /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/ -name "*.ko" -type f | トイレ -l 2033

モジュール構造のおかげで、menuconfig で必要なモジュールのみを選択したり、/boot/config* ファイルを編集したり、modprobe、insmod、rmmod などのユーティリティを使用して動作中にモジュールを直接ロードおよびアンロードしたりすることで、カーネルを独自にカスタマイズできます。

カーネルは魔法のようなものではありませんが、コンピューターの動作には不可欠です。 芯 Linux原子核とは異なります ウィンドウズまたは OS Xこれには、システム カーネル レベルでドライバーが含まれており、すぐに使える多くの機能がサポートされているためです。