Linux内核构建编译错误stringop-overflow和sizeof-pointer-memaccess

时间:2018-12-09 12:42:50

标签: linux linux-kernel

我尝试构建Linux内核,但遇到一些编译错误。有谁知道我在做什么错以及如何解决? (或者,您还需要什么其他信息?)

构建系统正在运行最新的Fedora:4.19.6-300.fc29.x86_64#1 SMP Sun Dec 2 17:33:14 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

目标系统是Radxa Rock Pi 4

  

export ARCH = arm64

     

export CROSS_COMPILE = aarch64-linux-gnu-

请参阅https://forum.radxa.com/t/building-debian-image-on-gcc8-systems/128/4

是的,Radxa有一个论坛,并且我已经张贴在该论坛上,但是我认为Stack Overflow在这一领域拥有更广泛的经验。

编译错误如下:

  

arch / arm64 / kernel / vdso.c:在“ vdso_init”函数中:   arch / arm64 / kernel / vdso.c:119:6:警告:“ memcmp”从以下位置读取了4个字节   大小为1 [-Wstringop-overflow =]错误的区域,禁止   警告:vdso.c:119如果(memcmp(&vdso_start,“ \ 177ELF”,4)){         ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make [1]:*** [scripts / Makefile.build:277: arch / arm64 / kernel / vdso.o]错误1

  

fs / exec.c:在“ get_task_comm”函数中:fs / exec.c:1084:32:警告:   “ strncpy”调用中“ sizeof”的参数与   资源;您是要使用目的地的大小吗?   [-Wsizeof-pointer-memaccess]错误,禁止警告:exec.c:1084
  strncpy(buf,tsk-> comm,sizeof(tsk-> comm));

                            ^

2 个答案:

答案 0 :(得分:0)

Radxa提供了答案,那就是将gcc-aarch64-linux-gnu降级到Fedora早期版本中的版本7。

答案 1 :(得分:0)

解决此问题的最佳方法是使用与您尝试编译的内核年龄相匹配的编译器。

为此,请使用预构建的编译器,将其安装到 /usr/local 并将其定义为 CROSS_COMPILE 变量:

wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
sudo tar xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz  -C /usr/local/
export CROSS_COMPILE=/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

现在你可以像这样制作你的内核:

export ARCH=arm64
make

否则,要专门修复您的错误,请更改以下内容(在 arch/arm64/kernel/vdso.c 中):

extern char vdso_start, vdso_end;

为此:

extern char vdso_start[], vdso_end[];

同时将所有引用更改为

&vdso_start

以下内容

vdso_start

然而,不幸的是,这只能解决大量错误中的第一个。