4 Debian での Linux ネルとの


PIC
____________________________________________________________________

4.1 は じ め に

ここ年で Debian Linux ネル発体Linux ネルする使てきました Debian JP ML でもたまに Linux ネルしてハマているおられるようです Debian からされているネル使多いようででもがまとまていませ Debian Linux ネル発のネルコンパイル方法について単にまとめま した

4.2 Debian Linux ネル発状

Debian Linux ネルDebian Kernel Team によ発およびメンテナンスされていますもちろん Debian では Linux ネルDebian としてされており利用能ですムコアメンバBastian Blank, Frederik Schul, Maximilian Attems, Ben Hutchings らががになメンテナンスしていますはもちろん ネル発者ですらだけではキテクチきれないのでキテクチメンテナとともにネル メンテナンスしていますキテクチメンテナBuildd メンテナDebian-instller eglibc メンテナなどネルするメンテナンスしている20 名の発者によされ ます


PIC

1: Debian Linux ネルチ成図


4.3 Debian での Linux ネル発プロセス

年の 6 までは Debian とする Linux ネルバていましたがリリスサイク はあまりていませんでした年の Debconf では Linux ネルstable リリわせて発をうことが ニング/メンテナンススタイルリリスサイクルわせてされま した

4.3.1 Debian ネル

Debian ネルうにあたりネルというはいろんな味をちますよく使われるをまとめてみま した

4.3.2 ネルパ

発体プロセスによりネルパプロタイミングわりまました2010 5 現在Linux LTS サポトカネルバ2.6.322.6.32.12 ですこのネルDebian にしたジバlinux-2.6_2.6.32-12 になりますstable リリスバ Debian えておりDebian Linux ネルstable リリスバ になりますこれによりしい stable リリないDebian プロされま せん

4.3.3 クポ

Linus ネルからのクポlinux-2.6.34-rc7 まれたlinux-2.6.32 れてもらうなど Debian 直接まれることはなくstable ネルからのみけますstable ネルされない りは Debian でも使えないということですんでもらうにはstable@kernel.org stable ネル んでもらうようにする必要があります

4.3.4 バグレポ

バグがあにはDebian BTS 利用できますできるには添付しましメンテナ Upstream(stabel ネルによては Linus/HEAD) 転送してくれます

Debian Kernel Team された的に Linus ネルまれるように働きかけていますこれらが Liuns/HEAD または stable ネルまれないDebian specific としてされますえばドライバ non-free ムウなどはまだまれておらずDebian specifc としててい ます


PIC

2: Debian Linux ネル発プロセス


4.4 Debian Kernel Team によメンテナンスされている

Debian Kernel Team では Linux ネルするいくつかのメンテナンスしていますここでは についてします

4.4.1 linux-2.6


Debian Kernel Team メンテナ ンスしている linux-2.6 がありますこれは Linux ネル でありこのから キテクチけのネル イルlibc ダフイル ドキメント生成 されます


PIC

3: linux-2.6 から生成される


ネルコンフ
linux-2.6 スパているネルコンフconfig , キテクチconfig , flavour config 3 分けられておりdebian/config イル納されていますこれらのイルバイナリパジビルドつにま とめられまとめられた config 使ネルコンフわれますイルされているコンフ的に 複しませんしかしみで使われるではドライバモジみにしないと動作しないものもあるた flavour config イルによバライドされますイル優先としては config <キテクチconfig <flavour config となりますまたコンフイル動的 分割するプログラム存在せずキテクチメンテナがちまちまイルプデ ます

4.4.2 linux-latest-2.6

linux-latest-2.6Debian ネルABI するためのメタパしますえば amd64 キテクチけのLinux ネルイメジパlinux-image-2.6.32-5-amd64になりますが linux-latest-2.6スパからビルドされるlinux-image-2.6-amd64linux-image-2.6.32-5-amd64 存します名に ABI だと 5めてるのでABI された ネルアプデがされませんインストする必要があるわけですえば linux-image-2.6.32-4-amd64 linux-image-2.6.32-5-amd64では ABI なるのでいになります のときにlinux-image-2.6-amd64インストしておくとABI 4 から 5 された linux-image-2.6-amd64 プデされlinux-image-2.6.32-5-amd64動的にインストされ ます


PIC

4: linux-2.6 linux-latest-2.6


ABI
ABI linux-2.6 にあるdebian/bin/buildcheck.py使ネルパジビルド されますネルパジメンテナビルドしたときにABI プデABI して Debian プロしますといてもえば sycall /されるなどのがないには ABI しないもあるようです

----
make[3]: Leaving directory  ‘/home/mattems/src/linux-2.6-2.6.32/debian/build/build_amd64_none_amd64’
python debian/bin/buildcheck.py debian/build/build_amd64_none_amd64 amd64 none amd64
ABI has changed!  Refusing to continue.

Added symbols:
dev_attr_usbip_debug    module: drivers/staging/usbip/usbip_common_mod, version: 0x79bd9084, export: EXPORT_SYMBOL_GPL
getboottime             module: vmlinux, version: 0x0619ca8a, export: EXPORT_SYMBOL_GPL
monotonic_to_bootbased  module: vmlinux, version: 0xdb274e52, export: EXPORT_SYMBOL_GPL
----
4.4.3 linux-kbuild-2.6

linux-kbuild-2.6ネルドライバサポするためのスクリプトていますlinux-headers 存していますこのスコlinux-2.6 からられずstable ネル スコから kbuild うために必要部分してられますこれはkbuild システムstable リリ 必要がないためです


PIC

5: linux-2.6 linux-kbuild-2.6


4.4.4 まとめ

4.5 Debian ネルビルド方法

Debian されているバイナリパ使いますしかしたまにビルドしたいがいるわけです 由としては以下のものがえられます

このようなからからネルビルドくことがですしかしDebian ではいくつかのネル 法がありますこれらをつずつみてみまし

4.5.1 Debian オフルカネルリビルドする

まずはDebian ネルリビルド方法しますスパダウンロdebuild すれば linux ネルパビルドされますがこの方法では分の必要のない flavour までビルドしますここでは flavour のみをビルドする方法します

  1. Linux-2.6 スコダウンロする
    まずlinux-2.6 スパダウンロしますダウンロできたら展開されたレクトリ動し ます
    $ apt-get source linux-2.6
    $ cd linux-2.6-2.6.32
  2. linux-2.6 ビルド必要インストする
    ビルド必要インストするには build-dep オプシ使います
    $ sudo apt-get build-dep linux-2.6
  3. Debian ネルけの適用する
    $ make -f debian/rules clean
    $ make -f debian/rules source-all

    debian/rules source-allではてのキテクチけに適用してしまうのでキテクチ 適用したいには以下のようにします

    $ make -f debian/rules.gen source_amd64
  4. 利用したい flavour する
    amd64 キテクチamd64 flavour したいには以下のようにします
    $ fakeroot make -f debian/rules.gen setup_amd64_none_amd64
  5. ネルコンフする
    ネルコンフしたいにはdebian/build/build_amd64_none_amd64 レクトリ 動してネルコンフいますコンフ了後レクトリ必要があり ます
    $ cd debian/build/build_amd64_none_amd64
    $ make menuconfig
    $ cd ../../..
  6. ビルドする
    debuild / dpkg-buildpackageコマンド利用せずdebian/rules してビルド ます
    $ fakeroot make -f debian/rules.gen binary-arch_amd64_none_amd64
4.5.2 Debian ネル適用して利用する

よくうとわれるのがDebian ネル分がててするというものですこれをうに Debian ネルパ必要があります

Debian ネルパ
的にチシステムわりませんdebian/patches 納されていますつのレク トリがありさらにキテクチ分かれています

分の適用したネルビルドする方法

  1. ネルソスコする
    展開レクトリ動します
    $ apt-get source linux-2.6
    $ cd linux-2.6-2.6.32
  2. ンジログする
    dch コマンド使しい Debian Changelog しますこのときに-Dオプシ使 ストリビ名に UNRELEASED しないネルパジビルドかかりま 以下ではサフクスカルバとして+textChangelog イルしています こ の Liux ネルパ2.6.32-122.6.32-12+test1というになり ます
    $ dch --local +test -D UNRELEASED
  3. レクトリコピする

    debian/patches レクトリ以下コピします

    $ cp ~/oreore.patch debian/patches/bugfix/
  4. コピした有効にする
    コピした有効にするにはdebian/patches/series/レクトリ適用したい Debian イルパスします
    $ echo ‘‘+ bugfix/oreore.patch’’ >> debian/patches/series/12+test1
  5. ./debian/bin/gencontrol.pyする./debian/bin/gencontrol.pyビルドスクリプト イルしい Debian けにします
    $ ./debian/bin/gencontrol.py
  6. 適用する
    $ make -f debian/rules clean
    $ make -f debian/rules.gen source_amd64
  7. ビルドする
    適用できたら以下コマンドビルドします
    $ fakeroot make -f debian/rules.gen binary-arch_amd64_none_amd64

    エラがなければ有効になネルパビルドされます

4.5.3 Debian ネルLinux ネルソスコ(linux-source-2.6.XX ) からビルドする

Debian ネルビルドする方法はもうひとつありlinux-source-2.6.XX利用する方法ですこの にはプストリスコのみをしていますこのからネルパビルドする方法 します

  1. Debian しているネルビルド必要インストする
    $ sudo apt-get build-dep linux-source-2.6.32
  2. Debian ネルソインストする
    $ sudo apt-get install linux-source-2.6.32
  3. make-kpkg コマンド使ネルパビルドする
    $ fakeroot make-kpkg --revision=test00debian kernel_image kernel_headers

しかしこれでは Debian には適用されていないですlinux-patch-debian-XXXX インスト適用する必要があります-a キテクチ-f flavour します

$ sudo apt-get install linux-patch-debian-2.6.32
$ /usr/src/kernel-patches/all/2.6.32/apply/debian -a x86_64 -f xen
4.5.4 リリされたネルdebian にする

Linus stable によリリされた Linux ネルDebian するにはkernel-package 使 う の が Debian 流です

  1. kernel-packagefakerootインストします
    $ sudo apt-get install kernel-package fakeroot
  2. ダウンロ展開します
  3. ネルコンフします
    $ make menuconfig
  4. make-kpkgコマンド使ネルパする

    make-kpkg コマンドにはいくつかのオプシがありますがよく利用するオプシについて ます

    えばリビジtest12345append67890ネルパネルヘダパ ビルドするには以下のようにしますリビジ.(ピリオド) をつけているのは2.6.33.3 2.6.33.3.append67890 となるようにするためです

    $ fakeroot make-kpkg --revision=.test12345 --append-to-version=append67890 kernel_image

    される名は以下のようになり--append-to-version--revision以下のようにされます

    linux-image-(kernel-version)(--append-to-version)_(--revision)_(architecture).deb
  5. ビルドわるとビルドされているのでインストします
    $ sudo dpkg -i ../linux-image-2.6.33.3.append67890_testrev12345_amd64.deb

4.6 git/HEAD Debian にする

ネルリリされるネルスコダウンロするのではなくgit リポジトリ git リポジトリからビルドするのがでしたぶんkernel-package ではgit リポ ジトリからビルドできる能があるのでこれを利用するとネルパすることができ ます

  1. Linux git リポジトリコピする
    Linux ネルgit リポジトリがないにはgit clone コマンドします
    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

    linux-2.6 レクトリができるので動します

    cd linux-2.6
  2. リポジトリプデ
    から git リポジトリ使ていじているプデしまし
    $ git pull
  3. make-kpkg clean する
    make-kpkg clean をします
    $ make-kpkg clean
  4. ネルパビルドする
    make-kpkg 使ネルパビルドします

    ビルドするとMakefile からジバをつけてくれますgit log --pretty=format:%h -1クアウトしている HEAD 短縮された--revision オプシ していますこれによりどのコミからしたネルイメなのかわかるようになり ます

    $ fakeroot make-kpkg --revision=1+‘git log --pretty=format:\%h -1‘ --initrd kernel_image
    --   --
    $ ls ../
    linux-2.6  linux-image-2.6.34-rc7_1+be83567_amd64.deb

4.7 ドライバモジ

Debian ネルパでは多くのネルドライバモジされていますではmodule-init-tools がありイルサフクスされていますドライバモジいについて単におさら いしてみまし

4.7.1 したいネルする

動時動的にモジする/etc/modprobe.d/しいイルしてそこにするし ます

たとえばeth0 として eepro100 させたい/etc/modprobe.d/local.confイルして します

echo ’alias eth0 e100’ >> /etc/modprobe.d/local.conf

とします

4.7.2 ネルモジルパラメ

パラメ/etc/modprobe.d/local.conf しますネルモジパラメ調べるにはmodinfo マンド利用します

$ modinfo e100
filename:       /lib/modules/2.6.31-1-686/kernel/drivers/net/e100.ko
firmware:       e100/d102e_ucode.bin
firmware:       e100/d101s_ucode.bin
firmware:       e100/d101m_ucode.bin
version:        3.5.24-k2-NAPI
----
vermagic:       2.6.31-1-686 SMP mod_unload modversions 686
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           eeprom_bad_csum_allow:Allow bad eeprom checksums (int)
parm:           use_io:Force use of i/o access mode (int)

するには以下のようにします

$ echo ’options e100 debug=16’ >> /etc/modprobe.d/local.conf

したら動をうかネルモジします

4.8 よくある

4.8.1 ネルlenny れません

kernel-package いので lenny ではビルドできませんtesting/unstable にある kenrel-package lenny インストすることによできますkernel-package 存しているlenny からてくるこ とができるのでシステムれるということはないとわれます

4.8.2 initrd られません

grub メニしてinitrd 使わないようにしましというのは半分冗kenrel-pakcage 12.012 から initrd らないされましたmake-kpkgコマンド使initrd めたネルイメするには する必要があります

$ sudo mkdir -p /etc/kernel/postinst.d/
$ sudo cp
 /usr/share/doc/kernel-package/examples/etc/kernel/postinst.d/initramfs \
 /etc/kernel/postinst.d/
$ fakeroot make-kpkg --revision=1 --initrd kernel_image

したネルパるとインストinitrd イメします

4.8.3 -j オプシ使ネルパビルドしたいのですが

make-kpkg コマンドDEBIAN_KERNEL_JOBS 使いましえば-j8 以下のようにします

$ make-kpkg --revision=test00 kernel_image kernel_headers DEBIAN_KERNEL_JOBS=8
4.8.4 ネルけの linux-kbuild-2.6 りたいのですが

リリスカネルDebian experimental ストリビプロされます2010 05 では2.6.33 linux-2.6_2.6.33-1 experimental.5 としてプロされて いますネルプロされているのですがlinux-kbuild-2.6 ネルけに プロされないがあるので使いたい分でする必要があるがあります http://wiki.debian.org/HowToRebuildAnOfficialDebianKernelPackage#Thestoryoflinux-kbuild-2.6 てくださいちなみに 2.6.33 するにはバグ (#573176) がありますててビルド まし

4.8.5 ネル使いたいのだけどにするのがめんどいです
http://kernel-archive.buildserver.netされていますが現在バダウンです