it-swarm-ja.com

デフォルトの構成でカーネルをコンパイルする

仮定:

  • プラットフォーム:
    [email protected]:~/> uname -a
    Linux linux-dopx 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 x86_64 x86_64 x86_64 GNU/Linux

  • ダウンロードしたカーネルは、kernel.orgからの最新の安定版です。

  • make menuconfigのオプションはデフォルトのままにしておきます(変更しません)。
  • 単にmakemake installgrub-updateと入力して、再起動します。

さて、これらの仮定に従って、エラーのない再起動を確実にするために、ファイルにいくつかの追加の変更を加えるか、いくつかの追加のドライバーをコンパイルする必要がありますか?

はいの場合、それらの変更は何に依存していますか?

編集1:

[email protected]:/> Sudo /sbin/lspci -n
00:00.0 0600: 8086:29c0 (rev 10)
00:02.0 0300: 8086:29c2 (rev 10)
00:1b.0 0403: 8086:27d8 (rev 01)
00:1c.0 0604: 8086:27d0 (rev 01)
00:1c.1 0604: 8086:27d2 (rev 01)
00:1d.0 0c03: 8086:27c8 (rev 01)
00:1d.1 0c03: 8086:27c9 (rev 01)
00:1d.2 0c03: 8086:27ca (rev 01)
00:1d.3 0c03: 8086:27cb (rev 01)
00:1d.7 0c03: 8086:27cc (rev 01)
00:1e.0 0604: 8086:244e (rev e1)
00:1f.0 0601: 8086:27b8 (rev 01)
00:1f.1 0101: 8086:27df (rev 01)
00:1f.2 0101: 8086:27c0 (rev 01)
00:1f.3 0c05: 8086:27da (rev 01)
01:00.0 0200: 10ec:8136 (rev 01)

8
Aquarius_Girl

ただのmake menuconfig。必要な設定は次の3つに依存します。

 the hardware being used
 the features used by the OS/distribution
 the features by you (file-systems, raid, ..etc)

したがって、私の見解で推奨される「デフォルト」構成は次のとおりです。

cd your_kernel_src
cp /boot/your-distribution-config .config
make localmodconfig
make menuconfig

ディストリビューションのカーネル構成 も参照してください。最初の段落:

カーネルの構成は、かつてはかなり単純なプロセスであり、サポートする必要のあるハードウェアについての知識のみが必要でした。時間の経過とともに、物事は一般的に複雑になってきていますが、ディストリビューションでは、特定のカーネル機能に対する独自の一連の依存関係が追加されています。そのため、Linus Torvaldsは、ディストリビューション固有のカーネル構成オプションを追加するためのRFC提案を発表しました。

7
Lai Jiangshan

実際のハードウェア/ディストリビューションは、defconfigでは適切に動作しない可能性があります

前述のように この回答について 、ディストリビューションまたはハードウェアベンダーから提供されていないものは、微妙な、またはそれほど微妙ではない方法で失敗する可能性が非常に高くなります。例:

  • 一部の重要なハードウェアのドライバーサポートを構築しない可能性があります
  • ディストリビューションのパッケージは、ビルドしておらず失敗したカーネルの機能に依存している可能性があります

さらに、特定の構成に加えて、ベンダーがバニラカーネルの上に大きなパッチセットを適用するのは通常のことです。たとえば、Ubuntuでもこれを行います。

特にUbuntu/Debianの場合、サポートされているカーネルをソースからコンパイルする方法を次の場所で説明しました https://askubuntu.com/questions/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit- online/1081171#1081171 この場合、安定したカーネルベースを変更することは、あなたができる最も健全なことです。

QEMUはdefconfigと連携します

defconfigがうまく機能することの1つは、カーネルv4.20、QEMU 2.12でテストされたQEMUで起動することです。

これは Buildrootを使用した完全に自動化された例 です。

そのリンクに記載されているように、ディスクから起動するには次のオプションが必要です。

CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BLK=y

initrdには必要ありませんが。

別のArchへのクロスコンパイル(例: aarch64、あなたは必要です:

make Arch=arm64 defconfig

しかし ここで説明されているように 、arm64はQEMUで起動しますが、非常に肥大化したカーネルを生成します。 ここで説明

make defconfig完全に一致しますか?

詳細なビルドで使用された構成ファイルを簡単に確認できます。

make V=1 defconfig

これはv4.19で出力します:

make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig defconfig
scripts/kconfig/conf  --defconfig=Arch/x86/configs/x86_64_defconfig Kconfig

ここから、使用するファイルは Arch/x86/configs/x86_64_defconfig である必要があると結論付けます。

参照: https://stackoverflow.com/questions/41885015/what-exactly-does-linux-kernels-make-defconfig-do

make helpには、alldefconfigsavedefconfigなど、他の興味深いデフォルト関連ターゲットも表示されます。