1. Tina Linux 开发环境搭建
做嵌入式Linux开发,第一步就是搭环境。这事儿看着简单,但坑不少。我见过太多新手卡在环境搭建上,一卡就是好几天。今天咱们就把这事儿捋清楚。
1.1 虚拟机安装与Ubuntu配置
我个人习惯用VMware Workstation。当然VirtualBox也行,但VMware对USB设备、网络桥接的支持更稳定。我在项目中遇到过好几次VirtualBox下USB烧录器识别不了的情况,换了VMware就解决了。
Ubuntu版本我推荐18.04或20.04 LTS。为什么?Tina SDK官方测试环境就是这两个版本。你用22.04也能跑,但有些依赖包版本不对,得手动折腾。
安装完Ubuntu后,有几件事必须做:
- 换源 — 把apt源换成国内镜像,不然下载慢到你怀疑人生
- 安装基础工具 — build-essential、git、repo、python、libncurses5-dev这些一个都不能少
- 配置SSH — 方便从宿主机连虚拟机操作
核心依赖包安装命令:
sudo apt-get update
sudo apt-get install -y build-essential git repo python3 python3-pip
sudo apt-get install -y libncurses5-dev libssl-dev u-boot-tools
sudo apt-get install -y device-tree-compiler swig
1.2 Tina SDK下载
Tina SDK的获取方式有两种:
| 方式 | 适用场景 | 说明 |
|---|---|---|
| 全志官方Git仓库 | 有授权的合作伙伴 | 通过repo拉取完整源码树 |
| 开发板厂商提供 | 个人开发者、学生 | 通常是打包好的SDK压缩包 |
我用的是官方Git仓库方式。repo init的时候要指定manifest分支,不同芯片平台对应不同分支。比如V系列用v1.x,R系列用r1.x。这个别搞错了,否则编译会报一堆莫名其妙的错误。
下载命令示例:
mkdir tina-sdk
cd tina-sdk
repo init -u https://sdk.allwinnertech.com/gerrit/manifest.git -b master -m tina-v3.0.xml
repo sync -j4
repo sync的时间取决于网速,一般30分钟到2小时不等。你可以趁这个时间泡杯咖啡,或者看看芯片手册。
1.3 首次编译
SDK下载完成后,先别急着编译。先看看目录结构:
tina-sdk/
├── build/ # 编译脚本
├── device/ # 板级配置
├── kernel/ # Linux内核源码
├── package/ # 应用包
├── target/ # 目标系统配置
├── toolchain/ # 交叉编译工具链
└── uboot/ # U-Boot源码
编译前要做的第一件事:source环境变量。这个步骤很多人会忘,然后直接make,结果报错说找不到命令。
标准编译流程:
source build/envsetup.sh
lunch # 选择目标平台
make -j8 # 开始编译
lunch之后会列出所有支持的板级配置。你选对应的数字就行。比如我手头是R329开发板,就选对应的那个。
第一次编译时间比较长,我的机器(i7-8700K,16GB内存)大概需要40分钟。如果编译过程中断,重新执行make就行,它会接着上次的进度继续。
1.4 首次烧录体验
编译完成后,生成的镜像文件在 out/<板型>/ 目录下。主要有这几个:
- boot.img — 内核+设备树+ramdisk
- rootfs.img — 根文件系统
- system.img — 系统分区镜像
- tina_<板型>_<版本>.img — 完整烧录包
烧录工具我推荐PhoenixCard或者PhoenixSuit。全志的芯片基本都用这两个工具。PhoenixCard用于制作SD卡启动盘,PhoenixSuit用于USB烧录。
烧录步骤:
- 把开发板通过USB连接到电脑
- 按住烧录键(一般是FEL键或BOOT键)再上电
- 电脑识别到设备后,打开烧录工具选择镜像
- 点击开始烧录,等待进度条走完
烧录成功后,接上串口(一般是115200波特率,8N1),上电就能看到启动日志了。看到内核启动的打印信息,说明环境搭建成功了。
1.5 知识体系总览
下面这张图把整个环境搭建的流程串起来了。你跟着这个流程走,基本不会出大问题。
嗯,到这里环境搭建就完成了。你可能会问:为什么这么强调环境?因为后面所有驱动开发、外设适配的工作,都依赖这个基础环境。环境没搭好,后面寸步难行。
我建议你把编译好的镜像文件备份一份。万一后面改坏了,还能快速恢复。我自己就吃过这个亏,改内核配置改到系统起不来,又得重新编译,白白浪费一个小时。