主控芯片: NXP IMX6ULL.
参考《i.MX_Yocto_Project_User’s_Guide.pdf》
参考《Yocto Project Reference Manual》
1. 搭建Ubutun主机环境
参考《Yocto Project Reference Manual》
安装ubuntu环境,建议安装 Ubuntu 14.04或Ubuntu 12.04版本的, 因为参考手册里面出现的版本,以免出现其他问题。
我这里使用版本为ubuntu-14.04.6-desktop-amd64.iso, 在windos主机上面搭建了一个虚拟机, 所有开发都是在虚拟机内完成的。参考《Yocto Project Reference Manual》的章节 “1.2.1. Ubuntu and Debian” 和《i.MX_Yocto_Project_User’s_Guide.pdf》的章节"3.1 Host packages"
注意:推荐操作均在非root用户下执行。
1.1 主机环境
必备Yocto项目主机包:
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
// 参考文档里面推荐的是 Ubuntu 12.04 or 14.04
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
// 参考文档里面按不同的ubuntu版本安装,我这里是按Ubuntu 14.04版本安装的, 网上有些使用了高版本的ubuntu的教程没有选择安装
// i.MX layers host packages for a Ubuntu 12.04 host setup only are:
// $ sudo apt-get install uboot-mkimage
// i.MX layers host packages for a Ubuntu 14.04 host setup only are:
// $ sudo apt-get install u-boot-tools
1.2 安装git工具
Freescale 提供的 Yocto Project BSP(板级开发包)均使用GIT管理,后面会需要从 Freescale Yocto Project BSP的发布目录中下载BSP用于构建自己的Yocto项目。
// 安装git
sudo apt-get install git
// 设置邮箱名称
git config --global user.name "Your Name"
//比如 git config --global user.name test
//设置邮箱地址
git config --global user.email "Your Email"
// 比如 git config --global user.email [email protected]
git config --list
2. 获取BSP
官方链接:http://commondatastorage.googleapis.com/git-repo-downloads/repo
如果不能访问官方的链接,可以使用以下其他链接:
https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo
http://commondatastorage.googleapis.com/git-repo-downloads/repo
大部分repo都需要使用外网, 在国内不能使用, 需要先开启VPN代理。 以下都是直接使用gitee中国开源库: https://gitee.com/anzhuangguai/fsl-arm-yocto-bsp
2.1. 准备repo
// 在/opt目录下创建yocto项目的目录, 将repo下载到yocto项目的bin目录下
mkdir -p /opt/imx6ull-yocto/bin
// 将yocto目录的权限指给当前用户
chmod u+x -R /opt/imx6ull-yocto
// 或
sudo chown 用户名称: /opt/imx6ull-yocto
//下载repo, 官方给出的链接没有下载成功
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > /opt/imx6ull-yocto/bin/repo
//下载成功
cd /opt/imx6ull-yocto/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
// 给repo可执行权限
chmod u+x /opt/imx6ull-yocto/bin/repo
// 使用时直接使用绝对路径/opt/imx6ull-yocto/bin/repo 或在当前shell窗口中设置环境路径
// 这样当前shell中直接使用repo,系统会优先自动到/opt/imx6ull-yocto/bin搜索repo
// 注意export之后,只在当前shell中生效
export PATH=/opt/imx6ull-yocto/bin:$PATH
2.2. 同步bsp
yocto 发布分支:
http://git.freescale.com/git/cgit.cgi/imx/fsl-arm-yocto-bsp.git/tree/
https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp
https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp
cd /opt/imx6ull-yocto/
//创建fsl-release-bsp来保存bsp
mkdir fsl-release-bsp
cd fsl-release-bsp
// 添加hell搜索路径, 参考上一节
export PATH=/opt/imx6ull-yocto/bin:$PATH
// 这里选择的是版本是L4.1.15-2.0.0
repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp -b imx-4.1-krogoth -m imx-4.1.15-2.0.0.xml
// 如果提示
// repo: error: Python 2 is no longer supported; Please upgrade to Python 3.5+.
// 需要修改repo的python环境
// 先安装python3
apt-get install python3
// 修改repo
sed -i '1s/python/python3/' repo
//下载到本地
repo sync
//等待同步结束, 当前目录下会出现sources目录和fsl-setup-release.sh
3. 编译
3.1. 设置编译环境
语法:
$ DISTRO=<distro name> MACHINE=<machine name> source fsl-setup-release.sh -b <build dir>
DISTRO=<distro name>
fsl-imx-x11
fsl-imx-wayland
fsl-imx-xwayland
fsl-imx-fb
MACHINEMACHINE=<machine name>
imx6qpsabreauto
imx6qpsabresd
imx6ulevk
imx6ull14x14evk
imx6ull9x9evk
imx6dlsabreauto
imx6dlsabresd
imx6qsabreauto
imx6qsabresd
imx6slevk
imx6solosabreauto
imx6solosabresd
imx6sxsabresd
imx6sxsabreauto
imx7dsabresd
参考文档更具自己的开发板和要编译的镜像类型选择, 这里使用的是imx6ull的主控芯片。
DISTRO=fsl-imx-x11 MACHINE=imx6ull14x14evk source ./fsl-setup-release.sh -b build_x11
3.2 编译镜像
语法:bitbake <target>
镜像类型可选以下几种,具体的含义参考文档
core-image-minimal
core-image-base
core-image-sato
fsl-image-machine-test
fsl-image-gui
fsl-image-qt5
这里选择编译core-image-minimal, 所以执行了
bitbake core-image-minimal
第一次运行报错:
NOTE: Your conf/bblayers.conf has been automatically updated.
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.
Parsing recipes: 100% |#############################################################################################################################################################################################################################################################################################################################| Time: 00:03:42
Parsing of 2215 .bb files complete (0 cached, 2215 parsed). 2790 targets, 212 skipped, 5 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.30.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "Ubuntu-18.04"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "imx6ull14x14evk"
DISTRO = "fsl-imx-x11"
DISTRO_VERSION = "4.1.15-2.0.0"
TUNE_FEATURES = "arm armv7ve vfp neon callconvention-hard cortexa7"
TARGET_FPU = "hard"
meta
meta-yocto = "HEAD:f5da2a5913319ad6ac2141438ba1aa17576326ab"
meta-oe
meta-multimedia = "HEAD:247b1267bbe95719cd4877d2d3cfbaf2a2f4865a"
meta-fsl-arm = "HEAD:be78894e4682f111575470fb23e51e6ba523508d"
meta-fsl-arm-extra = "HEAD:3dfb82fc7e703eae9891b3ffda0e9393701f2396"
meta-fsl-demos = "HEAD:a165068f8a0d1cf29aabe4b4053f28be1c2aa492"
meta-bsp
meta-sdk = "HEAD:0451810f7ec7da962bd899f5b0fe26afee1676ca"
meta-browser = "HEAD:77736988073a5d90fcff9d0005c8477332ede387"
meta-gnome
meta-networking
meta-python
meta-filesystems = "HEAD:247b1267bbe95719cd4877d2d3cfbaf2a2f4865a"
meta-qt5 = "HEAD:ccae79be69c5268df3b47e4e14cea0591c39a531"
NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: gnu-config-native-20150728+gitAUTOINC+b576fa87c1-r0 do_unpack: Function failed: Fetcher failure: Fetch command failed with exit code 128, output:
fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
ERROR: Logfile of failure stored in: /opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/work/x86_64-linux/gnu-config-native/20150728+gitAUTOINC+b576fa87c1-r0/temp/log.do_unpack.2487
Log data follows:
| DEBUG: Executing python function do_unpack
| DEBUG: Executing python function base_do_unpack
| DEBUG: Running export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=a2539ae50a08739d60a5ea775fff958b"; export SSH_AGENT_PID="1313"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts/native-intercept:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin/x86_64-linux:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/bin:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/bitbake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"; export HOME="/home/luoshuai"; git -c core.fsyncobjectfiles=0 clone -s -n /opt/imx6ull-yocto/fsl-release-bsp/downloads//git2/git.sv.gnu.org.config.git/ /opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/work/x86_64-linux/gnu-config-native/20150728+gitAUTOINC+b576fa87c1-r0/git/
| DEBUG: Running export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=a2539ae50a08739d60a5ea775fff958b"; export SSH_AGENT_PID="1313"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts/native-intercept:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin/x86_64-linux:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/bin:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/bitbake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"; export HOME="/home/luoshuai"; git -c core.fsyncobjectfiles=0 remote set-url origin git://git.sv.gnu.org/config.git
| DEBUG: Running export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=a2539ae50a08739d60a5ea775fff958b"; export SSH_AGENT_PID="1313"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts/native-intercept:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin/x86_64-linux:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/bin:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/bitbake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"; export HOME="/home/luoshuai"; git -c core.fsyncobjectfiles=0 checkout -B master b576fa87c140b824466ef1638e945e87dc5c0343
| DEBUG: Running export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=a2539ae50a08739d60a5ea775fff958b"; export SSH_AGENT_PID="1313"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts/native-intercept:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin/x86_64-linux:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/usr/bin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/sbin:/opt/imx6ull-yocto/fsl-release-bsp/build_x11/tmp/sysroots/x86_64-linux/bin:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/scripts:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/bitbake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"; export HOME="/home/luoshuai"; git -c core.fsyncobjectfiles=0 branch --set-upstream master origin/master
| DEBUG: Python function base_do_unpack finished
| DEBUG: Python function do_unpack finished
| ERROR: Function failed: Fetcher failure: Fetch command failed with exit code 128, output:
| fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
|
ERROR: Task 310 (virtual:native:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/meta/recipes-devtools/gnu-config/gnu-config_git.bb, do_unpack) failed with exit code '1'
NOTE: Tasks Summary: Attempted 9 tasks of which 0 didn't need to be rerun and 1 failed.
Waiting for 0 running tasks to finish:
Summary: 1 task failed:
virtual:native:/opt/imx6ull-yocto/fsl-release-bsp/sources/poky/meta/recipes-devtools/gnu-config/gnu-config_git.bb, do_unpack
Summary: There was 1 WARNING message shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
网上查到的结果,可参考文章: https://blog.csdn.net/ming_l1/article/details/79362370
修改sources/poky/bitbake/lib/bb/fetch2/git.py
‘’’
runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname,
branchname), d)
‘’’
runfetchcmd("%s branch --set-upstream-to origin/%s" % (ud.basecmd,
branchname), d)
-------------------待续