高通yocto编译带内核kernel的头文件交叉编译工具链sdk的配置
一般使用 交叉工具链都是arm-none-gcc 如gcc-arm-8.2-2019.01-x86_64-arm-linux-gnueabi.tar
但使用yocto编译工程的话会在
/home/lide/work/apq8053-le.um.1.3.r2-08400-8x53/poky/build/tmp-glibc/deploy/images/apq8053-32-perf/sdk/
的路径下生成一个sdk的脚本如 oecore-x86_64-armv7a-vfp-neon-toolchain-nodistro.0.sh
团队工作的人只需要将这个脚本考到自己的host主机上进行配置即可使用。一般情况下编译yocto 系统是在服务器上实现,编译一般的应用程序是在个人的ubunut上既可以实现。系统工程师会编译出一个全套的sdk给应用工程师。
默认的编译出的sdk 不带kernel 内核头文件相关信息,导致编译camera时发现好多头文件无法找到,比如 msm_ion.h
msmb-camera.h。
这个时候我们需要对yocto的bb文件进行配置。
首先需要在build/congf/local.conf中增加
TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"
如果以后用到qt5 就这样写TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc qt5"
代表将kernel头文件及文件系统编译到sdk里边。
然后cd poky
source conf/set_bb_env.sh
一般会有快捷键提示你编译的系统。
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Supported targets are:
machine-image
machine-concam-image
machine-drone-image
machine-robot-image
machine-psm-image
machine-qsap-image
machine-recovery-image
Convenience commands for building images:
build-9650-perf-image
build-9650-image
build-9650-2k-image
build-9650-2k-perf-image
build-9650-psm-image
build-9650-psm-perf-image
build-8009-perf-image
build-8009-user-image
build-8009-image
build-8009-robot-image
build-8009-robot-ros-image
build-8009-robot-perf-image
build-8009-robot-dummy-image
build-8009-robot-rome-image
build-8009-robot-rome-perf-image
build-8017-perf-image
build-8017-image
build-8017-user-image
build-8017-qsap-image
build-8017-qsap-perf-image
build-8017-qsap-user-image
build-9607-perf-image
build-9607-psm-image
build-9607-image
build-8909w-image
build-8053-image
build-8053-perf-image
build-8053-user-image
build-8053-32-image
build-8053-32-perf-image
build-8053-32-user-image
build-8053-32-minimal-image
build-8053-32-perf-minimal-image
build-8053-32-user-minimal-image
build-8096-image
build-8096-perf-image
build-8096-drone-image
build-8096-drone-ros-image
build-8096-drone-perf-image
build-sdx20-perf-image
build-sdx20-image
build-8098-image
build-8098-perf-image
Use 'list-build-commands' to see this list again.
这里我们使用 build-8053-32-perf-image
当然也可以使用bitbake,使用之前要确定几个变量所以 一起输入:
MACHINE=apq8053-32 DISTRO=msm-perf VARIANT=perf bitbake machine-image
代编译完成后
在输入
MACHINE=apq8053-32 DISTRO=msm-perf VARIANT=perf bitbake machine-image -c populate_sdk
制作sdk。我在实验中发现如果不执行buildxxx-image 直接执行 sdk的指令会报错误
ERROR: Function failed: do_makesystem (log file is located at /home/lide/work/apq8053-le.um.1.3.r2-08400-8x53/poky/build/tmp-glibc/work/apq8053_32-oe-linux-gnueabi/machine-recovery-image/1.0-r0/temp/log.do_makesystem.16058)
ERROR: Logfile of failure stored in: /home/lide/work/apq8053-le.um.1.3.r2-08400-8x53/poky/build/tmp-glibc/work/apq8053_32-oe-linux-gnueabi/machine-recovery-image/1.0-r0/temp/log.do_makesystem.16058
Log data follows:
| DEBUG: Executing shell function do_makesystem
| can't set android permissions - built without android support
| make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size>
所以,这里的顺序要把握好。
编译时不能混编,比如上边的image,如果有改动需要指令:
buildclean
在set_bb_env.sh中可以看到就是如下操作
buildclean() {
set -x
cd ${WS}/poky/build
rm -rf bitbake.lock pseudodone sstate-cache tmp-glibc/* cache && cd - || cd -
set +x
}
最后生成的sdk比之前多了150M。另外使用指令MACHINE=apq8053-32 DISTRO=msm-perf VARIANT=perf bitbake machine-image -c populate_sdk_ext并未成功,不知为何。
如果提示opkg_utils_git.bb 建议
build/tmp-eglibc/sysroots/machine/lib/
mv ld-linux.so.3 ld-linux-armhf.so.3
最后安装速sdk的时候配置如下