我正在交叉编译 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 中过滤掉不存在的项目,并尝试找到并修复剩余的项目。