玩imx6板卡也有两年了,之前由于各种原因(主要是懒),一直用的是官方的LTIB版本,这里必须要吐槽一下这个LTIB,各种错误百出,而且严重挑系统,硬是将我从CentOS阵营搞到Ubuntu社区。最近由于有其他用途,终于花了一周时间移植了这个庞大的系统。
1.系统准备(以ubuntu14.04 LTS为例)
在命令行下使用apt-get安装如下软件:
# sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat
# sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils 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
基本就这些软件,如果还有其他错误请自行解决,最重要的一点,系统必须要准备大概60G左右的空间。
2. 下载repo
飞思卡尔官方提供的是谷歌的repo,目前国内是下不下来的,所以这里使用另一个repo:
# curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin //获取repo
# chmod a+x repo
# PATH= ~/bin:$PATH
3. 初始化repo并git下源码,依据网速可能要一个小时左右
# mkdir fsl-release-bsp
# cd fsl-release-bsp
# git config --global user.name "Your Name"
# git config --global user.email "Your Email"
# git config --list
# repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.28-1.0.0_ga
# repo sync
4. 编译yocto工程
这里我测试过两个image,一个是core-image-base,编译完成后只有基础命令行,文件大概20G左右;另一个是fsl-image-gui,编译完成后有基本的qt界面和一些简单的例子,也带了multimedia,文件大概40G左右。
同学们可以依据自己的需求编译不同版本。说明一下, -b 可以指定你要将文件编译到哪个目录,-e是选择编译的后端,有fb、
dfb、wayland、x11等可供选择,这里我选择的是x11,如果你对其他几个开发顺手的话也可以选其他的。编译大概4个小时左右。
下面开始介绍编译方法:
1)配置
# vi conf/local.conf
修改板子类型,使用 “ls ../sources/meta-fsl-arm/conf/machine/*.conf -l ”命令查看支持的类型,这里我选择 imx6qsabresd。MACHINE ??= 'imx6qsabresd'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K"
CONF_VERSION = "1"
BB_NUMBER_THREADS = '4'
PARALLEL_MAKE = '-j 4'
ACCEPT_FSL_EULA = ""
修改编译进程数:修改BB_NUMBER_THREADS和PARALLEL_MAKE,我的双核,所以改为2。
2) 编译
# MACHINE=
# bitbake fsl-image-gui
5. 编译工具链
相信大多数同学都不想在yocto上开发,而是想将代码提取出来自己定制。那你就需要将工具链编译一下了。
# MACHINE=
# bitbake meta-toolchain //又是漫长的等待
编译完成后请进入
6. 查看编译完成的目录
# tree -d -L 2 -A
├── build_x11 //我的编译目录
│ ├── cache //编译缓存
│ ├── conf //配置
│ ├── sstate-cache //保存状态,如果没有改变下次不再重新编译包
│ └── tmp //镜像,代码
├── downloads //下载的东东
│ ├── cpuburn-neon-20140626
│ ├── debian
│ ├── etc
│ ├── git2
│ ├── images
│ ├── licenses
│ ├── media
│ ├── share
│ └── test
└── sources //repo下载的yocto
├── base
├── meta-browser
├── meta-fsl-arm
├── meta-fsl-arm-extra
├── meta-fsl-bsp-release
├── meta-fsl-demos
├── meta-openembedded
├── meta-qt5
└── poky
重点看tmp目录下的内容
tmp# tree -d -L 2 -A
├── buildstats //编译时状态记录,如果中断可以续编
│ ├── fsl-image-gui-imx6qsabresd
│ ├── fsl-image-mfgtool-initramfs-imx6qsabresd
│ └── meta-toolchain-imx6qsabresd
├── cache //编译过程中的缓存
│ └── default-glibc
├── deploy //生成的镜像、文件系统及安装插件
│ ├── images
│ ├── licenses
│ └── rpm
├── log //进程编译过程中的log信息
│ └── cooker
├── sstate-control //编译完成的包会在这里建立文件以标识
├── stamps
│ ├── all-poky-linux
│ ├── cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi
│ ├── cortexa9hf-vfp-neon-poky-linux-gnueabi
│ ├── i686-linux
│ ├── i686-nativesdk-pokysdk-linux
│ ├── i686-poky-linux-gnueabi
│ ├── i686-pokysdk-linux
│ ├── imx6qsabresd-poky-linux-gnueabi
│ └── work-shared
├── sysroots //缓存的工具连,但是你用不了
│ ├── i686-linux
│ ├── i686-nativesdk-pokysdk-linux
│ ├── i686-nativesdk-pokysdk-linux-tcbootstrap
│ ├── imx6qsabresd
│ └── imx6qsabresd-tcbootstrap
├── work //你的代码都在这里
│ ├── all-poky-linux
│ ├── cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi
│ ├── cortexa9hf-vfp-neon-poky-linux-gnueabi
│ ├── i686-linux
│ ├── i686-nativesdk-pokysdk-linux
│ ├── i686-poky-linux-gnueabi
│ ├── i686-pokysdk-linux
│ └── imx6qsabresd-poky-linux-gnueabi
└── work-shared
└── gcc-4.9.1-r0
如果用的是官方的evm开发板,就可以直接从deploy文件夹中拷贝内核和文件系统测试。