转自:https://blog.csdn.net/zengxianyang/article/details/50298643
1.yocto_project是什么?
Yocto Project是一个开源协作项目。它可以提供一些模板、工具(交叉编译工具链等)用于构建嵌入式系统。有关于yocto_project的详细介绍请看以下博客:
http://www.ibm.com/developerworks/cn/linux/l-yocto-linux/
(声明:博客引自他人文章,特此说明)
2.yocto_project使用简介
2.1 获取yocto_project源码包,构建yocto_project开发环境
这里,作者只讲Ubuntu-12.04环境下的yocto_project配置,其他版本的Linux系统详见上文中的引用博客。
1.下载Ubuntu-12.04必备插件,初始化yocto_project环境:
- $ 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
2.使用repo获取yocto_project源码包:
- 1. Create a bin folder in the home directory.
- $ mkdir ~/bin (this step may not be needed if the bin folder already exists)
- $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
- $ chmod a+x ~/bin/repo
- 2. Add the following line to the .bashrc file to ensure that the ~/bin folder is in your PATH variable.
- export PATH=~/bin:$PATH
- $ git config --global user.name "Your Name"
- $ git config --global user.email "Your Email"
- $ git config --list
3.接下来的例子是展示如何下载NXP(飞思卡尔)厂商的BSP开发使用的yocto_project,其中fsl-release-bsp是自己创建的一个目录:
- $ mkdir fsl-release-bsp
- $ cd fsl-release-bsp
- $ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.38-6UL7D_beta
2.2 使用yocto_project进行NXP(飞思卡尔)BSP开发实例说明
2.2.1 配置环境变量
1.解压下载好的yocto_project工具包,到工具包根目录下,看到如下文件:
- /yocto_project$ ls
- fsl-release-bsp_1025.tgz fsl-setup-release.sh README setup-environment sources
2.2.2 yocto_project工程下载和编译
说明:yocto_project工程编译完毕之后非常大,建议预留120G空间给yocto_project。
2.选择你要编译的板子名字,指定编译生成目录,指定生成的文件系统的gui类型(-fb、-x11、-wayland)
使用示例:
- $ MACHINE=<machine name> source fsl-setup-release.sh -b <build dir> -e <backend>
比如i.MX6ul平台CPU,编译生成目录指定为build-fb:gui类型为-fb:
- /yocto_project$ MACHINE=imx6ulevk source fsl-setup-release.sh -b build-fb -e fb
第一次编译的时候会出现以下信息:
- The local.conf file contains the machine and distro specifications:
- MACHINE ??= 'imx6qsabresd'
- DISTRO ?= 'poky'
- ACCEPT_FSL_EULA = "1"
- The MACHINE configuration can be changed by editing this file, if necessary.
- ACCEPT_FSL_EULA in the local.conf file indicates that you have accepted the conditions of the EULA.
反正你选择接受就是了,然后一直敲回车,直到开始编译。OK,第一次编译yocto_project非常的漫长,好一点的电脑配置都要一天,用虚拟机带Linux系统的环境进行编译的话,会让你等到蛋疼,so,你可以让电脑一直运行,然后你去泡妞吧。
3.yocto_project使用技巧和心得
3.1.如何加快yocto_project编译速度
修改build-dir/conf/local.conf配置文件,具体修改如下图:
3.2 编译出错,如何重新编译?
如果编译出错,将sources/poky/meta/recipes-sato/images这个文件中的一些包去掉,在最后根据自己的需要加入相应的包
比如:IMAGE_INSTALL += " nodejs"
注意:这里的包名必须按照官方提供的来,不能想当然。
3.3 编译生成的u-boot、内核、文件系统镜像在哪里?
编译完成之后,生成的u-boot、内核、文件系统镜像在build-dir/tmp/deploy/images/machine_board(imx6ulevk)目录下,如图所示:
- ~/newland-work/yocto_project/build-fb/tmp/deploy/images/imx6ulevk$ ls
- fsl-image-gui-imx6ulevk-20150908123149.rootfs.ext3 fsl-image-gui-imx6ulevk.manifest zImage
- fsl-image-gui-imx6ulevk-20150908123149.rootfs.manifest fsl-image-gui-imx6ulevk.sdcard zImage--3.14.38-r0-imx6ul-14x14-evk-20150908123149.dtb
- fsl-image-gui-imx6ulevk-20150908123149.rootfs.sdcard fsl-image-gui-imx6ulevk.tar.bz2 zImage--3.14.38-r0-imx6ul-14x14-evk-csi-20150908123149.dtb
- fsl-image-gui-imx6ulevk-20150908123149.rootfs.tar.bz2 modules--3.14.38-r0-imx6ulevk-20150908123149.tgz zImage--3.14.38-r0-imx6ulevk-20150908123149.bin
- fsl-image-gui-imx6ulevk-20150908214837.rootfs.ext3 modules-imx6ulevk.tgz zImage-imx6ul-14x14-evk-csi.dtb
- fsl-image-gui-imx6ulevk-20150908214837.rootfs.manifest README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt zImage-imx6ul-14x14-evk.dtb
- fsl-image-gui-imx6ulevk-20150908214837.rootfs.sdcard u-boot.imx zImage-imx6ulevk.bin
- fsl-image-gui-imx6ulevk-20150908214837.rootfs.tar.bz2 u-boot-imx6ulevk.imx
- fsl-image-gui-imx6ulevk.ext3 u-boot-sd-2015.04-r0.imx
3.4 如何单独编译u-boot、Linux内核呢?
3.4.1 单独编译u-boot
bitbake命令单独编译u-boot:
$ bitbake -c compile -f u-boot-imx
$ bitbake -c deploy -f u-boot-imx //指定编译生成的u-boot镜像到deploy
3.4.2 单独编译Linux内核
bitbake命令单独编译kernel:
bitbake -c compile -f linux-imx //编译内核
bitbake -c deploy -f linux-imx //部署内核镜像到deploy目录