前言
yocto项目是一套用来给多种处理器自定义制作操作系统发行版的开源协作工程。在嵌入式linux领域,它非常具有前景。嵌入式linux由于处理器多样,且更新换代快,个体之间差异大的原因,整套操作系统需要频繁更新。操作系统适配的软件繁多,如果从操作系统内核、操作系统工具、操作系统各种软件都移植一遍,工作量大,耗时耗力,而且操作系统上运行的各种软件更新也快,要维护软件的更新,如果一整套工作都有一个公司或者几个公司来做,工作量巨大。yocto项目的的出发点就是为嵌入式linux操作系统的制作提供一种统一的规范,集合各个公司的优势,不同的公司做自己擅长的事,减少重复劳动,如芯片公司开发芯片相关的bsp部分、软件公司提供软件方面的支持、更新,并通过统一的规范把它们组合起来。这样做的好处是非常明显的,芯片公司可以快速的为它们新的处理器适配一套定制的操作系统,产品公司可以快速自定义选择处理器与各个版本的软件组合出自己需要的整套操作系统。
更详细的关于Yocto项目的简介,请参考上一篇文章 Yocto项目简介
本文介绍如何从0到1组合出一套用于X86 处理器的操作系统。
参考资料链接
官网:
Yocto Project – It's not an embedded Linux distribution – it creates a custom one for you
快速开始文档:
Yocto Project Quick Build — The Yocto Project ® dev documentation
layers搜索页:
OpenEmbedded Layer Index - layers
recipes搜索页:
OpenEmbedded Layer Index - recipes
yocto的一些资源索引页
Source Repositories
比如https://git.yoctoproject.org/meta-dpdk/
yocto类的书籍少,上述链接可以了解到一些书里没有的最新的更新。
环境准备
我用的是ubuntu 20.04,yocto工程占用硬盘较大,unbuntu系统的硬盘要足够大,官网要求至至少50G,我有200G。
需要安装编译系统时的必要工具,官网提供了命令,要安装齐全,否则可能会在编译时报错。
sudo apt-get 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 pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
源码获取
1、创建工程目录
mkdir ~/yocto
2、下载yocto参考工程poky
cd ~/yocto
git clone git://git.yoctoproject.org/poky
cd poky
获取当前git 工程的tag
git fetch --tags
查看当前有哪些tag
git tag
选取zeus tag,切换到对应tag,并建立本地分支zeus-22.0.4
git checkout tags/zeus-22.0.4 -b zeus-22.0.4
git pull
3、下载intel bsp layer
cd ~/yocto
git clone git://git.yoctoproject.org/meta-intel
同上面的步骤一样,
cd meta-intel
git fetch --tags
git tag
选取zeus tag,切换到对应tag,并建立本地分支zeus-22.0.0
git checkout tags/zeus-22.0.0 -b zeus-22.0.0
git pull
4. 配置工程编译环境变量
cd ~/yocto
source poky/oe-init-build-env
配置完变量后,自动创建build目录,并进入
source poky/oe-init-build-env
终端打印如下:
### Shell environment set up for builds、###You can now run 'bitbake
5、添加meta_intel layer到工程
打开build目录下conf/bblayers.conf,添加meta-intel目录到BBLAYERS
BBLAYERS ?= "
/home/oem/yocto/poky/meta
/home/oem/yocto/poky/meta-poky
/home/oem/yocto/poky/meta-yocto-bsp
/home/oem/yocto/meta-intel
"
上面就是yocto添加layer的方法,当你需要添加新的软件到yocto系统时,你首先得从网上找到相关的layer,再添加到你工程的bblayers.conf文件中。
6、指定工程的处理器
打开build目录下conf/local.conf ,修改
MACHINE = "intel-skylake-64",表示此次编译的处理器架构是intel-skylake-64
默认的处理器为qemux86-64,这里我选一个高级一点的处理器做测试。
在meta-intel/conf/machine/目录下有如下几个文件,代表当前meta-intel层支持的MACHINE 种类有intel-core2-32、intel-corei7-64、intel-skylake-64。
include intel-core2-32.conf intel-corei7-64.conf intel-skylake-64.conf
一般服务器使用的都是skylake系列芯片,由于要在服务器上做测试,所以选取intel-skylake-64处理器类型。
系统编译
参考上一节第4步中,source poky/oe-init-build-env 后,控制台打印
### Shell environment set up for builds、###You can now run 'bitbake
编译工程可以使用命令:
bitbake core-image-sato
执行命令后,工程会自动从网络下载工程需要的各种源代码,如kernel、gibc、gcc等等虽有的源码,并根据配置编译。
编译结果放在build目录下的tmp/deploy/images/intel-skylake-64,目录下有内核文件bzImage,有文件系统,有内核module文件,有系统安装镜像文件。
默认编译过程中下载好的源码包放在build目录下的downloads:
测试编译好的系统
tmp/deploy/images/intel-skylake-64/目录下有各种各样格式的文件,其中×.hddimg为u盘安装系统,刻录到u盘后就是个系统安装盘,可以选择安装到硬盘,也可以选择直接启动。
我的目录下,镜像文件为:
core-image-sato-intel-skylake-64-20220123111353.hddimg
刻录到u盘:
sudo dd if=core-image-sato-intel-skylake-64-20220123111353.hddimg of=/dev/sdb status=progress
插入u盘到skylake-64的设备,选择从u盘的uefi启动。
以上就是我们从0到1给服务器做的最初始的系统,如果你需要给你的系统中自定义添加新的软件,或者修改内核配置,那你还需要继续学习。
感兴趣的同学加关注,欢迎一起交流学习