Bash程序  |  105行  |  2.3 KB

#!/bin/bash

RETVAL=0
ARCHES="arm64 arm x86"
if [ -z "$ANDROID_BUILD_TOP" ]; then
	echo "ANDROID_BUILD_TOP not set, exiting"
	exit 1
fi
AFRAGS="$ANDROID_BUILD_TOP/kernel/configs"
KERNEL_VERSIONS=`ls -d $AFRAGS/android-* | xargs -n 1 basename`

check_fragment()
{
	ERRORS=0

	while read line; do
		grep -q "$line" .config
		if [ $? -ne 0 ]
		then
			echo "Error, $line not found in merged config."
			ERRORS=1
		fi
	done < <(grep -v -E "^#  " $1)

	if [ $ERRORS -ne 0 ]
	then
		echo "Errors encountered while checking $1"
		RETVAL=1
	else
		echo "Fragment $1 is okay"
	fi
	echo ""
}

check_arches()
{
	for arch in $ARCHES; do
		rm .config
		make ARCH=$arch allnoconfig
		FRAGMENTS="$AFRAGS/$version/android-base.config \
			   $AFRAGS/$version/android-recommended.config"
		if [ -f $AFRAGS/$version/android-base-$arch.config ]; then
			FRAGMENTS="$FRAGMENTS $AFRAGS/$version/android-base-$arch.config"
		fi
		if [ -f $AFRAGS/$version/android-recommended-$arch.config ]; then
			FRAGMENTS="$FRAGMENTS $AFRAGS/$version/android-recommended-$arch.config"
		fi
		ARCH=$arch scripts/kconfig/merge_config.sh .config $FRAGMENTS &> /dev/null
		for f in $FRAGMENTS; do
			check_fragment $f
		done
	done
}

check_configs()
{
	for version in $KERNEL_VERSIONS; do
		echo "Changing to $KERNEL_PATH"
		cd $KERNEL_PATH
		git checkout $version
		check_arches
	done
}

show_help()
{
	cat << EOF
Usage: ${0##*/} [-h] [-a arches] [-v versions] -k path-to-kernel
Check that the kernel config fragments are consistent with the Kconfig files
in the given kernel versions. This requires an android common kernel repo to
be checked out and made available to this script via the -k option or the
KERNEL_PATH environment variable. Note this script does not verify the
configs in the conditional XML fragments.

	-h		display this help and exit
	-a arches	quote-enclosed whitespace separated list of
                        architectures to check, valid architectures are
			arm64, arm, and x86
	-k kernel	path to android common kernel repo
	-v versions	quote-enclosed whitespace separated list of
			kernel versions to check (android-x.y)
EOF
}

OPTIND=1
while getopts "h?a:v:k:" opt; do
	case "$opt" in
		h|\?)
			show_help
			exit 0
			;;
		a)
			ARCHES="$OPTARG"
			;;
		v)
			KERNEL_VERSIONS="$OPTARG"
			;;
		k)
			KERNEL_PATH="${OPTARG/#\~/$HOME}"
			;;
	esac
done

check_configs