第3章:Linux宿主机准备——在Ubuntu/Debian上安装基础依赖包

好,咱们继续往下走。上一章我们把虚拟机或者双系统搞定了,现在你面前应该是一个干干净净的Linux桌面。嗯,接下来要做的,就是往这个系统里塞进Zephyr开发所需的基础工具。

说白了,这一步就像盖房子前先打地基。你想想看,没有Python、没有Git,后面那些自动化脚本、版本管理根本跑不起来。我个人习惯是先把这些基础依赖装好,再去做其他配置,这样心里踏实。

3.1 为什么需要这些基础包?

Zephyr的构建系统依赖Python3,这是它的核心脚本语言。pip用来安装Python的第三方库,比如west、pyelftools这些。git用来拉取Zephyr源码和你的项目代码。wget和curl则是下载工具,有时候需要从网上拉一些固件或者工具链。

我在项目中遇到过好几次这样的情况:新同事拿到一台刚装好的Ubuntu,直接就开始搞Zephyr,结果编译时报错说找不到Python模块。一查,pip没装,west装不上。所以啊,这一步别跳过。

3.2 更新软件包索引

在开始安装之前,先让系统知道最新的软件包列表。打开终端,执行:

sudo apt update

这个命令会从Ubuntu的软件源刷新索引。我建议你每次装新东西前都跑一遍,尤其是刚装完系统的时候。为什么?因为系统自带的源列表可能已经过时了,直接装可能会装到旧版本。

小提示: 如果你在墙内,apt update可能会很慢。可以考虑换国内镜像源,比如清华、中科大的。这个后面我会专门讲。

3.3 安装Python3和pip

Ubuntu 20.04及以上版本默认带了Python3,但pip不一定有。我们来确认一下:

python3 --version
pip3 --version

如果pip3没找到,就手动装:

sudo apt install python3 python3-pip -y

装完之后,我习惯把pip升级到最新版:

pip3 install --upgrade pip

这里有个坑:有些系统里pip和pip3是分开的。Zephyr官方推荐用pip3,因为Python2已经退役了。你如果用了pip,可能会装到Python2的库里,后面会出问题。我曾经因为这个折腾了一下午,后来发现是pip指向了Python2。

3.4 安装Git

Git是版本控制的标配。Zephyr的源码托管在GitHub上,没有Git寸步难行。

sudo apt install git -y

装完后配置一下你的身份信息,不然提交代码时会报错:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

我个人习惯把默认分支名改成main:

git config --global init.defaultBranch main

这个不是必须的,但能避免以后每次创建仓库都要手动改分支名。

3.5 安装wget和curl

这两个工具用来下载文件。wget更擅长下载单个文件,curl则支持更多协议,比如FTP、SFTP。Zephyr的工具链安装脚本有时会用到它们。

sudo apt install wget curl -y

装完后可以测试一下:

wget --version
curl --version

看到版本号就说明成功了。

3.6 其他常用工具

除了上面这些,我还建议你装几个顺手的小工具:

  • build-essential:编译C/C++代码的基础包,包含gcc、make等
  • cmake:Zephyr的构建系统依赖CMake
  • ninja-build:比make更快的构建工具,Zephyr默认用它
  • gperf:用于生成哈希表,Zephyr的配置系统会用到
  • device-tree-compiler:处理设备树文件(.dts)的工具

一条命令全装好:

sudo apt install build-essential cmake ninja-build gperf device-tree-compiler -y
重点: 这些工具不是可选的。Zephyr的构建流程会依次调用CMake、Ninja、gperf等。缺一个就会报错,而且错误信息往往不直观。我第一次装的时候漏了gperf,编译时卡在了一个莫名其妙的错误上,查了半天才发现。

3.7 验证安装结果

装完之后,我们来做个快速检查。把下面这些命令挨个跑一遍,确保每个工具都能正常调用:

python3 --version
pip3 --version
git --version
wget --version
curl --version
cmake --version
ninja --version
gperf --version
dtc --version

如果每个都输出了版本号,恭喜你,基础环境已经准备好了。

注意: 如果某个命令提示“未找到”,别慌。检查一下是不是拼写错了,或者用apt search搜一下包名。比如dtc的包名是device-tree-compiler,不是dtc。

3.8 我的一点经验

嗯,到这里基础依赖就装完了。整个过程其实很简单,但容易出问题的地方往往在细节上。比如Python版本,Zephyr 3.0以后要求Python 3.6以上,Ubuntu 18.04默认是3.6,勉强能用。但如果你用的是Ubuntu 16.04,那就得自己升级Python了。

另外,我建议你装完这些后,重启一下终端,或者重新登录一次。有些环境变量需要刷新才能生效。别问我怎么知道的——有一次我装完cmake,没重启终端,结果cmake --version还是旧版本,折腾了半天才发现是缓存问题。

下一章,我们会安装Zephyr的构建工具west,以及配置Python虚拟环境。到时候这些基础工具就会派上用场了。