yocto的读作“幺科托",它的本意是一种非常小的度量单位(10的负24次方),在这里它代表一种LINUX的发行版及其构建系统。
它的使用非常简单,按照如下步骤操作,每个开发者都可以构建一套自己的LINUX发行版镜像。
开发环境:
安装依赖
$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3-subunit mesa-common-dev zstd liblz4-tool file locales
$ sudo locale-gen en_US.UTF-8
下载代码:
两种方式下载代码
方式1:下载POKY仓库
git clone git://git.yoctoproject.org/poky
方式2:下载压缩包
https://www.yoctoproject.org/software-overview/downloads/archived-releases/
配置
$ tar xvf poky-aa63b25cbe25d89ab07ca11ee72c17cab68df8de.tar.bz2
$ cd poky/
$ source oe-init-build-env
编译
$ bitbake core-image-sato
下载的原始压缩包中不包括发行版package源码,构建框架在编译过程中会自动下载源码编译,下载的源码包存储在路径poky/build/downloads下:
编译过程:
编译结束
运行QEMU
执行如下命令启动虚拟机:
$ runqemu qemux86-64
编译其它架构
打开文件build/conf/local.conf,可以看到构建系统支持多个ARCH的QEMU仿真运行:
选择熟悉的MIPS再次执行构建运行
编译工具链
$ bitbake meta-toolchain
编译结果,工具链安装包poky-glibc-x86_64-meta-toolchain-mips32r2-qemumips-toolchain-4.2.3.sh
工具链被安装到/opt/poky/4.2.3/sysroots/x86_64-pokysdk-linux/usr/bin/mips-poky-linux目录下:
使用工具链前最好source一下/opt/poky/4.2.3/environment-setup-mips32r2-poky-linux
编译代码:
mips-poky-linux-gcc -meb -mabi=32 -mhard-float -march=mips32r2 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky/4.2.3/sysroots/mips32r2-poky-linux main.c
编译的是大端程序:
编译PPC QEMU启动镜像
编译PPC工具链
查看目标依赖
yocto支持查看目标依赖,依赖数据以为.dot形式输出,之后在用graphviz工具将生成的task-depends.dot转成图像:
$ bitbake -g meta-toolchain
$ dot -v -Tsvg -o dep.svg task-depends.dot
会生成一张巨复杂的依赖关系图:
编译问题
经过验证,如果遇到如下编译错误,再次执行编译命令即可,无需额外处理。
参考文档
imx8mqevk yocto 编译wifi驱动使用toolchain_bitbakeimx8 toolchain_自学Linux记录的博客-CSDN博客
Yocto Project Quick Build — The Yocto Project ® 4.2.999 documentation
Yocto Project – It's not an embedded Linux distribution – it creates a custom one for you
Yocto Project Quick Build — The Yocto Project ® 4.2.999 documentation