硬件平台: imx8
操作系统: debian8


前期准备:系统配置
1.首先安装yocto需要使用的软件包(重要)

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev curl

$ sudo apt-get install ncurses-dev u-boot-tools

下边的包需要验证是否必须

$ sudo apt-get install xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake make gcc g++ groff lzop asciidoc 

2.修改系统默认语言为en_US.UTF-8

# dpkg-reconfigure locales

3.删除其他arm-linux-gcc编译器环境变量
yocto采用自带的编译器进行编译,需要注释掉其他交叉编译器环境变量。


配置编译环境: 进入目录执行配置(必须用普通用户执行,否则报错)

$ cd fsl-release-yocto
$ DISTRO=fsl-imx-xwayland MACHINE=imx8mqevk source fsl-setup-release.sh -b build-xwayland

DISTRO - 指定发行版
MACHINE - 指定平台型号
-b指定目标目录,执行该命令后会自动进入该目录

将downloads文件合并后,解压至fsl-release-yocto目录下

$ cat downloadsaaa* > download.tar.gz
$ tar -zxvf download.tar.gz 

重要:否则编译的时候将自动从网下下载这些东西,但某些文件貌似因为墙的原因,无法下载,从而造成编译失败。


编译内核:

清除编译状态: $ bitbake -c cleansstate virtual/kernel

配置本地编译: $ bitbake -c patch virtual/kernel

重要:
此操作执行从本地文件编译,否则默认从网上下载,会很慢,而且有可能会失败。

配置kernel: $ bitbake -c menuconfig virtual/kernel

编译kernel: $ bitbake -c compile virtual/kernel

编译模块 :$ bitbake linux-imx -c compile_kernelmodules -f -v
(实际上在执行compile命令时会自动执行,因此此步骤可以省去)


部署

$ bitbake -c deploy -f -v linux-imx

将Image/dtb/modules文件输出至build-xwayland/tmp/deploy-linux-imx目录中

执行patch操作后kernel源码位于:
build-xwayland/tmp/work-shared/imx8mqevk/kernel-source

执行menuconfig操作后会产生.config文件,位于:

build-xwayland\tmp\work\imx8mqevk-poky-linux\linux-imx\4.9.88-r0\build中

编译UBOOT:

进入uboot-imx目录下查看切换所需分支

$ cd  uboot-imx/
$ git branch
  ce-certify
  imx_v2018.03_4.14.98_2.0.0_ga-1gddr
* imx_v2018.03_4.14.98_2.0.0_ga-2gddr
  imx_v2018.03_4.14.98_2.0.0_ga-2gddr-MT3D1024M

切换分支:

$ git checkout imx_v2018.03_4.14.98_2.0.0_ga-2gddr-MT3D1024M

清除: $ bitbake -c cleansstate u-boot
编译: $ bitbake -c compile u-boot -f
部署: $ bitbake -c deploy u-boot

生成带有imx专有head信息的u-boot才能用于启动:

$ bitbake imx-boot

文件位置:tmp\deploy\images\imx8mqevk\imx-boot-imx8mqevk-sd.bin

cleansstate - 清除状态
patch - 设置本地编译(重要)
compile -f - 编译命令
deploy - 部署(将编译好的文件放至tmp/deploy目录下)
-v 显示运行状态

源码位于:tmp/work/imx8mqevk-poky-linux/u-boot-imx/2017.03-r0/git


WARNING: Host distribution "ubuntu-18.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
警告:主机发行版“ubuntu-18.04”尚未通过此版本的构建系统进行验证;您可能会遇到意外的失败。建议您使用经过测试的发行版。

原因分析: 系统版本太高,尚未经过验证,实际上不影响使用,建议还是采用debian8/ubuntu16.0进行开发。


scripts/kconfig/mconf.o: In function `show_help':
mconf.c:(.text+0x914): undefined reference to `stdscr'

ncurses-dev没有安装的原因,安装后即可。


WARNING: /opt/imx8/fsl-release-yocto/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_4.9.88.bb.do_compile is tainted from a forced run

提示强制重新编译(-f选项),正常情况,无需理会。