Top / Software / LinuxKernel

Linux カーネルの FAQ


注意

以上の情報は Linux カーネルの公式バイナリパッケージを対象としています。 カスタムカーネルのつくり方など情報は カスタム Linux カーネルの FAQ にまとめてあります。

CPU に最適化されたカーネルをインストールするには (jessie)

Debian 4.0 (etch) 以降ではカーネルパッケージとして、linux-image-* という名前で用意されています。
通常、Debian をインストールした際にはパッケージの中から CPU に対応したものが自動的にインストールされています。

  • Intel 系 32bit CPU
    • linux-image-3.16-586 (PAE をサポートしない古い CPU はこちら)
    • linux-image-3.16-686-pae
  • x86-64 CPU (AMD64, Intel 64 (例: Intel Core 2))
    • linux-image-3.16-amd64
    • i386 用インストーラで Debian をインストールした場合、上記 686 用パッケージがインストールされます。amd64 用インストーラを使用した場合、以下のパッケージが選択できます。
  • 仮想化機能を有効化したカーネル
    • xen-linux-system-3.2.0-4-amd64
    • Xen 用カーネルのみです。

squeeze から wheezy の変更点

2011-05-21: 現時点では squeeze との違いは以下を除き、無いと思われます。

  • openvz と vserver カーネルが廃止されました。
  • "686"フレーバーが廃止され、"686-bigmem"フレーバーが"686-pae"にリネームされました。

wheezy から jessie の変更点

  • "486"フレーバーが廃止され、代わりに"586"フレーバーが追加されました。
  • xen の i386 カーネルが廃止されました。

カーネルインストール時に自動でブートローダ (GRUB, LILO) の設定を更新

sarge から lenny 迄

GRUB Legacy を使用している場合、 /usr/share/doc/grub/README.Debian の update-grub の項にあるように /etc/kernel-img.conf というファイルを以下の内容で作成すると update-grub を自動的に実行してくれます。

postinst_hook = update-grub
postrm_hook = update-grub
do_bootloader = no

squeeze 以降

GRUB (Legacy, 2 双方) を使用している場合は

/etc/kernel/post{inst,rm}.d/zz-update-grub というファイルがあることを確認します。 これは内部で update-grub を呼び出しています。 /etc/kernel-img.conf は、特に書き換える必要はありません。

参考までに、デフォルトで以下のようになっており、*_hook 関連の設定がなくなっていることが分かります。 squeeze 以降では *_hook 項目は廃止予定となっていますので、もしある場合は *_hook 項目を削除してください。

# Kernel image management overrides
# See kernel-img.conf(5) for details
do_symlinks = yes
do_bootloader = no
do_initrd = yes
link_in_boot = no

また LILO については、squeeze 以降では GRUB と同様、/etc/kernel/post{inst,rm}.d/zz-lilo というファイルが用意されており、これは内部で /sbin/lilo を呼び出しています。 またメンテナスクリプト (post{inst,rm}) から /usr/sbin/update-lilo を呼び出し、/etc/lilo.conf の更新を行います。 これにより、カーネルイメージパッケージを導入・更新する際には LILO も自動的に更新されます。

トラブル

etch のカーネルから lenny 以降のカーネルにアップグレードしたらルートファイルシステムが見えなくなった

Debian では以前のリリースと異なり lenny v2.6.26 カーネルから (Debian インストーラも含め) libata が有効になっています。
libata は SCSI サブシステムを使用している為、/dev/hda, hdb,... という命名規則ではなく、/dev/sda, sdb,... となります。
これにより単純にアップグレードしただけでは、ルートファイルシステムが見えなくなり起動できなくなります。
カーネルのアップグレード後、再起動する前に準備が必要です。
ちなみに上流カーネルバージョン 2.6.33 以降でも CONFIG_IDE (ide-core ドライバ) は廃止予定 (Deprecated) となっています。
今後は パラレル ATA (PATA)、 シリアル ATA (SATA) 問わず、CONFIG_ATA (libata) の移行が推奨されています。

  • 完全に移行するには、CONFIG_IDE を無効化 (=n) し、CONFIG_ATA=m (モジュール) もしくは =y (組み込み) としたカーネルをインストールします。
    • しかし、一部の ATA デバイス、チップセットでは未だ libata 未対応なものもありますので、廃止されるまでの暫定的な対応として、 CONFIG_ATA =m するのと同時に CONFIG_IDE=m と関連ドライバも =m とし、(従って initramfs は必須です。) カーネルコマンドラインに blacklist=(IDE ドライバモジュール名),(IDE ドライバモジュール名),(IDE ドライバモジュール名),... となるようブートローダに設定、正しく起動できるか試した上で blacklist 付きで運用するか、完全に CONFIG_IDE=n にしてしまう 方法もあります。
      • 例: Intel PIIX IDE の場合、IDE driver: piix を blacklist に入れて再起動し、lsmod 等で libata driver: ata_piix がロードできているかチェックします。
      • initramfs-tools を使用している場合は、カーネルコマンドラインに追記する形でもよいし、/etc/modprobe.d/ide-blacklist.conf というファイルに
        blacklist ide-core
        blacklist ide-gd_mod
        blacklst ide-cd_mod
        blacklist piix
        などと記載し、
        # update-initramfs -k (対象カーネルのバージョン) -u
        を実行します。
  • 移行後は デバイスファイル名が /dev/hda などから /dev/sda に変化しますので、 libata を有効化したカーネルで起動する前に /etc/fstab, /etc/lilo.conf, /boot/grub/menu.lst 等の設定ファイルで /dev/hda などとなっている箇所を全て /dev/sda などに変更する必要があります。
    • ただし libata を無効化しているカーネルと共存している場合は、 単純に /dev/sdx 規則に書き換えてしまうと今度は libata が無効なカーネルで起動できなくなるので、 ファイルシステム作成時にわり振られる UUID (汎用一意識別子) の利用もしくは ボリュームラベル (LABEL) をつけて、UUID や LABELで設定ファイルに指定しておくと安全かつ /dev/xdx の命名規則に惑わされなくなります。 (但し全ての設定ファイルが対応しているわけではありません。)
      /etc/fstab ファイル (mount コマンド) ではパーティションの UUID や LABEL を認識します。
      lenny 以降ではデフォルトで /etc/fstab に UUID を指定しています。 sarge 以降の Debian インストーラでインストールした場合、ディスクパーティショニング (partman) 中に LABEL を設定できます。
      • UUID または LABEL をチェックするには、util-linux パッケージに含まれる、blkid を実行する。
        $ /sbin/blkid | grep /dev/sda1
        /dev/sda1: LABEL="rootfs" UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
  • UUID は以下の方法でもチェックできる。
    $ ls -l /dev/disk/by-uuid | grep sda1
    lrwxrwxrwx 1 root root 10 2010-08-24 12:00 ''xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'' -> ../../sda1
  • lenny デフォルトインストール後の /etc/fstab はこの様になっている。
    UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /               ext4    errors=remount-ro 0       1
  • LABEL を新たに付けるには、 ext3 なら
    # tune2fs -L hogehoge /dev/hdx1
    /etc/fstab は
    LABEL=hogehoge / ext3 defaults 0 1
    GRUB Legacy の場合は、/boot/grub/menu.lst に
    kernel /boot/vmlinuz root=LABEL=hogehoge
    と設定する。
    LILO (/etc/lilo.conf) も同様に。
  • GRUB 2 では update-grub 実行時に自動的にパーティションの UUID を読み取って、/boot/grub/grub.cfg に書き込むため、何もする必要はありません。
  • squeeze 2.6.32-11 以降では
    # dpkg-reconfigure -plow linux-base
    を実行すると、ある程度の設定ファイル (/etc/fstab, /etc/default/grub, /boot/grub/menu.lst, /etc/lilo.conf, /etc/uswsusp.conf など) を自動的に書き換えてくれます。
  • LABEL は可読性が良いですが、衝突の危険性があります。UUID は衝突する心配はありません。
  • その他の設定ファイルは初回の再起動時にエラーが出ても良いならば無理に書き換える必要はありません。
    • /etc/auto.* (autofs) は適宜書き換えて下さい。 書き換え方は以下の様な感じで UUID を使うと便利。 /etc/auto.mnt の例:

      sda1 -fstype=ntfs-3g,noauto,user,exec,umask=022 :/dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

    • /etc/default/hddtemp (hddtemp), /etc/default/smartmontools (smartmontools) には デバイスファイル名を書くとむしろ不具合が起きるので、デバイスファイル名を書かないデフォルトの設定ファイルで問題無し。 (UUID を自動で読み取っている)
  • もし何も対処せずに再起動してしまった場合、リリースノートの "4.8.2. アップグレードの後で問題を解決するには'' を参考に復旧してください。

参考:

モジュールが読み込まれなくなった

起動時にモジュールを読み込ませるには, カーネルモジュールに渡すオプションはどこで指定したらいいの? 参照。

PS/2 マウスが動かなくなった

デバイスドライバ:mousedev と、psmouse をロードする。 /etc/modules に上のドライバを二行に分けて追加する。

PS/2 マウスの挙動がおかしくなった

psmouse モジュールの自動認識に失敗したかもしれない。
ブートパラメータに psmouse.proto=bare を指定するか、 psmouse のロード時に proto=bare オプションを加えるとうまくいくかもしれない。

# modprobe -i psmouse proto=bare

bare だと2ボタン、imps だとホイール付きマウスと認識されます。
その他、
bare|imps|exps|lifebook|any
が指定可能。(2.6.36)

pcspkr についての警告メッセージが出る

BTS:540831, BTS:495674

/var/log/syslog をのぞくと、

Aug 15 01:10:50 xxx kernel: [    6.295665] Error: Driver 'pcspkr' is already registered, aborting...

squeeze では alsa-base バージョン 1.0.21+dfsg-1 以降をインストールすると以後メッセージは消える。 (/etc/modprobe.d/alsa-base-blacklist.conf 参照。)
lenny 以前で出る場合は、以下の内容を記載した、拡張子 conf のファイルを /etc/modprobe.d/ 以下に置き、

blacklist snd-pcsp

そして、

# update-initramfs -k (対象のカーネルバージョン、インストール済みカーネル全部なら all) -u

を実行する。

シャットダウン時に自動で電源が落ちなくなった

マシンのACPIの仕様が古いのが原因です。 カーネルのブートオプションに"acpi=force"を加えると良いかも。

カーネルを再構築したい

カスタム Linux カーネルの FAQ 参照

外部カーネルモジュールを構築したい

構築前に、まず各モジュールの README 等のドキュメントを読んで、事前準備を行って下さい。
特に必須となる開発ツールやユーザランドのライブラリ、ヘッダ、 またカーネルコンフィグinitrd の必要性の有無は必ずチェックして下さい。
その際、設定が足りない、もしくは不適切な設定があった等の理由でカーネルのコンフィグと再構築をやり直す必要がある場合は、 カーネル構築と同時に外部カーネルモジュールのビルドを行う方法を選択してください。

  • Debian によらず、v2.6 カーネルにおける外部モジュールの構築には Kbuild インフラストラクチャを利用するのが一般的で、これは カーネルソースのトップレベル Makefile と scripts/ ディレクトリ以下のユーティリティから構成されます。 (linux-kbuild-2.6.x パッケージの中身を見てください。)
    手順は原則以下の通りです。
    • A. 外部カーネルモジュールソースのトップディレクトリに Makefile があり、 これにはモジュールファイル名と構成ソースが記述されています。 場合によっては Kbuild, Kconfig というコンフィグファイルやカーネルソース内のモジュールとの依存関係を記述したファイルも あります。
    • B. A. のファイルとソースコードのあるディレクトリで make modules を実行し、 make プロセス上で Kbuild インフラストラクチャのあるディレクトリ *1 に移動 (-C)、 モジュール出力先ディレクトリを適宜指定 (SUBDIRS もしくは M=`pwd`) します。
    • C. ビルドが正常に終了すると *.ko ファイルがソースディレクトリにあるので これを適切なディレクトリにコピーし、depmod -a を実行します。
  • Debian では以下 1. Debian パッケージ化されたモジュールソースの場合 における方法を推奨していますが、 いずれも Kbuild インフラストラクチャを内部で利用しています。 ユーザーはこのことについて知らずに容易に外部カーネルモジュールを構築できます。
  • 2. Debian パッケージ化されていない場合 については直接 Kbuild を利用する方法を説明しています。

1. Debian パッケージ化されたモジュールソースの場合

以下の手順、上から順番に試してみて下さい。 おそらくいずれかで出来るはずです。

1.1 module-assistant

Module Assistant - Debian Wiki

sarge 以降であれば専用のツールである module-assistant を使うと簡単です。

# aptitude install module-assistant

作業前に /usr/src/linux (ファイル・ディレクトリ、リンク)がある場合は退避します。

# mv /usr/src/linux /usr/src/linux-real

インストール後に以下を実行すると、 開発ツール群 (build-essential)、稼働中のカーネルバージョンと同じカーネルヘッダー (linux-headers-(バージョン) パッケージ) がインストールされカーネルヘッダーのディレクトリから /usr/src/linux へのシンボリックリンクが張られます。

# module-assistant prepare # またはコマンド名を短縮して m-a prepare

もしくは、

# module-assistant

とターゲット無しで実行してダイアログフロントエンドを起動し、"PREPARE" を選択、実行してください。
/usr/src/linux へのシンボリックリンク が適切に張られない場合、 またターゲットのカーネル≠ビルドシステム上でのカーネルの場合は 手動でターゲットカーネルのヘッダーディレクトリに張ってください。

# ln -fs /usr/src/linux-headers-2.6.x-ABI-SUBARCH /usr/src/linux

基本的なコマンドの構文は以下です。

$ module-assistant [オプション] ''ターゲット'' ''ターゲットモジュール''

次にモジュールソースをビルドします。

まずモジュールパッケージのリストを更新します。

# module-assistant update

(情報ファイルは /var/cache/modass に格納されています。)

続いてモジュールのソースを取得し、ビルドします。

1.1.1 単純ビルド

例: cloop を再構築する場合は

# module-assistant get cloop
$ mkdir (作業ディレクトリ)/modass
$ module-assistant --userdir="(作業ディレクトリ)/modass" --kernel-dir /usr/src/linux build cloop

(--userdir オプションは一般ユーザ所有のディレクトリでビルドする場合)

(作業ディレクトリ)/modass 以下に cloop-modules-*.deb があります。

1.1.2 アーカイブ展開後にビルド

カーネルの更新による API の変更等により独自にパッチ等を当てたい場合は、 ソースアーカイブを展開し、パッチを当てて、--not-unpack オプションでビルドします。

# module-assistant get cloop
$ mkdir -p ./modass/usr_src (modass の部分は任意)
$ tar xf /usr/src/cloop.tar.bz2 -C ./modass/usr_src
$ cd ./modass/usr_src/modules/cloop
(patch -p1 < xxx.patch ...etc)
$ cd ../../../../
$ module-assistant --userdir ./modules --not-unpack --kernel-dir /usr/src/linux build cloop

1.1.3 その他

  • --text-mode オプションはフロントエンドを起動せず、コンソールモードで表示します。

  • --force オプションはパッケージビルド済でも強制的にビルドします。

  • ターゲットモジュールに all を指定すると module-assistant 管理下のすべてのパッケージを対象とします。
  • ターゲットモジュールに alli を指定するとインストール済みのモジュールソースパッケージすべてを対象とします。
  • ターゲットモジュールに allu を指定すると展開済みのモジュールソースすべてを対象とします。
  • install ターゲットはパッケージのインストールを行います。(ソースパッケージのビルド・インストールはしない)
  • auto-install (短縮形 a-i)ターゲットは現在稼働中のカーネルに対し、 ソースパッケージのインストール、展開、ビルド、モジュールパッケージのインストールをすべて自動で行います。 auto-build (短縮形 a-b) ターゲットはビルドまで行います。
  • その他のターゲット、オプションは man module-assistant(8) を参照。

1.2 DKMS

squeeze 以降では DKMS というツールもあります。
こちらはカーネルの更新を検出すると自動で外部カーネルモジュールをビルドし、ロードするツールです。

事前にカーネルヘッダーもしくはビルド済みカーネルソースを用意しておきます。

1.3 ビルド済みのカーネルソースが丸ごとある場合

make-kpkg コマンドでビルドしたフルカーネルソースがある場合はこちらを参照してください。

1.4 カーネルヘッダーを使いビルドする

カーネルヘッダーと外部カーネルモジュールソースをインストールします。 例えば alsa の場合は

# aptitude install alsa-source linux-header-(カーネルのバージョン)

alsa のソースを展開し、そのディレクトリの移動

$ tar xf /usr/src/alsa-driver.tar.bz2
$ cd module/alsa-driver/

ビルド開始

$ fakeroot debian/rules clean
$ fakeroot debian/rules KSRC=/usr/src/linux-headers-(カーネルヘッダーのバージョン) \
KVERS=(カーネルのバージョン) KDREV=Custom binary-modules

もしくは、

$ debuild -uc -us --set-envvar=KSRC=/usr/src/linux-headers-(カーネルヘッダーのバージョン) \
--set-envvar=KVERS=(カーネルのバージョン) \
--set-envvar=KDREV=Custom

とかでもビルドできます。 他のモジュールを作るときもほとんど一緒です。

参考
https://lists.debian.or.jp/debian-users/200210/msg00062.html

2. Debian パッケージ化されていない場合

Debian パッケージ化されていない場合、 もしくは 1 の手順で Debian パッケージが出来なかった場合、 残念ながら dpkg/apt の管理外になりますが、 外部カーネルモジュールをビルドする方法はあります。

例として、linux-image-2.6.32-5-686 をターゲットとしたカーネルモジュール (単純なビルド形式のモジュール) を作成したい場合を考えます。
まず、linux-headers-2.6.32-5-686 パッケージをインストールします。
インストール後、外部カーネルモジュールソースのトップディレクトリに入ります。

$ cd /path/to/extmod

カーネル v2.6 対応モジュールの場合は、以下のような Makefile とソースコード (例では subroutine_001.c subroutine_002.c main.c ) があります。
Kbuild や Kconfig といったファイルもあるかもしれません。

obj-m += extmod.o
extmod-y := subroutine_001.o subroutine_002.o main.o
#or,
#extmod-objs := subroutine_001.o subroutine_002.o main.o

ifndef PWD
$(info Info: built-in $$(PWD) variable NOT defined. use result of command `pwd'.)
PWD = $(shell pwd)
endif

UNAME_R = $(shell uname -r)

KSRC = /lib/modules/$(UNAME_R)/build


default: modules

install: modules
       @if test root != $(shell whoami) ; then \
         echo "ERROR: Permission denied." ; \
         exit 1 ; \
        fi

       $(MAKE) modules_install

modules modules_install clean:
        $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) $@

ビルドするシステムで稼働中のカーネル=ターゲットカーネル、即ちビルドするシステムのカーネルが 2.6.32-5-686 ならば (uname -r で確認できます。)

$ make

と実行すればビルド完了ですが、違う場合は以下の通りです。

KSRC (変数名は任意なので、別名の可能性があります) という変数が /lib/modules/`uname -r`/build というディレクトリを指し示していますが、実際に代入されるのは、 /lib/modules/(現在稼働中のカーネルのバージョン)/build となります。
make-kpkg 等で作成したカーネルや公式カーネルヘッダーには実際にシンボリックリンクがあり、 フルビルド済みカーネルソースやカーネルヘッダーのトップディレクトリを指していることが分かります。
しかしターゲットのカーネルバージョンが異なる場合はこれではまずいので、変数 KSRC をビルド中にオーバーライドします。 モジュールソースのトップディレクトリに入り、

make KSRC=/usr/src/linux-headers-2.6.32-5-686

とします。

そのような変数すらなく、ひどい場合は Makefile も無いかもしれません。 そのような場合でも、カーネルヘッダーさえあればビルドできます。

Kbuild というファイルを以下の内容で作成します。

obj-m += extmod.o
extmod-y := subroutine_001.o subroutine_002.o main.o

あとは、

$ make -C /usr/src/linux-headers-2.6.32-5-686 SUBDIRS=`pwd` modules

とコマンドを叩けばおそらくビルドできるはずです。

正常にビルドできれば、extmod.ko があるはずなので、これをターゲットシステムの /lib/modules/2.6.32-5-686/extmod にコピーし、(ディレクトリがない場合は作成してください。)

# depmod -a

してください。

ビルドするシステムで稼働中のカーネル=ターゲットカーネルならば、

# make install

と実行すれば、 /lib/modules/2.6.32-5-686/extra にモジュール extmod.ko がインストールされ、depmod も自動的に実行されます。

こののち、

$ /sbin/modinfo extmod

して以下の様な情報が表示されればシンボル解決はできています。

filename:       /lib/modules/2.6.32-5-686/extmod/extmod.ko
version:        hoge
description:    fuga
author:         foo
license:        GPL
depends:        bar
vermagic:       2.6.32-5-686 SMP mod_unload modversions 686 
parm:           baz

続いて

# modprobe -i extmod

すればロードされるはずです。

起動時にモジュールを読み込ませるには

起動と同時に読み込んでほしいモジュールは /etc/initramfs-tools/modules に

hogemodule1
hogemodule2

という具合に書き、initrd を更新します。

# dpkg-reconfigure linux-image-XXX

逆に読み込んでほしくないモジュールは /etc/modprobe.d ディレクトリ以下に、*.conf という名前のファイルを作成して

blacklist hogemodule1
blocklist hogemodule2

という具合に書き、initrd を更新します。

# dpkg-reconfigure linux-image-XXX

ルートファイルシステムマウント後に読み込んでほしいモジュールは /etc/modules に書きます。

カーネルモジュールに渡すオプションはどこで指定したらいいの?

2.6 系なら、モジュール hogemodule に対して hogeoption を渡したい場合は /etc/modprobe.d/hogemodule.conf というファイルをつくって

options hogemodule hogeoption

と書く。
initrd 読み込みの時点でモジュールを追加オプション付きでロードするには、 initramfs-tools をインストール後、/etc/initramfs-tools/modules に以下のように書き、

hogemodule hogeoption

# update-initramfs -k (対象カーネルのバージョン) -u

します。
ただし、/etc/modprobe.d/hogemodule.conf と /etc/initramfs-tools/modules で対象となるモジュールのオプションに相違があるとエラーになりますので、一致させるよう注意してください。
(もしくは、/etc/modprobe.d/hogemodule.conf では何も書かず、再ロードしないようにして下さい。)

参考:
https://lists.debian.or.jp/debian-users/200511/msg00269.html

initrd の中身を見るには

$ lsinitramfs /boot/initrd.img-(バージョン) | pager

initrd の中身をカレントディレクトリに取り出すには

$ zcat /boot/initrd.img-(バージョン) | cpio -i

initrd にバイナリ、スクリプト等を追加するには

man initramfs-tools(8) を参照すること。
/etc/initramfs-tools/hook ディレクトリに以下のような内容のスクリプトファイルを実行権限付で置く。
/bin/hoge を initrd 内の /bin に配置するスクリプト:

#! /bin/sh

PREREQ=""

prereqs()
{
  echo "$PREREQ"
}

case $1 in
  # get pre-requisites
  prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /bin/hoge /bin

その後

# update-initramfs -u -k (対象カーネルのバージョン)

バイナリに依存するライブラリも (/usr/bin/ldd で発見できるものに限り) すべてコピーされます。

その他、カーネルモジュールを強制ロードする方法などもマニュアルにあり。

Kernel Modesetting (KMS) の有効化

参考:

Kernel Modesetting (KMS) とは 元来 X 上で行っていたグラフィックカードの初期化や解像度設定をカーネルで行い、 Linux/X 環境の画像処理をより「スマート」にする仕組みです。

squeeze では KMS の仕組みが X と Linux カーネルに導入されています。 対応 H/W で稼働中の Debian を squeeze にアップグレードした後 X が正常に動作せず画面が真っ暗になっている場合は、 KMS がうまく動作していないかもしれません。 取り敢えず無効化したい場合は、カーネルコマンドライン、即ち /etc/default/grub 等で

GRUB_CMDLINE_LINUX_DEFAULT="<他のパラメータ> <他のパラメータ>...nomodeset

というように nomodeset を付けると無効化できます。

squeeze では以下のグラフィックカードを搭載しているシステムでは KMS を有効化できます。

squeeze 以降では以下の手順により、KMS を有効化できます。

AMD/ATI Radeon 系の場合

  • プロプライエタリドライバ (non-free, AMD が提供しているバイナリオンリーなドライバ) をインストールしている場合は事前に削除してください。
  • バージョン 2.6.29 以上 (ただし古いものはバグありなので極力最新) の Linux カーネルを以下のオプションを有効化して再構築する。
    CONFIG_DRM_RADEON=m もしくは y
    CONFIG_DRM_RADEON_KMS=y
  • xserver-xorg-video-radeon バージョン 1:6.12.192-2 以降のパッケージをインストールする。
    • インストール後、以下の内容が書かれた /etc/modprobe.d/radeon-kms.conf ファイルが存在することを確認。
      options radeon modeset=1
  • Debian のソースを利用している場合はファームウェアがカーネルに無いため、 firmware-linux-nonfree パッケージをインストールする。
    • ビデオカードに対応する /lib/firmware/radeon/*.bin ファイルが KMS 有効時に自動的にロードされる。
  • 該当するカーネルで起動した後、以下を実行する。
    # aptitude install xserver-xorg
    # X -configure
    # mv /root/xorg.conf.new /etc/X11/xorg.conf
    続いて X を起動します。
    # aptitude install xinit (KDE, GNOME 等のデスクトップ環境でも可)
    # startx (もしくは KDM, GDM 等を起動)
    次の 2 つのログにメッセージがあれば有効になっています。
    • /var/log/syslog に以下のようなメッセージがある。
      # grep "kernel modesetting" /var/log/syslog
      Aug 21 10:30:08 xxx kernel: [    2.112034] [drm] radeon kernel modesetting enabled.
      Aug 21 10:30:08 xxx kernel: [    2.116610] [drm] initializing kernel modesetting (xxxxx 0xxxxx:0xxxxx).
    • /var/log/Xorg.0.log に以下のようなメッセージがある。
      $ grep "KMS" /var/log/Xorg.0.log
      (II) [KMS] Kernel modesetting enabled.
  • 起動直後から KMS を有効化するには、
    • 1. /etc/initramfs-tools/modules に
      radeon modeset=1
      を追記し、
      # update-initramfs -k (KMS を有効化したいカーネルのバージョン) -u
      を実行。
    • 2. カーネルコマンドラインに radeon.modeset=1 を追加し、vga=... 等 vesafb で使用するパラメータを全て削除してください。 (vesafb で使用しているパラメータは Documentation/fb/vesafb.txt を参照)
      GRUB 2 の場合、/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に 上記の通りカーネルパラメータを編集して
      # update-grub
      を実行。
      GRUB Legacy の場合は /boot/grub/menu.lst、LILO の場合は /etc/lilo.conf それぞれを編集し、設定を反映させる。
  • カードが対応していれば自動的にフレームバッファも有効になっています。
    # grep drmfb /var/log/syslog
    Aug 21 10:30:08 xxx kernel: [    2.247733] fb0: radeondrmfb frame buffer device
    $ cat /proc/fb
    0 radeondrmfb
    コンソール上で、fbterm を起動し、フレームバッファドライバがロードされていることを確認。
    $ fbterm -v
    ...
    [screen] driver: radeondrmfb, ...

Intel i9xx の場合

  • バージョン 2.6.29 以上 (ただし古いものはバグありなので極力最新) の Linux カーネルを以下のオプションを有効化して再構築する。
    CONFIG_DRM_I915=m もしくは y
    CONFIG_DRM_I915_KMS=y
    但し、squeeze では以下に書かれている説明の通り /etc/modprobe.d/i915-kms.conf に適切な設定がなされているので再構築は必要無いそうです。
  • xserver-xorg-video-intel バージョン 2:2.9.1-2 以降のパッケージをインストールする。
    • インストール後、以下の内容が書かれた /etc/modprobe.d/i915-kms.conf ファイルが存在することを確認。
      options i915 modeset=1

squeeze の /usr/share/doc/xserver-xorg-video-intel/README.Debian (xserver-xorg-video-intel (2:2.13.0-2)) より

  • To enable KMS, either of those should be sufficient:
    • /etc/modprobe.d/i915-kms.conf should contain:
      options i915 modeset=1
    • CONFIG_DRM_I915_KMS=y should be set in the kernel config.

xserver-xorg-video-intel パッケージにより /etc/modprobe.d/i915-kms.conf はセットされているため、 squeeze のカーネル (2.6.32) 再構築 (CONFIG_DRM_I915_KMS=y) は不要。
ただし、 kernel 2.6.38 ではどうも状況が違うらしく、起動直後から KMS を有効にするには CONFIG_DRM_I915_KMS=y が必要。 squeeze-backports のカーネルでは CONFIG_DRM_I915_KMS=y が有効になっている。

  • 該当するカーネルで起動した後、以下を実行する。
    # aptitude install xserver-xorg
    # X -configure
    # mv /root/xorg.conf.new /etc/X11/xorg.conf
    続いて X を起動します。
    # aptitude install xinit (KDE, GNOME 等のデスクトップ環境でも可)
    # startx (もしくは KDM, GDM 等を起動)
    次の 2 つのログにメッセージがあれば有効になっています。
    • /var/log/syslog に以下のようなメッセージがある。
      # pager /var/log/syslog
      ...
      Aug 21 10:30:08 xxx kernel: [    2.760091] fb0: inteldrmfb frame buffer device
      (フレームバッファに intelfb ではなく、inteldrmfb が使われている)
    • /var/log/Xorg.0.log に以下のようなメッセージがある。
      $ grep "KMS" /var/log/Xorg.0.log
      (II) [KMS] Kernel modesetting enabled.
  • 起動直後から KMS を有効化するには、
    • 1. /etc/initramfs-tools/modules に
      i915 modeset=1
      を追記し、
      # update-initramfs -k (KMS を有効化したいカーネルのバージョン) -u
      を実行。
    • 2. カーネルコマンドラインに i915.modeset=1 を追加し、vga=... 等 vesafb で使用するパラメータを全て削除してください。 (vesafb で使用しているパラメータは Documentation/fb/vesafb.txt を参照)
      GRUB 2 の場合、/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に 上記の通りカーネルパラメータを編集して
      # update-grub
      を実行。
      GRUB Legacy の場合は /boot/grub/menu.lst、LILO の場合は /etc/lilo.conf それぞれを編集し、設定を反映させる。
  • カードが対応していれば自動的にフレームバッファ (inteldrmfb) も有効になっています。
    # grep drmfb /var/log/syslog
    Aug 21 10:30:08 xxx kernel: [    2.247733] fb0: inteldrmfb frame buffer device
    $ cat /proc/fb
    0 inteldrmfb
    コンソール上で、fbterm を起動し、フレームバッファドライバがロードされていることを確認。
    $ fbterm -v
    ...
    [screen] driver: inteldrmfb, ...

マシンをサスペンド・ハイバネーションするには?

こちらに移動しました。

i486 向けカーネルはなくなったの?

jessie からなくなりました。 理由を簡単に説明すると、i486 は GCC のセキュリティ機能を有効にしてビルドできなかったため切り捨てられました。 詳しくはBTS:766105

カーネルのファイル名 "vmlinuz" ってなに?

  • "vm" は仮想メモリ (Virtual Memory) をサポートしていることを示している。
  • "z" は圧縮されている (gZipped) ことを示している。

つまり "vmlinuz" は、圧縮された仮想メモリをサポートする linu(x) ですよ、となる。



*1 通常はカーネルヘッダーディレクトリ (/usr/src/linux-headers-2.6.x-ABI-SUBARCH) もしくは、make-kpkg でビルドしたカーネルのトップディレクトリのこと

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-04-14 (土) 18:23:32 (1956d)