通常来说嵌入式Linux应用程序、嵌入式Linux驱动程序等的开发都是在Linux主机上进行的,同样的,采用Yocto构建嵌入式Linux系统发行版,也需要在Linux主机上搭建Yocto运行环境。因此,对于Linux主机在硬件配置、系统版本、软件包上有相应的要求。详细信息可以参见:https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#detailed-supported-distros。例如:该教程中采用的Ubuntu系统,其具体配置要求如下:
- Ubuntu 20.04 (LTS)
- 120G以上的硬盘空间(教程中实际采用200G,如果需要编译机器学习相关的组件,至少使用250GB以上)
- 内存越大越好
- CPU核心数越多越好
可以直接安装在PC上安装Ubuntu系统;也可以选择在Windows下,通过虚拟机安装Ubuntu系统。为了方便,该教程采用Windows下,通过虚拟机安装Ubuntu的方式。实际上,对于硬件配置高的PC,在Windows下通过虚拟机安装Ubuntu的方式和直接在PC上安装Ubuntu系统,使用过程中没有任何体验上的差别。但对于硬件配置一般的PC,建议直接安装Ubuntu系统,直接在Ubuntu系统下干活,否则,采用虚拟机的方式,卡顿感十分强烈。
CPU核心数设置
Yocto在构建嵌入式Linux系统时,是通过一个个的Task来运行各种构建过程的,通常来说,一个CPU核心一个时刻运行一个任务,因此,Yocto构建嵌入式Linux系统的快慢,与CPU核心数是有关系的,CPU核心数越多,Yocto同时运行的Task越多,构建的速度就越快,所耗费的时间也就越少。对于直接在PC上安装Ubuntu系统的情况,无需做任何配置,Ubuntu系统直接获取硬件CPU核心数。但是,对于采用虚拟机运行Ubuntu系统的方式,需要在虚拟机上设置CPU核心数。对于采用VMWare虚拟机,在"虚拟机设置"中设置,设置方法如下:Player > 管理 > 虚拟机设置,打开虚拟机设置页面,在"硬件 > 处理器"中设置,如下图所示:
设置完成后,可在Ubuntu中打开终端,用如下命令查看CPU核心数:
lscpu
查询结果如下所示:
安装必备的软件包
Yocto在构建嵌入式Linux系统过程中,需要使用到一些软件包,这些软件包需要安装在Linux主机下。Yocto官方参考文档中列出了不同系统的Linux主机环境下需要安装的软件包,参见https://www.yoctoproject.org/docs/3.1/ref-manual/ref-manual.html#required-packages-for-the-build-host。对于Ubuntu,需要安装的软件包及安装方式如下:
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
备注:安装软件包前,建议切换Ubuntu镜像源至国内源,并更新下系统。这样下载安装包会快很多。
SSH服务开启
在嵌入式Linux系统构建过程中,需要在终端中输入控制命令以及需要修改相关的源码,同样的,为了方便操作,并且能使用大多数熟悉Windows系统下的工具,可以在Ubuntu中安装SSH服务器,方便在 Windows 系统下使用 SSH客户端软件与 Linux 主机系统进行文件共享和远程登录。 例如,在Windows下通过SecureCRT终端软件登录到Ubuntu进行操作。Ubuntu中使用如下命令开启SSH服务:
sudo apt-get install openssh-server
通过上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。安装完成后,就可以在Windows下,打开SecureCRT软件,通过SSH登录Ubuntu。如下图所示:
在SecureCRT软件中新建连接,选择SSH登录方式,在Connection选项中,填入Ubuntu的主机名称,选择SSH2协议。
SSH2选项中,在Hostname中填入Ubuntu的IP地址,端口号选择22,Friewall选择None,用户名按照实际的Ubuntu登入用户名填写即可。SecureCRT设置完成后,在VMWare软件中启动Ubuntu,在Windows下打开SecureCRT连接登录Ubuntu。
repo设置
要想使用Yocto构建嵌入式Linux系统发行版,需要先将Yocto相关的工具及源码下载至Ubuntu中,而Yocto工具及源码的获取,是通过repo这个工具软件获取的。在下载Yocto相关资源之前,我们需要先了解下repo这个工具软件。
Repo是一个构建在Git之上的工具,能够更便捷的管理工程项目中的代码存储仓库。简单来说,Git管理单独的模块,而repo管理所有的Git库,将多个Git库组合在一起,形成一个完整的大版本。考虑如下应用场景进一步认识Repo:
对于一个很庞大的项目,例如:Android。Android源码目录结构复杂,分为很多很多的功能模块,如果将Android源码Init成一个Git库,那么对于某一模块的开发人员Clone代码时,需要将所有的Android源码全部Clone下来,但实际上他只需要关注自己所负责的模块源码,其他模块的源码该开发人员并不关心,也不需要进行维护,不利于模块化设计。因此,对于庞大的项目,将其Init为一个Git库是不合理的,也不符合解耦的需求。 因此,对于庞大的项目,可以将其分为多个模块,每个模块单独用Git进行管理。但是,存在一个问题,需要一个工具对项目最终代码的进行管理,即,对该项目想各个模块的Git进行管理。repo就是实现这样一个功能。当完成repo init后,会在目录下发现一个.repo隐藏目录,进到.repo/manifest/中,打开default.xml,里面记录着一个版本中需要哪些库的文件。实际上,在manifest中记录了需要用到哪些git库,对于一个发型版本(Android版本)对应着repo中的一个分支,其中的default.xml就记录着这个版本所需要的库,repo工具再根据这个文件去把取各个库的对应分支并最终组合起来。
-----《来自网络博客》
在Yocto中,可按照如下步骤设置repo:
- 创建工程项目文件夹,用于存放Yocto源码、软件包、工作环境等。
- 获取repo。Yocto是通过repo进行版本管理的。
- 通过repo获取Yocto项目。
(1)创建工程项目文件夹:
/home/jason/Linux/Yocto/fsl-release-yocto
(2)获取repo:
切换至工程项目文件夹,如:/home/jason/Linux/Yocto/fsl-release-yocto,在该文件夹下使用如下命令:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
chmod a+x repo
由于网络原因,通过curl下载repo工具往往比较慢。可以通过清华的源进行下载,在/home/jason/Linux/Yocto/fsl-release-yocto路劲下,使用如下命令:
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod a+x repo
PS:对于教程中使用到的软件工具源码repo,笔者已经将其在网盘中进行分享:
链接:百度网盘 请输入提取码 提取码:vkyr