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.name和user.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 init和repo 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
你会看到很多子目录,比如kernel、platform、applications等等。每个目录都是一个独立的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的源码结构,搞清楚每个目录是干什么的。到时候你就知道,为什么我们要下载这么多仓库了。