web-dev-qa-db-ja.com

カーネルソースを取得する:apt-get install vs apt-get source

Linuxカーネルをダウンロードして、変更方法とコンパイル方法を理解するのを楽しみにしています。

私はDebianディストリビューションを使用しており、Vanillaカーネル形式kernel.orgではなく、Debianで変更されたLinuxカーネルに興味があります。

いくつかの調査を行ったところ、この目的を達成するには主に2つの方法があることがわかりました。

  • ソースパッケージをインストールします(つまり、apt-getinstalllinux-source-3.19)
  • バイナリパッケージからソースをダウンロードします(つまり、apt-getsourcelinux-image-3.19.0-trunk-AMD64)

最初のオプションはソースtarballを/usr/src/linux-source-3.19.tar.xzにダウンロードし、後者はソースtarball(linux_3.19.1.orig.tar.xz)、パッチ(linux_3.19.1- 1〜exp1.debian.tar.xz)と説明ファイル(linux_3.19.1-1〜exp1.dsc)。後者はまた、すべてを「linux-3.19.1」ディレクトリに解凍して抽出します。

最初は、両方のバージョンが同じカーネルバージョンとパッチレベル(apt-cacheコマンドのレポートに基づく)を持っているため、同じコードになると思いました。ただし、diffコマンドは、apt-getinstallからアンパックされたソースとapt-getからアンパックされたソースを比較するときに違いを報告しました)source(パッチを適用したコードとパッチを適用していないコードの両方)。

Apt-getinstallとapt-getsourceを比較する場合:

$ diff -rq apt-get-install/ apt-get-source/ | wc -l
253

$ diff -rq apt-get-install/ apt-get-source/ | grep "Only in"
Only in apt-get-install/Arch/arm/boot/dts: Sun7i-a20-bananapro.dts
Only in apt-get-install/Arch/s390/include/asm: cmb.h.1
Only in apt-get-install/drivers/dma-buf: reservation.c.1
Only in apt-get-install/drivers/dma-buf: seqno-fence.c.1
Only in apt-get-install/drivers/gpu/drm/i915: i915_irq.c.1
Only in apt-get-install/drivers/scsi: constants.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_acm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_ecm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_obex.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_serial.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_subset.c.1
Only in apt-get-install/include/linux: reservation.h.1
Only in apt-get-install/kernel: sys.c.1
Only in apt-get-install/lib: crc32.c.1
Only in apt-get-install/sound/soc: soc-cache.c.1

そして、apt-getinstallとapt-getsource(+ patch)

$ diff -rq apt-get-install/ apt-get-source+patch/
Only in apt-get-install/Arch/s390/include/asm: cmb.h.1
Only in apt-get-source+patch/: debian
Only in apt-get-install/drivers/dma-buf: reservation.c.1
Only in apt-get-install/drivers/dma-buf: seqno-fence.c.1
Only in apt-get-install/drivers/gpu/drm/i915: i915_irq.c.1
Only in apt-get-install/drivers/scsi: constants.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_acm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_ecm.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_obex.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_serial.c.1
Only in apt-get-install/drivers/usb/gadget/function: f_subset.c.1
Only in apt-get-install/include/linux: reservation.h.1
Only in apt-get-install/kernel: sys.c.1
Only in apt-get-install/lib: crc32.c.1
Only in apt-get-source+patch/: .pc
Only in apt-get-install/sound/soc: soc-cache.c.1

両方の方法が言及されているリンクをいくつか見つけましたが、それらから何も明確にできませんでした。

https://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-officialhttps://help.ubuntu.com/community/カーネル/コンパイル (オプションBと代替オプションB)

誰かが私に違いを教えてくれて、どちらが好ましいオプションか教えてくれたら本当にありがたいです。ありがとうございました。

5
poinu

Debianの用語では、実行すると

apt-get source linux-image-3.19.0-trunk-AMD64

(または同等のapt-get source linux)、実際には ソースパッケージ をダウンロードして抽出しています。これには、アップストリームコード(kernel.orgからダウンロードされたカーネルソースコード)と、Debianカーネルチームによってカーネルに追加されたパッチを含むすべてのDebianパッケージが含まれています。

あなたが走るとき

apt-get install linux-source-3.19

実際には、Debianパッチが適用されたLinuxカーネルのソースコードが含まれ、Debianパッケージインフラストラクチャが含まれていないバイナリパッケージをインストールしています。

ソースパッケージの名前は単にlinuxです。 apt-get sourceは、指定されたバイナリパッケージ名を対応するソースパッケージ名に変換します。

ちなみに、experimentalパッケージは自動的にアップグレードされないため、比較する前に、linux-source-3.19のコピーを更新し、再抽出したことを確認する必要があります。 diffに表示されている.dtsファイルは、最新のアップデートで導入されました。現在アーカイブにあるパッケージにはすべてこのファイルが含まれています。

残りの違いはほとんど正常です。コメントに示されているように、debianにはすべてのパッケージが含まれ、ソースパッケージにのみ含まれます。また、.pcquiltによって使用され、パッチによって変更された元のファイルを追跡します。もソースパッケージにのみ存在し、.1ファイルは生成されたマンページであり、おそらくカーネルビルドの副作用であるため、バイナリパッケージにのみ表示されます(ただし、実際には存在しないはずです)。

参照パッケージは、apt-get sourceによって取得されたソースパッケージです。これにより、linux-source-3.19とともにインストールするapt-get installを含む、すべてのカーネルバイナリパッケージがビルドされます。後者は、カーネルソースを必要とする他のパッケージの便宜のために提供されています。 apt-get sourceの実行時に現在のディレクトリにダウンロードされたばかりのソースパッケージとは異なり、常に同じ場所にあることが保証されています。

ドキュメントに関する限り、私は カーネルハンドブック (セクション4.5)のDebianドキュメントに従います。リンク先のセクション4.2に記載されているように、完全なDebianカーネルを再構築すると、多数のバリアントが構築されるため、非常に長い時間がかかります。

4
Stephen Kitt