読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Gentoo】Linuxのカーネル本体とモジュール、ファームウェア、ヘッダ

Gentoo Linux Linux

"Gentoo Linux"では、Linux カーネルソースコードで入手することになります。

カーネルコンパイル時には、どの機能を本体にスタティックに組込むか、ローダブルモジュールにする(必要なときにだけロードする)か、コンフィグレーションで決めます。 コンフィグレーションでは、ncurses 対応のmake nconfig が無難だと思いますが、ncurses すら無い状況ではmake menuconfigで地道にやっていくことになります。(GUI が既にインストール済であれば GTK+ か Qt でも可能ですが、 Gentoo で Stage 3 からインストールする際には GUI がありません。)

コンパイルmake ですが、インストールは、カーネル本体はmake install、モジュールはmake modules_install です。

ファームウェアのインストール

Linux カーネルソースコードの配布時には、ファームウェアも同梱されています。そこにはプロプライエタリ*1のバイナリファイルもあります。 ファームウェアもしも必要でインストールしたいときには、make firmware_install でも可能です。

しかし Gentoo では、ファームウェア用のパッケージ sys-kernel/linux-firmware として別途に提供しています。 そのため、sys-kernel/linux-firmware をインストールすべきで、make firmware_install はしない方がよいです。

また、sys-firmwareカテゴリ内に各パッケージ毎に提供**もされています。

さらに、sys-kernel/linux-firmware をインストールするが、/etc/portage/savedconfig/sys-kernel/linux-firmware-${PVR}の形式で用意される設定ファイルを編集してインストールするファイルを選ぶことも可能です。 勿論、このような面倒なやり方になっているのは、プロプライエタリを排除可能にしたり、必要なものだけインストールしたりすることを可能にするためです。 具体的に言うとつまり、ディスクの消費を少しでも減らしたいという場合や、フリーソフトウェア主義者だが手元のハードウェアを動かすための範囲でだけ妥協をしたいという場合がこれに当たります。

ちなみに、実用性に乏しいですが、 FSFGNU では linux-libre というプロジェクトをやっていますので、関心があれば閲覧してみるとよいですが、プロプライエタリを完全排除するといかに実用性が無いか(プロプライエタリがいかに入り込んでいるか)を証明するようなものです。例えば IntelAMD の CPU で動くマイクロコードでさえも排除されています。(まるで使い物になりません。)Gentoo は、linux-libreのパッケージを提供していません。

追記

カーネル本体のソースコードアーカイブに同梱のファームウェアよりも、sys-kernel/linux-firmware内のファームウェアの方が多いです。

sys-firmwareカテゴリ以外でもファームウェアが提供されるパッケージがあるようです。

また、Linux が配布していないファームウェアもありますから、そのファームウェアをインストールするためのパッケージもあります。

ヘッダのインストール

Linux では、カーネル本体のソースコード分けて、ヘッダファイルを配布しています。 こうしたヘッダファイルというのはつまり、ほかのソフトウェアが Linux を利用するときに、必要に応じてビルド時にスタティックに組込むためのファイルです。 カーネル本体に同梱をしてしまうと、カーネルをアップグレードした際にトラブルが起こる可能性があるからです。詳しくは Torvalds 氏が書いています

バイナリで配布するディストリビューションでは、こうしたカーネルのヘッダファイルをインストールすることは必須ではありません。 何らかのソフトウェアをソースコードからビルドしたいときに必要に応じてインストールするように、パッケージが提供されています。

Gentoo はおよそ全てをソースコードからビルドするので、カーネルのヘッダファイルは事実上必須になります。 Linux のヘッダファイルをインストールするためのパッケージとして、sys-kernel/linux-headers が提供されています。

ただ、 GentooLinux カーネル以外に FreeBSD カーネルもありますから、「Linux でも FreeBSD でもいいからカーネルのヘッダファイルが必要だ」というソフトウェアのために virtual/os-headers というパッケージも提供されていて、 glibc や openrc、util-linux などのパッケージは virtual/os-headersdependency にしています。

Gentooでは、インストール作業をしていれば自ずとvirtual/os-headersはインストールされることになりますから、普段は意識する必要はありません。

*1:ここでは、再配布は許諾されているが、リバースエンジニアリングや改変が禁止されているもの、 Gentoo では freedist という名称で呼んでいるライセンス形態です。