我尝试构建Linux内核,但遇到了一些编译错误。有人知道我做错了什么吗?我该怎么解决?(或者,您还需要什么其他信息?(
构建系统正在运行最新的Fedora:4.19.6-300.fc29.x86_64#1 SMP 12月2日星期日17:33:14 UTC 2018 x86_64 x86_66 x86_6 GNU/Linux
目标系统是Radxa Rock Pi 4
导出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 if(memcmp(&vdso_start,"\177ELF",4(({^~~~~~~
和
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((;
^
Radxa提供了答案,即将gcc-aarch64-linux-gnu
降级到Fedora上一版本中的版本7。
解决此问题的最佳方法是使用与要编译的内核的年龄相匹配的编译器。
为此,请使用预构建的编译器,将其安装到/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
然而,不幸的是,这只能解决大量错误中的第一个。