Linuxカーネルのメイクファイルで「makeoldconfig」は正確に何をしますか?


82

Linuxカーネルのメイクファイルでターゲットの「oldconfig」が正確に何をするのか誰かが説明できますか?一部のビルドドキュメントで参照されているようですが、正確に何をするのか説明していません。

回答:


127

既存の.configファイルを読み取り、ファイルに見つからない現在のカーネルソースのオプションの入力をユーザーに求めます。これは、既存の構成を取得して新しいカーネルに移動するときに役立ちます。


こんにちは、u-bootコードでテストしました(Kconfigも使用しています)。'make menuconfig'を使用して、それをarmアーキテクチャに設定しました(新しい.configファイルが生成されました。デフォルトのアーキテクチャはSandboxです)。次に、「make menuconfig」を実行しましたが、armアーキテクチャがまだ選択されていることがわかりました。したがって、.configがある場合、「makemenuconfig」はその.configファイルから始まります。では、ターゲットの「menuconfig」と「oldconfig」は実際には同じですか?
チャン・キム

menuconfigとoldconfigはすべて.configから始まると思います。oldconfigのみが、.configが古いカーネルからのものであると想定し、現在のカーネルに新しい構成変数を入力します。
チャン・キム

25

を実行する前にmake oldconfig、カーネル構成ファイルを古いカーネルから新しいカーネルのルートディレクトリにコピーする必要があります。

実行中のシステムにある古いカーネル構成ファイルのコピーは、にあります/boot/config-3.11.0。または、カーネルソースコードの構成はlinux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}

カーネルソースが次の場所にある場合/usr/src/linux

cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig

3
カーネルをrootとしてビルドしないでください!youtube.com/watch?v=fMeH7wqOwXA#t=15m44sを
2015年

24

概要

前述のようにイグナシオによって、それはあなたが更新され.config、あなたが持つカーネルソースを、例えば更新した後、あなたのためにgit pull

それはあなたの既存のオプションを維持しようとします。

そのためのスクリプトがあると、次の理由で役立ちます。

  • 新しいオプションが追加されたか、古いオプションが削除された可能性があります

  • カーネルのKconfig構成形式には、次のオプションがあります。

    • を介してお互いを暗示する select
    • 別の経由で依存 depends

    これらのオプションの関係により、手動による構成の解決がさらに困難になります。

.configを手動で変更して、構成がどのように解決されるかを理解しましょう

まず、次のデフォルト構成を生成します。

make defconfig

次に、生成された.configファイルを手動で編集して、カーネルの更新をエミュレートして実行します。

make oldconfig

何が起こるかを見るために。いくつかの結論:

  1. タイプの行:

    # CONFIG_XXX is not set
    

    単なるコメントではなく、実際にはパラメータが設定されていないことを示しています。

    たとえば、次の行を削除すると、次のようになります。

    # CONFIG_DEBUG_INFO is not set
    

    実行するとmake oldconfig、次のように尋ねられます。

    Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
    

    それが終わると、.configファイルが更新されます。

    行の任意の文字を、たとえばに変更した場合# CONFIG_DEBUG_INFO、それはカウントされません。

  2. タイプの行:

    # CONFIG_XXX is not set
    

    ただし、プロパティの否定には常に使用されます。

    CONFIG_XXX=n
    

    否定としても理解されます。

    たとえば、削除# CONFIG_DEBUG_INFO is not setして回答した場合:

    Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
    

    を使用するとN、出力ファイルには次のものが含まれます。

    # CONFIG_DEBUG_INFO is not set
    

    ではなく:

    CONFIG_DEBUG_INFO=n
    

    また、行を手動で次のように変更した場合:

    CONFIG_DEBUG_INFO=n
    

    を実行するmake oldconfigと、行は次のように変更されます。

    # CONFIG_DEBUG_INFO is not set
    

    oldconfig私たちに聞かずに。

  3. 依存関係が満たされていない構成は、に表示されません.config。他のすべてはそうします。

    たとえば、次のように設定します。

    CONFIG_DEBUG_INFO=y
    

    を実行しmake oldconfigます。:それは今の私たちに聞いてきますDEBUG_INFO_REDUCEDDEBUG_INFO_SPLITなどのconfigs。

    これらのプロパティは、defconfig以前は表示されませんでした。

    lib/Kconfig.debugそれらが定義されている場所を見ると、それらが以下に依存していることがわかりますDEBUG_INFO

    config DEBUG_INFO_REDUCED
        bool "Reduce debugging information"
        depends on DEBUG_INFO
    

    そのDEBUG_INFOため、オフのときはまったく表示されませんでした。

  4. 設定をselectedオンにすることで設定が自動的に設定され、ユーザーに確認する必要はありません。

    たとえばCONFIG_X86=y、次の行を削除すると、次のようになります。

    CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
    

    を実行するmake oldconfigと、とは異なり、行は私たちに尋ねることなく再作成されDEBUG_INFOます。

    これは、次の理由で発生しarch/x86/Kconfig ます。

    config X86
        def_bool y
        [...]
        select ARCH_MIGHT_HAVE_PC_PARPORT
    

    選択すると、そのオプションが強制的に真になります。参照:https//unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig

  5. 制約が満たされていない構成が要求されます。

    たとえば、次のようにdefconfig設定しました。

    CONFIG_64BIT=y
    CONFIG_RCU_FANOUT=64
    

    編集する場合:

    CONFIG_64BIT=n
    

    実行するとmake oldconfig、次のように尋ねられます。

    Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)
    

    これは、RCU_FANOUT次のように定義されinit/Kconfigているためです。

    config RCU_FANOUT
        int "Tree-based hierarchical RCU fanout value"
        range 2 64 if 64BIT
        range 2 32 if !64BIT
    

    したがって、がない64BIT場合、最大値はですが32、に64設定した.configため、一貫性がなくなります。

ボーナス

make olddefconfig対話的に尋ねることなく、すべてのオプションをデフォルト値に設定します。私たちが行ったように手動で変更した場合に備えmakeて、.configが一貫していることを確認するために自動的に実行されます。参照:https//serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree

make alldefconfigに似てmake olddefconfigいますが、マージする構成フラグメントも受け入れます。このターゲットはmerge_config.shスクリプトによって使用されます:https//stackoverflow.com/a/39440863/895245

また、.config変更を自動化したい場合、それはそれほど単純ではありません。Linuxカーネルの.configファイルの機能を非対話的にオンにするにはどうすればよいですか。


5

新しい/変更された/削除されたオプションで古い構成を更新します。


2

このページから:

Make oldconfigは.configを取得し、Kconfigファイルのルールを実行して、Kconfigルールと一致する.configを生成します。欠落しているCONFIG値がある場合、makeoldconfigはそれらを要求します。

.configがKconfigにあるルールとすでに一致している場合、makeoldconfigは基本的に何もしません。

make oldconfigを実行してから、make oldconfigを2回実行した場合、2回目に追加の変更が行われることはありません。


1

それは拷問です。一般的なconfファイルを含める代わりに、リターンキーを9000回押して生成します。


6
試してみてください:yes "" | make oldconfig
レイ・ドネリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.