2、开发环境搭建:Ubuntu虚拟机配置、交叉编译工具链安装、Git与Repo工具使用、源码下载

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,Tizen移植这件事,环境没配好,后面全是坑。我自己刚开始搞的时候,光装工具链就折腾了两天,后来发现是Ubuntu版本选错了……嗯,咱们今天一次搞定。

2.1 Ubuntu虚拟机配置

我个人习惯用虚拟机来搞Tizen开发。为什么?因为交叉编译环境跟宿主系统耦合太深,万一搞崩了,虚拟机删了重来就行,不心疼。

2.1.1 虚拟机软件选择

我推荐用VMware Workstation Pro或者VirtualBox。两者我都用过,说点实际感受:

特性 VMware Workstation VirtualBox
性能 更好,尤其是磁盘I/O 一般,但够用
快照功能 支持,非常稳定 支持,偶尔会出问题
USB直通 完美支持 需要装扩展包
价格 收费(有试用) 免费

如果你只是学习,VirtualBox完全够用。但如果你要频繁烧录板子、调试USB设备,我建议用VMware,USB直通更稳定。

2.1.2 Ubuntu版本选择

这里我要特别强调一下:不要用最新的Ubuntu版本。Tizen的源码和工具链对系统版本有依赖,我用的是Ubuntu 20.04 LTS(64位)。

注意:我曾经试过Ubuntu 22.04,结果编译Tizen 5.5的kernel时,gcc版本冲突,折腾了一周才搞定。所以老老实实用20.04,省心。

2.1.3 虚拟机硬件配置建议

Tizen源码编译很吃资源。我建议你这样分配:

  • CPU:至少4核,推荐8核
  • 内存:至少8GB,推荐16GB
  • 磁盘:至少100GB,推荐200GB(源码+编译产物很占空间)
  • 网络:桥接模式(方便后续烧录和调试)

小技巧:磁盘分配时选"动态分配",别用固定大小。这样一开始只占实际使用的空间,后面需要了会自动扩展。

2.2 交叉编译工具链安装

交叉编译,说白了就是在你的x86电脑上编译出能在ARM板子上跑的程序。Tizen官方提供了完整的工具链,咱们直接装。

2.2.1 安装基础依赖包

先更新系统,然后装一堆必要的包。别嫌多,少了哪个后面都会报错。

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential git curl wget \
  libncurses5-dev libssl-dev flex bison \
  python3 python3-pip python3-venv \
  device-tree-compiler u-boot-tools \
  cpio rsync bc lzop

嗯,这里要注意,libncurses5-dev在Ubuntu 20.04上直接装就行。如果你用其他版本,可能名字会变。

2.2.2 安装ARM交叉编译工具链

Tizen主要面向ARM架构。我建议装两个版本:

  • arm-linux-gnueabihf:用于32位ARM(比如老一点的i.MX6)
  • aarch64-linux-gnu:用于64位ARM(比如树莓派3B+、RK3399)
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

装完之后验证一下:

arm-linux-gnueabihf-gcc --version
aarch64-linux-gnu-gcc --version

能看到版本号就对了。

重要:我在项目中遇到过一个问题——用系统自带的工具链编译出来的内核,在板子上跑起来后,某些驱动模块加载失败。后来发现是工具链版本太老。建议你装完后再手动下载Linaro的最新工具链,放到/opt/toolchains/目录下备用。

2.2.3 安装Tizen专用工具链(可选)

如果你要编译Tizen的完整系统(不仅仅是kernel),建议装Tizen官方的GBS工具链。这个后面会细讲,这里先提一下:

sudo apt install -y gbs

2.3 Git与Repo工具使用

Tizen的源码管理方式比较特殊——它用Repo工具来管理多个Git仓库。你想想看,Tizen系统包含几百个Git仓库,一个个手动clone?那得疯掉。

2.3.1 安装Git

这个简单:

sudo apt install -y git
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

我个人习惯把user.nameuser.email配好,不然后面提交代码时会报错。

2.3.2 安装Repo工具

Repo是Google开发的一个工具,专门用来管理多Git仓库。Tizen项目也用了它。

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

然后把~/bin加到PATH里:

echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

验证一下:

repo --version

提示:如果你在墙内,下载repo可能会很慢。我曾经遇到过这个问题,后来用了国内镜像:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo。速度会快很多。

2.3.3 Repo基本用法

Repo的核心命令就几个,我列一下常用的:

命令 说明
repo init 初始化Repo,指定manifest仓库
repo sync 同步所有仓库的代码
repo status 查看所有仓库的状态
repo start 创建新分支进行开发
repo upload 提交代码审核

说白了,你只要记住repo initrepo sync就够了。后面开发时再用其他的。

2.4 源码下载

好,终于到了最激动人心的环节——下载Tizen源码。这里我以Tizen 5.5为例,因为这是目前最稳定的版本。

2.4.1 创建源码目录

mkdir -p ~/tizen55
cd ~/tizen55

2.4.2 初始化Repo

repo init -u https://git.tizen.org/scm/meta/build-system -b tizen_5.5

这个命令会下载一个manifest文件,里面记录了所有需要下载的Git仓库列表。

注意:如果你在公司网络环境下,可能会遇到SSL证书问题。可以加--no-repo-verify参数跳过验证,但我不建议在生产环境这么做。

2.4.3 同步源码

repo sync -j4

-j4表示用4个线程并行下载。如果你的网络带宽够大,可以改成-j8甚至-j16

这个过程会比较长,取决于你的网速。我第一次下载时用了将近3个小时。你可以去喝杯咖啡,或者看看文档。

经验之谈:我曾经在下载过程中断网了,结果repo sync到一半卡住。别慌,重新执行repo sync就行,它会断点续传。Repo在这方面做得不错。

2.4.4 验证下载结果

下载完成后,看看目录结构:

ls -la ~/tizen55

你会看到很多子目录,比如kernelplatformapplications等等。每个目录都是一个独立的Git仓库。

再检查一下仓库数量:

repo list | wc -l

正常情况下应该有300-400个仓库。如果少了很多,说明同步没完成,再跑一次repo sync

2.5 环境验证

最后,咱们验证一下整个环境是否可用。写一个简单的C程序,用交叉编译器编译:

echo '#include <stdio.h>
int main() {
    printf("Hello, Tizen!\n");
    return 0;
}' > hello.c

arm-linux-gnueabihf-gcc -o hello hello.c
file hello

如果输出显示ELF 32-bit LSB executable, ARM,说明交叉编译环境没问题。

小提示:你可以把这个hello文件拷贝到开发板上运行试试。如果能在板子上打印出"Hello, Tizen!",那恭喜你,环境搭建成功了!

好了,这一章的内容就到这里。环境搭好了,后面咱们就可以真正开始移植工作了。下一章我会带你分析Tizen的源码结构,搞清楚每个目录是干什么的。到时候你就知道,为什么我们要下载这么多仓库了。