既存の .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 ファイル内の機能を非対話的に有効にするにはどうすればよいですか?
新しい/変更された/削除されたオプションで古い構成を更新します。