我正在构建linux内核,如果我的内核在git下,那么内核版本每次都是:
Image Name: Linux-2.6.39+
如果我没有使用git,那么一切都没问题,最后没有任何加分。
我知道这是由scripts / 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
那么,如果没有代码更改,可以说构建系统不需要在版本行的末尾添加“+”吗?
答案 0 :(得分:22)
版本字符串末尾的加号表示内核是根据修改后的源构建的(即,存在未提交的更改)。 scripts/setlocalversion
中的评论也表明了这一点。
尽管有一个脏的工作目录,为了避免附加'+',只需在运行make
时明确地设置LOCALVERSION:
make LOCALVERSION=
在构建之前,您可能还需要在内核配置(CONFIG_LOCALVERSION_AUTO
)中将配置选项n
更改为.config
:
sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" .config
答案 1 :(得分:18)
要防止脚本.scmversion
将touch .scmversion
附加到内核本地版本的末尾,请在内核源代码的根目录中创建一个空的SELECT *
FROM my_table
WHERE summary LIKE '%keyword1%'
OR summary LIKE '%keyword2'
OR summary LIKE '%keyword3%';
文件。
IN
这样,您就可以像在内核配置文件中一样保留LOCALVERSION,以防您想要将本地签名附加到内核名称。
答案 2 :(得分:0)
操作脚本/ setlocalversion似乎是我的唯一方法。
强制返回scm_version()
:
scm_version()
{
local short
short=false
**return**
答案 3 :(得分:0)
如果您使用的是yocto和imx soc,请将该行添加到local.conf
SCMVERSION_pn-linux-imx = ""
在imx-4.9.88-2.0.0_ga版本上测试