如何为特定内核版本魔法构建内核和内核模块?

How to build kernel and kernel modules for specific kernel version magic?

我需要构建内核才能拥有 vermagic

3.10.28-gbc1b510-33899-g9fa745e SMP preempt mod_unload modversions ARMv7

但在通过 modinfo 构建和验证某些模块后显示

3.10.28 preempt mod_unload modversions ARMv6

看来我无法加载模块,因为不同的 vermagic。如何为 vermagic 构建完全相同的内核和模块?我正在使用 buildroot。

我创建这个 shell 脚本是为了准备构建

#!/bin/sh
export PATH=$PATH:/buildroot-2018.02.3/output/host/arm-buildroot-linux-gnueabi/bin:/buildroot-2018.02.3/output/host/bin:/buildroot-2018.02.3/output/host/sbin:/buildroot-2018.02.3/output/host/bin
export LD_LIBRARY_PATH=/buildroot-2018.02.3/output/host/lib
export LIBRARY_PATH=/buildroot-2018.02.3/output/host/lib
export PKG_CONFIG_PATH=/buildroot-2018.02.3/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/pkgconfig
exec /bin/bash

然后我进入文件夹

/buildroot-2018.02.3/output/build/linux-3.10.28/

make distclean
make clean

然后复制 .config 和

make ARCH=arm menuconfig

make -j9 ARCH=arm

我使用的是原始内核 konfig,另外选择了几个选项构建为模块,无需修改任何其他选项。

有 linux-3.10.28/arch/arm/Makefile 文件。在这个文件中有那些定义

arch-$(CONFIG_CPU_32v7)     :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6)     :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)

我在某处找到了导致我更换的建议

arch-$(CONFIG_CPU_32v6)     :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)

arch-$(CONFIG_CPU_32v6)     :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)

我也取消了这两个的注释:

tune-$(CONFIG_CPU_V6)       :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K)      :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)

我加了

-gbc1b510-33899-g9fa745e SMP

内核.config

中的local_version

现在 modinfo 打印的版本字符串是一样的。