高通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的时候配置如下

进入sysroot中的kernel源码目录配置源码:
#cd ./sdk/sysroots/rmv7a-vfp-neon-poky-linux-gnueabi/usr/src/kernel/
#make silentoldconfig scripts




sitemap