嵌入式Linux开发,要用到Yocto。
Yocto是一个开源项目集合,帮助开发者创建定制的基于Linux的系统,支持各种硬件架构。
在Yocto中,如何确定使用的Linux Kernel的版本?
可以使用bitbake命令,使用-e参数,查询构建kernel这个recipe(对应一个bb文件)时的环境变量中的信息,PV(Package Version)表示版本,PN(Package Name)表示名字。
$ bitbake -e virtual/kernel | grep "^PV"
PV="4.1.15"
$ bitbake -e virtual/kernel | grep "^PN"
PN="linux-name"
因为这里我们没有使用bb文件名来做为targe名,而是使用了virtual/kernel,这个相当于kernel bb文件的别名。这样快速定位到kernel的recipe,而不用寻找kernel的bb文件名。
同样的,还有virtual/bootloader也是一样。
PN变量的值就是Recipe bb 文件的名字中截取的,比如u-boot_2011.03.bb文件的话,PN=u-boot。
在下划线后面的版本信息会截断,并赋值给变量PV。
这个是由bitbake解析bb文件时自动给PN和PV变量赋值的。
所以我们查找的Linux kernel版本信息,就是在kernel的bb文件名里已经体现了。
举例来说:
- linux_4.1.15.bb文件
PV="4.1.15"
PN="linux"
- u-boot_2017.03.bb文件
PV="v2017.03"
PN="u-boot"
那Yocto的版本呢?
第一种方法:
$ cat $POKY-DIR/meta-poky/conf/distro/poky.conf
得到下面信息:
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
DISTRO_VERSION = "3.2.1"
DISTRO_CODENAME = "gatesgarth"
......
这里$POKY-DIR要展开或替换为相应的路径。
第二种方法:
$ cat $POKY-DIR/documentation/poky.yaml
也可以得到版本信息:
DISTRO : "3.2.1"
......
所以,知道了我们正在使用的Yocto版本和kernel版本,保证项目和这些版本能更好的稳定的匹配。
在Ubuntu上安装Yocto前需要什么准备工作?
因为Yocto是很多工具的组合,所以有很多依赖的包需要安装。
Google搜索“intall yocto”,第一个链接是:
Yocto Project Quick Start
https://www.yoctoproject.org/docs/1.8/yocto-project-qs/yocto-project-qs.html
里面找到Ubuntu下安装Yocto需要依赖的包:
Ubuntu and Debian
The essential and graphical support packages you need for a supported Ubuntu or Debian distribution are shown in the following command:
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm
但这个是1.8版本的,将链接里1.8改成2.4,内容如下:
Ubuntu and Debian
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping libsdl1.2-dev xterm
看到2.4版本多了一些包,并注意到在shell命令行里也是可以使用“\”来进行换行的。
而2.5版本及以上,Yocto文档结构变了,集成在一个网页中,并由菜单选择版本。
Welcome to the Yocto Project Documentation — The Yocto Project ® dev documentation
3.2.4版本的依赖包:
* Essentials: Packages needed to build an image on a headless system:
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib 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
在我的环境里,还需要安装:git-email lzop graphviz cmake openjdk-8-jdk
当运行bitbake进行构建时,如果有提示缺少的包,也要安装,因为和你使用的Ubuntu版本和设置都有关系。
当前dev(3.5)为最新版本,在reference manual -> 1.2 Required Packages for the Build Host里,标明的依赖的包为:
1 System Requirements — The Yocto Project ® dev documentation
* Essentials: Packages needed to build an image on a headless system:
$ 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 pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
我们看到3.5版本又多了一些依赖库。
所以在Git clone Yocto并进行构建前,要先安装这些package。