Не добавляйте "+" в версию ядра Linux

Я создаю linux-ядро, если мое ядро под git, а затем версия ядра каждый раз:

Image Name:   Linux-2.6.39+

Если я не использую git, тогда все в порядке, без какого-либо плюса в конце.

Я знаю, что это сделано скриптом /setlocalversion:

if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
    # full scm version string
    res="$res$(scm_version)"
else
    # append a plus sign if the repository is not in a clean
    # annotated or signed tagged state (as git describe only
    # looks at signed or annotated tags - git tag -a/-s) and
    # LOCALVERSION= is not specified
    if test "${LOCALVERSION+set}" != "set"; then
        scm=$(scm_version --short)
            res="$res${scm:++}"
        fi
fi

Итак, можно ли без изменений кода сказать, что система сборки не нуждается в добавлении "+" в конце строки версии?

Ответ 1

Знак плюса в конце строки версии есть как индикатор того, что ядро было построено из измененных источников (т.е. Были некорректные изменения). Это также указывается в комментариях в scripts/setlocalversion.

Чтобы избежать добавления "+", несмотря на наличие грязной рабочей директории, просто установите LOCALVERSION при запуске make:

make LOCALVERSION=

Возможно, вам также придется изменить конфигурационный параметр CONFIG_LOCALVERSION_AUTO на n в конфигурации вашего ядра (.config) перед созданием:

sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" .config

Ответ 2

Чтобы сценарии scripts/setlocalversion добавляли + в конец локальной версии ядра, создайте пустой файл .scmversion в корне источника ядра.

touch .scmversion

таким образом, вы сможете оставить LOCALVERSION как есть в файле конфигурации ядра, если вы хотите добавить локальную подпись к имени ядра.

Ответ 3

Манипулирование скриптами /setlocalversion кажется единственным способом для меня. Возврат силы в scm_version():

scm_version()
{
        local short
        short=false
        **return**