交叉编译内核找不到gcc

交叉编译内核找不到gcc

我正在交叉编译 Raspbian 内核,因为 Pi 需要大约 12 小时才能完成(Raspberry Pi 1)。

我将 ARM 和内核的构建工具放在/home/gray/Desktop/tmp/.

我正在遵循本指南:Raspberry Pi 内核编译 - eLinux.org

我的问题是,当我进行编译时,它找不到arm-linux-gnueabihf-gcc-4.8.3,它显然位于我导出CCPREFIX时链接的文件夹中。这是我所做的:

gray@Rava-Xubuntu:~/Desktop/tmp/linux$ export CCPREFIX=/home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-

当我尝试构建时它会返回:

gray@Rava-Xubuntu:~/Desktop/tmp/linux$ make ARCH=arm CROSS_COMPILE=${CCPREFIX}
/home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc: 1: /home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc: arm-linux-gnueabihf-gcc-4.8.3: not found
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
  CC      kernel/bounds.s
/home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc: 1: /home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc: arm-linux-gnueabihf-gcc-4.8.3: not found
Kbuild:43: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 127
Makefile:990: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

即使该文件显然在那里:

即使文件显然在那里

谢谢。

答案1

所以我想通了。

我刚刚获取了 gcc 的 crossbuild 版本(我认为就是这样)

sudo apt-get install crossbuild-essential-armhf

然后我的新路径是:

export CCPREFIX=/usr/bin/arm-linux-gnueabihf-

并且构建工作完美!

答案2

我无法arm-linux-gnueabihf-gcc-4.8.3从您提供的内容中找到失败的地方http://pastebin.com/ZdGfP3Qg,但是你的 PATH 环境变量包含奇怪的字符:

PATH=/home/gray/Desktop/tmp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-ras\342\200\214\342\200\213pbian/bin:/home/gray/bin:/usr/local/sbin:/usr/local/bin:/usr/sbi" ...

那些\342\200\214\342\200\213部分raspbian不应该在那里。

重新检查您的脚本并适当设置 PATH。

然而,您的 CROSS_COMPILE 似乎完好无损。最有可能的是 gcc 尝试从 PATH 运行东西,或者你在某处有一个损坏的工具链/悬挂的符号链接。

使用此 strace 进行深度调试:

strace -f -v -s150 -o log -eexecve,stat,stat64 (make command)然后做fgrep ENOENT log。然后从 PATH 中过滤掉不存在的项目,并尝试找到并修复剩余的项目。

相关内容