既存の .config
を読み取ります このファイルは、古いカーネルに使用されていたものであり、現在のカーネル ソースには含まれていないオプションをユーザーに要求します。これは、既存の構成を取得して新しいカーネルに移動するときに役立ちます。
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
まとめ
イグナシオが述べたように、それはあなたの .config
を更新します カーネルソースを更新した後のあなたのために。 git pull
で .
既存のオプションを保持しようとします。
そのためのスクリプトがあると、次の理由で役立ちます。
-
新しいオプションが追加されたか、古いオプションが削除された可能性があります
-
カーネルの Kconfig 設定形式には、次のオプションがあります:
select
でお互いを暗示するdepends
経由で別のものに依存
これらのオプションの関係により、手動での構成の解決がさらに困難になります。
構成を解決する方法を理解するために、.config を手動で変更してみましょう
最初にデフォルト構成を生成します:
make defconfig
生成された .config
を編集します ファイルを手動で作成して、カーネルの更新をエミュレートして実行します:
make oldconfig
何が起こるかを見るために。いくつかの結論:
<オール>行の種類:
# 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
へ 、カウントされません。
行の種類:
# 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
なし
依存関係が満たされていない構成は、.config
には表示されません .他のすべてはそうします。
たとえば、次のように設定します:
CONFIG_DEBUG_INFO=y
make oldconfig
を実行します . DEBUG_INFO_REDUCED
を要求されます。 、 DEBUG_INFO_SPLIT
などの構成。
これらのプロパティは defconfig
には表示されませんでした
lib/Kconfig.debug
の下を見ると それらが定義されている場所では、それらが DEBUG_INFO
に依存していることがわかります :
config DEBUG_INFO_REDUCED
bool "Reduce debugging information"
depends on DEBUG_INFO
DEBUG_INFO
の場合 オフだったので、まったく表示されませんでした。
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
select は、そのオプションを強制的に true にします。参照:https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
制約が満たされていない構成が要求されます。
例: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 ファイル内の機能を非対話的に有効にするにはどうすればよいですか?
新しい/変更された/削除されたオプションで古い構成を更新します。