web-dev-qa-db-ja.com

「/proc/config.gz」が誤った構成を表示するのはなぜですか?

/proc/config.gzから)構成を変更してカーネルを再構築しても、ファイルmake menuconfigは更新されません。たとえば、正常に動作するBLK_DEV_IO_TRACEを使用してカーネルを再構築しましたが、config.gz# CONFIG_BLK_DEV_IO_TRACE is not setをまだ表示しています。 .configを有効にすると、カーネルバイナリに含まれるカーネルソースのルートディレクトリにあるCONFIG_IKCONFIGファイルではないですか?

そしてBTW config.gzCONFIG_IKCONFIG=yを示していますが、実際はCONFIG_IKCONFIG=mです。

Android NDKスタンドアロンGCCツールチェーンを使用してビルドしています このカーネル (3.18 arm64)。

注:

明確にするために、混乱を引き起こしているので、新しいカーネルが新しい構成で実行されていると確信しています。現在動作しているデフォルト構成への変更の長いリストを有効にしました。多くのユーザースペースプログラムはこれらの構成に依存しています。

CONFIG_IKCONFIG=m
CONFIG_IKCONFIG_PROC=y
CONFIG_VETH=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_NFS_FS=m
CONFIG_NFS_V2=m
CONFIG_NFS_V3=m
CONFIG_NFS_V4=m
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_OVERLAY_FS=m
CONFIG_UTS_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_CLS_CGROUP=m
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NETFILTER_NETLINK=m
CONFIG_ISO9660_FS=m
CONFIG_SQUASHFS=m
CONFIG_UDF_FS=m
CONFIG_UNIX_DIAG=m
CONFIG_PSTORE=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_DEBUG_FS=y
CONFIG_FTRACE=y
CONFIG_BLK_DEV_IO_TRACE=y

config.gzLinux/arm64 3.18.71 Kernel Configurationを示していますが、現在はLinux/arm64 3.18.140 Kernel Configurationです。 また、*defconfigの16個のArch/arm64/configs/ファイルのいずれとも一致しません。 実際の構成とconfig.gzの間には185の違い(88の追加、97のドロップ)があります。最初はArch/arm64/configs/franco_mido_defconfigを使用しました。カスタムカーネル開発者によって提供されたもの。

3
Irfan Latif

この質問を投稿する前にさらに調査を行うべきでしたが、何かが足りないのではないかと思いました。参考までに、問題は私のカーネルソースに固有であることがわかります。カスタムカーネル開発者は patch を適用して、古い構成を常にカーネルバイナリに含めました。したがって、これは元に戻す必要があります(もしあれば、リスクを考慮して):

ifeq ($(CONFIG_MACH_XIAOMI_MIDO),y)
    $(obj)/config_data.gz: Arch/arm64/configs/mido_defconfig FORCE
else ifeq ($(CONFIG_MACH_XIAOMI_TISSOT),y)
    $(obj)/config_data.gz: Arch/arm64/configs/tissot_defconfig FORCE
else
    $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE
endif
1
Irfan Latif

/proc/config.gzを生成するカーネルオプションは、IKCONFIG_PROCであり、単なるIKCONFIGではありません。また、IKCONFIG_PROCをモジュールにすることはできません。

また、kernel/configs/Android-base.configkernel/configs/Android-recommended.configがあることに注意してください。これらは、一部のカーネル構成設定を上書きするために使用できます。 https://lore.kernel.org/linux-arm-kernel/[email protected]/を参照)

カーネルのコンパイル手順で次のようなコマンドを使用する場合(上記のリンクのLinux-ARM-Kernelリストの投稿に記載されている例)

make Arch=arm multi_v7_defconfig Android-base.config Android-recommended.config

その後、それらのファイルは実際に使用されます。また、Android-base.configには、CONFIG_IKCONFIGCONFIG_IKCONFIG_PROCの両方をyに設定することが含まれます。

ツールチェーンが次のようなことをしていないことを確信していますか?

make Arch=arm <oldconfig or some other config target> Android-base.config 

実際にカーネルの構築を始める前に?

1
telcoM