一、 前言
在嵌入式产品开发中,通常都会定制自己公司的 Linux 发行版,所谓发行版,即根据自家产品的功能和特性定制 Bootloader、Kernel、Rootfs,最后得到这三个镜像文件。定制 Linux 发行版是一件耗时耗力、技术含量比较高的一项大工程,对于很多公司来说,是没有这个人力和财力来做这件事的,所以大多数公司会选择现有的开源工具来定制自己家的 Linux 发行版。
Yocto Project 是一个开源的协作软件,提供模板、工具和方法帮我们创建定制的 Linux 系统和嵌入式产品,而无需关心硬件体系。目的是为了使嵌入式 Linux 开发更简单,更易于在不同架构间进行移植。适合嵌入式 Linux 开发人员使用。极大地简化开发过程,因为你不用再从头裁剪一个完整的 Linux 发布版本。Yocto 项目通过 Poky来构建一个系统,并提供了一个开放源码的开发环境。
二、 Yocto 术语
术语 |
描述 |
Yocto Project |
Yocto 项目使用基于 OpenEmbedded(OE) 构建主机,该项目使用 BitBake 工具构建完整的 Linux 镜像。将 BitBake 和 OE 组件组合在一起形成参考构建主机,该主机以前称为 Poky。 |
Poky |
Poky 是 Yocto 项目的参考发行版,也是由构建系统创建的默认 Linux 发行版的名字。Poky 下载包包含 OpenEmbedded 构建系统和用于创建名字为 Poky 的样例嵌入式发行版的额外的元数据。 |
Metadata
|
在 BitBake 术语中,元数据包括所有命令 BitBake 如何执行构建过程的文件。BitBake 元数据包括类、菜谱(和追加文件)以及配置文件 |
Layers |
即各种 meta-xxx 目录,将 Metadata 按层进行分类,有助于项目的维护。 |
BitBake |
作为 OpenEmbedded 构建系统中的构建引擎,BitBake 是任务执行器和调度器。它的输入是元数据(例如配置文件和菜谱) |
Recipe |
菜谱,包含用于 BitBake 构建特定软件包的指令的元数据文件。通过它的指令,菜谱描述从哪里获取源代码、应用什么补丁以及如何应用这些补丁、如何构建二进制和相关文件、如何在目标系统上安装构建的结果、如何创建打包的软件包以及更多。菜谱也描述了在构建中以及运行时对其他软件包的依赖性,因而创建构建过程所需要的菜谱的逻辑层级。菜谱使用 bb 文件后缀。 |
举例说明:假如用烹饪一桌酒席来形容构建发行版,则 Yocto 就是餐厅名,Poky 就是厨房(以及提供作为参考搭配套餐),Metadata 就是烹饪资源(.bb 表示配方,.bbappend就是配方上的贴士,.conf 表示厨房里的管事的小组长),Layers 就是菜谱的分类(如川菜谱、粤菜谱),Bitbake 就是厨师,Output 就是得到的一桌酒席。
三、 搭建编译环境
1. 安装 Yocto 所必须的软件包
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev texinfo
2. 安装 SemiDrive 所需要的软件包
$ sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html
$ sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils
$ sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
$ sudo apt-get install abootimg
3. 安装 gcc-linaro
在提供的 Docker 环境中,目录 /tool 下有 gcc_linaro 工具
添加 PATH 路径,例如:
$ export PATH="$PATH:/tool/gcc_linaro/gcc-arm-none-eabi-7.3.1/bin:/tool/gcc_linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-elf/bin"
$ sudo apt-get install docker-ce
4. 下载预下载包 yocto-downloads.tar.gz
从 SemiDrive 官网下载 yocto-downloads.tar.gz 文件,通过软件 FileZilla Client 拷贝预下载包到 HOST 上 Docker 容器映射的目录。
5. 解压缩至 yocto 目录中
使用 tar 命令解压 yocto-downloads.tar.gz 到 yocto 目录下,解压缩后文件夹名称为Downloads
四、 配置运行环境
1. 安装密匙
STEP1: 解压密钥压缩包,并修改文件属性为 0400.
chmod 0400 ./id_rsa*
STEP2: 启动 ssh agent
eval `ssh-agent`
STEP3: 添加 ssh key
ssh-agent bash
ssh-add id_rsa
2. 设置 git 账号属性
git config --global user.name chelsea
git config --global user.email chelsea.tong@wpi-group.com
git config –list
3. 命令解析
在 yocto 根目录下执行
$ DISTRO=cluster-qt MACHINE=x9h_ref_serdes source sd_setup.sh -b build-x9ref
支持列表:
x9h_ref:使用 LVDS 1&2 输出接口
x9h_ref_cluster:使用 LVDS 3&4 输出接口
x9h_ref_serdes:使用 LVDS 1&2 输出接口,并且使用 serdes 作为显示连接方式
x9h_ref_cluster_serdes:使用LVDS 3&4 输出接口,并且使用 serdes 作为显示连接方式
支持列表:
minimal-console
cluster-qt
两个 DISTRO 最大的区别是,cluster-qt 包含了 opengl 模块以及一些图形测试程序。
-b 命令指定编译生成文件夹名称
如果不指定的话,使用默认的 build 目录。
#执行后会进入 build-x9ref 目录
4. 编译代码
$ bitbake virtual/kernel
$ bitbake lk
$ bitbake safety
$ bitbake core-image-base
$ bitbake baremetal
编译完成后,生成的 Image 保存在以下目录中:
/tmp/deploy/images/
目录中包含 Linux 内核 Image, modules, dtb,bootloader,preloader,spl, system, safety 和 rootfs5. 打包
cd meta-semidrive/scripts
./make_emmc_pac.sh 生成 eMMC 的 pac 包
./make_ospi_pac.sh 生成 ospi 的 pac 包
pac 文件
五、 参考文档
《SD_X9_SDK_User_Manual.pdf》
《嵌入式 Linux 系统开发-基于 Yocto Project》
评论