目录
背景
最近在使用新平台是需要做环境统一,开发环境和运行环境,之前使用的都是qt512,交叉编译器使用arm-linux-gcc7.5,新平台采用3.15的内核,交叉编译器使用arm-linux-gcc4.9,因此需要做统一;打算在一台设备中做两套运行环境在,后续发现库的兼容问题等,因此直降使用arm-liunx-gcc7.5做移植,本文记录编译文件系统遇到的问题。
版本
交叉编译器版本:arm-linux-gcc7.5
内核版本:3.15
问题一
使用apt-get install&ubuntu自带的编译器(我使用的)安装的编译器无法编译
现象
>>> toolchain-external-custom Configuring
Distribution toolchains are unsuitable for use by Buildroot,
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.
package/pkg-generic.mk:224: recipe for target '/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured' failed
make: *** [/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured] Error 1
大致意思为:
交叉编译器不适合buildroot使用?
原因是它们以一种可重新定位的方式配置?
并且,包含了很多预置的库,这些库可能和buildroot想要创建的东西冲突?
经过查找资料分析得出:
ubuntu安装编译器是为了使用本身的环境,做了一下配置,如工具链不可以被重定位(non-relocatable)等 导致buildroot不接受这个工具链,
解决办法
自行网上下载编译器的tar包,直接解压使用就不会有问题了。
下载链接
问题二
编译器中的内核版本和buildroot中的内核版本不兼容问题。
Incorrect selection of kernel headers: expected 3.2.x, got 4.6.x
原因是在交叉编译器路径下有一个内核版本代码
buildroot在执行时会检测这这个内核版本代码
#define LINUX_VERSION_CODE 263680
在我的编译器路径是
gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h
263680 = 40600(h)
所以移位得到4.6.x的内核版本
但是buildroot中的版本号为3.15,两边那不一样,报错,
解决办法
修改交叉编译器中的版本号和buildroot中一致即可。
版本计算方式
197120 = 00110000001000000000(b) = 30200(h)对应3.2.x版本内核
263680 = 01000000011000000000(b) = 40600(h)对应4.6.x版本内核
199168 = 00110000101000000000(b) = 30A00(h)对应3.10.x版本内核