飞思卡尔-iMX6DL -- Yocto工程编译过程

安装搭建yocto环境所需要的软件包,非root用户执行以下指令(注意不要用root用户去搭建yocto环境)

1、主机依赖包安装

  sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
    
  sudo apt-get install libsdl1.2-dev xterm sed cvs subversion texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
    
  sudo apt-get install u-boot-tools

2、python3版本问题
因为bitbake需要python3支持,然后ubuntu默认的python使用的是python2.7,python3的版本默认使用python3.2
提示如下:BitBake requires Python 3.4.0 or later as ‘python3’
需要安装python3.4或者更高版本.apt-get install python3.5
ubuntu 默认仓库是没有python3.5的,故此使用

$sudo add-apt-repository ppa:fkrull/deadsnakes
$sudo apt-get update
$sudo apt-get install python3.5

安装之后将/usr/bin/python3 链接指向/usr/bin/python3.5

$sudo ln -sb /usr/bin/python3.5 /usr/bin/python3
$ls /usr/bin/python3 -l
lrwxrwxrwx 1 root root 18  9月 14 09:53 /usr/bin/python3 -> /usr/bin/python3.5

3、下载repo

Freescale’s Community Yocto BSP

To get the BSP you need to have ‘repo‘’ installed and use it as:

Install the ‘repo’ utility:

$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

注:这一步最大的问题就是google被封了,下载不下来,超时,要别处搞个repo下来.我的方法是

$ cd ~/bin
$ git clone git://git.omapzoom.org/git-repo.git

repo 只是一个几百行的 PYTHON 脚本,而不是完整的repo-project 包,所以需要安装完整包才可以,git-repo里面就是完整的安装包,repo不能脱离这个环境单独使用,即:

 $ PATH=${PATH}:~/bin/git-repo

4、使用repo 抓下来BSP的源码

$ mkdir fsl-community-bsp
$ cd fsl-community-bsp

$ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1.15-1.0.0_ga
$ repo sync 

第一次装,这一步用时比较长(可能会几个小时,主要看网速怎样) ,注意在yocto下,我们下载BSP实际上只是一些配置文件,实际编译的时候是边编译边下载的,所以在我们下载的BSP里面是找不到代码的。

5、编译BSP

$ MACHINE=imx6dlsabresd source setup-environment build

distro name有下面4个值
fsl-imx-x11 说明只支持X11 graphics
fsl-imx-wayland 说明只支持Wayland weston graphics
fsl-imx-xwayland 说明支持 Wayland graphics 和 X11.
fsl-imx-fb 说明只支持Frame Buffer graphics 不支持 X11 和 Wayland

MACHINE同样有多种配置:
imx6qpsabreauto
imx6qpsabresd
imx6ulevk
imx6ull14x14evk
imx6ull9x9evk
imx6dlsabreauto
imx6dlsabresd
imx6qsabreauto
imx6qsabresd
imx6slevk
imx6solosabreauto
imx6solosabresd
imx6sxsabresd
imx6sxsabreauto
imx7dsabresd

-b:编译目录配置项
这个是指明了配置编译时候的目录
-e:后端图像配置项
这个是指明了显示平台和DISTRO作用一样,如果你没有指定DISTRO,那在后用-e fb 指明的是使用的是DISTRO=fsl-imx-fb否则是DISTRO=fsl-imx-x11可以支持的后端图像有:
• fb
• dfb
• wayland
• x11

如果编译过程中无意关掉了终端,那么重新打开终端进入fsl-release-bsp目录后只需要执行以下命令就可以重新进入编译环境:

$ source setup-environment build

设置好后开始编译。
我们用bitbake来编译的。
格式是 bitbake
project name有下面的选项
core-image-minimal 这个是构建一个能启动的最小的系统
core-image-base 这个是构建一个只有命令行的系统
core-image-sato 这个是一个支持X11图形界面的系统
fsl-image-machine-test 这个imx内核的只有命令行的系统
fsl-image-gui 这个是IMX内核的不支持qt的图形界面的系统
fsl-image-qt5 这个是支持qt5的图形界面的系统

$ bitbake core-image-minimal

生成uboot:

$ MACHINE=imx6dlsabresd  bitbake -c deploy u-boot-imx

至此,我们所需要的所有文件均已生成,包含了uboot,kernel,rootfs以及交叉编译qt应用程序的交叉编译工具。相对应的软件版本如下:
uboot:v2016.03
kernel:v4.1.15
qt版本:qt5.6.2
当然最重要的是yocto编译生成的rootfs中包括了imx6所需要的各种库,特别是有我们所需要的能完整的支持imx6的gpu性能的qt5.6.2库,而且经过测试是支持eglfs的。功夫不负有心人,这也正是我的目的所在。

代码的位置

编译出来的image的位置

编译的log信息

如何单独编译kernel和u-boot
我们修改了kernel或者u-boot的源代码,直接运行bitbake fsl-image-qt5是不会编译我们修改的源代码的。所以就需要我们单独编译源代码。

编译kernel

配置menuconfig

  bitbake -c menuconfig -v linux-imx 

单独编译kernel

  bitbake -c compile -f -v linux-imx 
  bitbake linux-imx -c compile_kernelmodules -f -v    
  bitbake -c deploy -f -v linux-imx  
  bitbake fsl-image-qt5

执行上面的命令将重新编译内核、设备树、模块。并且重新生成rootfs 。
实际上我们修改了内核,实际上往往不需要更新rootfs的,而我们 执行bitbake fsl-image-qt5时会重新生成rootfs,这个操作会耗费很长的时间。
所以我们也可以只执行

  bitbake -c compile -f -v linux-imx 
  bitbake linux-imx -c compile_kernelmodules -f -v    
  bitbake -c deploy -f -v linux-imx 

这两个命令,然后再自己把zImage和设备树文件拷出来。
执行上面个三个命令编译出来的zImage和设备树在
fsl-releases-bsp/imx6q-x11/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.14.52-r0/deploy-linux-imx/
目录下。

单独编译u-boot

  bitbake -c compile -f -v u-boot-imx
  bitbake -c deploy -f -v u-boot-imx
  bitbake fsl-image-qt5

同样单独编译完u-boot,执行bitbake fsl-image-qt5时会重新生成rootfs,会耗费很长的时间。
所以我们也可以只执行

  bitbake -c compile -f -v u-boot-imx
  bitbake -c deploy -f -v u-boot-imx

然后把u-boot拷出来
编译出来的u-boot在
fsl-releases-bsp/imx6q-x11/tmp/work/imx6qsabresd-poky-linux-gnueabi/u-boot-imx/2015.04-r0/deploy-u-boot-imx/
目录下。

最后,如果不使用yocto中的uboot和kernel源码,那么我们应该如何获得对应版本的uboot和kernel源码呢?有两种办法:
第一种是直接去官网下载相对应版本的软件源码,网址如下:

http://git.freescale.com/git/

第二种是通过git clone命令下载软件源码,在终端下执行如下指令:
下载uboot :

 git clone http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git -b imx_v2016.03_4.1.15_2.0.0_ga

下载kernel:

 git clone http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git -b imx_4.1.15_2.0.0_ga

后记:在使用fsl-imx-fb生成的qt来运行qml程序的时候发现其对部分qml程序在性能上的支持并不好,简直就是浪费了imx6的性能,因此最终我还是编译出了一个fsl-imx-x11的版本来运行qml程序,所以建议大家不要去编译fb版本的文件系统了。

烧录
首先我们要参考开发板的使用说明,把开关拨到download模式。
然后在freescale的官网上下载对应的Linux版本的mfgtools。
之后根据我们的需要修改两个配置文件。cfg.ini和ucl2.xml。
1 cfg.ini
这个文件就在mfgtools目录下。
我们首先要根据烧录的媒介(EMMC\SD\NAND\NOR FLASH…)设置[LIST]下的name,
这个name就是对应ucl2.xml文件下的 .
mfgtools会根据这个name,执行ucl2.xml对应的 中定义的操作。
然后就是根据我们板的情况定义:
[variable]下的变量
例如要烧录到开发板的EMMC上,那么就要把mmc的值设置为3 ,把ldo=的值设置为-ldo

2 ucl2.xml

这个文件在 Profiles\Linux\OS Firmware\目录下
这个文件我们主要是要修改

3 在我们修改完两个配置文件后可能会出现
“Initalize operation failed,please refer to “MfgTool.log” for detailed information,error code:4”的错误。
出现这个错误,一般是没有找到对应的文件,我们要先检查下是否我们要烧录的文件的路径写对了。
如果这个路径是对的,可能是其他CPU类型的文件不存在造成的。
例如我们要烧录的CPU是6Q,但是6D的某个文件不存在,也会这个错误。我们只要把其他不需要的CPU的那一行注释掉就可以了。

4 用原始的配置文件会烧录 u-boot zImage 设备树文件 rootfs,rootfs是很大的,烧录起来时间很长,而我们只改了kernel或者u-boot,往往不需要重新烧录rootfs。
我们可以把相关的分区的配置和保存rootfs的配置注释掉,这样就快很多了。

你可能感兴趣的:(yocto)