|
|
|
@ -15,7 +15,7 @@
|
|
|
|
|
|
|
|
|
|
PATH=/lib/rc/bin:$PATH
|
|
|
|
|
|
|
|
|
|
CL_KERNEL_VERSION=0.1_alpha1
|
|
|
|
|
CL_KERNEL_VERSION=0.1_beta1
|
|
|
|
|
DESCRIPTION="Create kernel utility"
|
|
|
|
|
DEFAULT_KERNEL_DIRECTORY=/usr/src/linux
|
|
|
|
|
SRC_DIRECTORY=/usr/src
|
|
|
|
@ -30,6 +30,7 @@ CREATE_BASE=1
|
|
|
|
|
# create config by template
|
|
|
|
|
CREATE_NEW=1
|
|
|
|
|
BUILD_KERNEL=1
|
|
|
|
|
CHMOD=0644
|
|
|
|
|
|
|
|
|
|
: >$DEBUG_LOG
|
|
|
|
|
set -e
|
|
|
|
@ -141,19 +142,17 @@ variable_value()
|
|
|
|
|
cl-core-variables-show --only-value $varname
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
added_options() {
|
|
|
|
|
local orig_file=$1
|
|
|
|
|
local new_file=$2
|
|
|
|
|
diff -u $orig_file $new_file | grep "^+C" | sed 's/^.//' | sort
|
|
|
|
|
}
|
|
|
|
|
# оставить только названия параметров + "="
|
|
|
|
|
options_name() {
|
|
|
|
|
sed -r 's/^(.*=)(.*)$/\1/'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# преобразовать список строк в параметры для grep
|
|
|
|
|
grep_patterns() {
|
|
|
|
|
awk '{print "-e "$1}'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# исключить из вывода переданные шаблоны
|
|
|
|
|
exclude_options() {
|
|
|
|
|
if [[ -n $1 ]]
|
|
|
|
|
then
|
|
|
|
@ -163,38 +162,70 @@ exclude_options() {
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removed_options() {
|
|
|
|
|
diff -u $orig_file $new_file | grep "^-C" | sed 's/^.//' | sort
|
|
|
|
|
# сохранить в выводе переданные шаблоны
|
|
|
|
|
keep_options() {
|
|
|
|
|
if [[ -n $1 ]]
|
|
|
|
|
then
|
|
|
|
|
grep $*
|
|
|
|
|
else
|
|
|
|
|
cat
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# преобразовать опции в синтаксис удаления параметра
|
|
|
|
|
remove_syntax() {
|
|
|
|
|
sed -r 's/^(.*=.*)$/!\1/'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# удалить выключенные параметры
|
|
|
|
|
discard_option_n() {
|
|
|
|
|
grep -v "=n$"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removed_options_new() {
|
|
|
|
|
diff -u $orig_file $new_file | grep "^+# CON" | sed 's/^.//' | sed -r 's/# (CONFIG[^ ]+).*$/\1=n/' | sort
|
|
|
|
|
# оставить только выключенные параметры
|
|
|
|
|
keep_option_n() {
|
|
|
|
|
grep "=n$"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# преобразовать # CONFIG_XXX is not set -> CONFIG_XXX=n
|
|
|
|
|
not_set2n() {
|
|
|
|
|
sed -r 's/# (CONFIG.*) is not set/\1=n/'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# получить изменённые и новые параметры с новыми значениями
|
|
|
|
|
append_options() {
|
|
|
|
|
diff -u $1 $2 | grep "^+[C#]" | sed 's/^.//' | not_set2n
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# получить изменённые и удалённые параметры со старыми значениями
|
|
|
|
|
removed_options() {
|
|
|
|
|
diff -u $1 $2 | grep "^-[C#]" | sed 's/^.//' | not_set2n
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# получить содержимое шаблона
|
|
|
|
|
diff_template_body() {
|
|
|
|
|
local orig_file=$1
|
|
|
|
|
local new_file=$2
|
|
|
|
|
#diff -u $orig_file $new_file &>/tmp/myout || true
|
|
|
|
|
grep_opts=( $(added_options $orig_file $new_file | options_name | grep_patterns) )
|
|
|
|
|
removed_options $orig_file $new_file | exclude_options ${grep_opts[*]} | remove_syntax | discard_option_n || true
|
|
|
|
|
grep_opts_remove=( $(removed_options $orig_file $new_file | grep_patterns) )
|
|
|
|
|
added_options $orig_file $new_file | exclude_options ${grep_opts_remove[*]} || true
|
|
|
|
|
grep_opts_remove_new=( $(removed_options $orig_file $new_file | options_name | grep_patterns) )
|
|
|
|
|
removed_options_new $orig_file $new_file | exclude_options ${grep_opts_remove_new[*]} | remove_syntax || true
|
|
|
|
|
# получаем список опций, которые стали выключенными в новом конфиге
|
|
|
|
|
local keep_opts=( $(append_options $orig_file $new_file | keep_option_n | options_name | grep_patterns) )
|
|
|
|
|
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
|
|
|
|
|
local exclude_opts=( $(append_options $orig_file $new_file | grep_patterns) )
|
|
|
|
|
# сохраняем в шаблоне старые значения опций, которые изменились с пометкой на удаление
|
|
|
|
|
removed_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_options ${keep_opts[*]} | remove_syntax | sort || true
|
|
|
|
|
# получаем список опций, которые изменились
|
|
|
|
|
local exclude_opts=( $(removed_options $orig_file $new_file | options_name | grep_patterns) )
|
|
|
|
|
# сохраняем список опций, которые стали выключенные, но в отсутствовали в старом конфиге (оставляем только новые опции)
|
|
|
|
|
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_option_n | remove_syntax | sort || true
|
|
|
|
|
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
|
|
|
|
|
local exclude_opts=( $(removed_options $orig_file $new_file | grep_patterns) )
|
|
|
|
|
# сохраняем список опций которые изменились и стали либо y либо m
|
|
|
|
|
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | discard_option_n | sort || true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
diff_template_head() {
|
|
|
|
|
local category_pn=$1
|
|
|
|
|
local pv=$2
|
|
|
|
|
echo "# Calculate format=kernel name=.config os_arch_machine==${TEMPLATE_ARCH}&&merge(${category_pn})>=${pv}"
|
|
|
|
|
echo "# Calculate format=kernel name=.config os_install_arch_machine==${TEMPLATE_ARCH}&&merge(${category_pn})>=${pv}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
variable_value()
|
|
|
|
@ -223,7 +254,7 @@ create_kernel_config() {
|
|
|
|
|
[[ -n $4 ]] && local templates="-T $4"
|
|
|
|
|
(cd ${kernel_dir};ARCH=$MARCH KCONFIG_CONFIG=.config_clkernel make defconfig;mv .config_clkernel ${tempdir}/.config) &>>$DEBUG_LOG ||
|
|
|
|
|
eerror "Failed to create default kernel config"
|
|
|
|
|
/usr/sbin/cl-core-patch --pkg-name ${pn} --pkg-category ${category} --pkg-version=${pv} --pkg-slot=${pv} --pkg-path=$tempdir $templates &>>$DEBUG_LOG || eerror "Failed to apply kernel templates"
|
|
|
|
|
/usr/sbin/cl-core-patch --march=$TEMPLATE_ARCH --pkg-name ${pn} --pkg-category ${category} --pkg-version=${pv} --pkg-slot=${pv} --pkg-path=$tempdir $templates &>>$DEBUG_LOG || eerror "Failed to apply kernel templates"
|
|
|
|
|
cat $tempdir/.config || eerror "Kernel configuration file not found"
|
|
|
|
|
rm -rf $tempdir &>>$DEBUG_LOG
|
|
|
|
|
}
|
|
|
|
@ -260,6 +291,12 @@ else
|
|
|
|
|
NAME_ARCH=$MARCH
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# пропустить сборку ядра если выбранная архитектура и архитектура машины отличаются
|
|
|
|
|
if [[ $TEMPLATE_ARCH != $(/usr/bin/arch) ]]
|
|
|
|
|
then
|
|
|
|
|
BUILD_KERNEL=
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ $KVER == "list" ]] || [[ $KVER_OLD == "list" ]]
|
|
|
|
|
then
|
|
|
|
|
list_kernel
|
|
|
|
@ -376,7 +413,7 @@ then
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
mv $NEW_TEMPLATE $TEMPLATE_NAME
|
|
|
|
|
chmod 644 $TEMPLATE_NAME
|
|
|
|
|
chmod ${CHMOD} $TEMPLATE_NAME
|
|
|
|
|
|
|
|
|
|
rm -f $BASE_CONFIG
|
|
|
|
|
|
|
|
|
|