1. 开篇:为什么选择全志V3S和LicheePi Zero?
如果你刚接触嵌入式Linux,面对树莓派、香橙派、全志等各种开发板,是不是有点眼花缭乱?我当年也是这么过来的。折腾过好几款板子后,我发现对于想真正理解嵌入式系统如何从零构建的开发者来说,全志V3S搭配LicheePi Zero开发板,是一个近乎完美的起点。
这块板子麻雀虽小,五脏俱全。V3S是一颗单核Cortex-A7的芯片,主频1.2GHz,内置了64MB DDR2内存,这意味着你不需要额外购买内存芯片,核心板尺寸可以做得非常小。LicheePi Zero就是基于它设计的,板载了TF卡槽、USB OTG、一个串口调试口,以及一个可爱的邮票孔核心板形态。最关键的是,它的资料开源、社区活跃,从U-Boot、Linux内核到Buildroot,都有相对成熟的开源代码支持。这让我们“从零构建”成为可能,而不是仅仅停留在刷写别人编译好的现成镜像上。
所谓“从零构建”,不是说让你从硅片设计开始,而是指我们从一个纯净的Ubuntu系统开始,亲手配置交叉编译工具链,然后依次编译出引导程序(U-Boot)、Linux内核,再制作一个根文件系统,最后把它们正确地烧录到一张TF卡里,让板子成功启动。这个过程就像搭积木,你会清楚地知道每一块“积木”的作用,以及它们是如何拼接在一起的。当你第一次在串口终端里看到自己编译的系统启动日志,那种成就感是无与伦比的。
本教程就是为你还原这个完整的搭建过程。你需要准备的东西很简单:一块LicheePi Zero(或其他V3S开发板)、一张至少4GB的TF卡、一台运行Ubuntu的电脑(物理机或虚拟机均可,我实测Ubuntu 20.04 LTS很稳定),以及一根USB转串口调试线。好了,我们这就开始这场硬核又有趣的实战之旅。
2. 搭建你的编译环境与工具链
工欲善其事,必先利其器。在开始编译任何代码之前,一个稳定、高效的编译环境是成功的第一步。很多新手卡在第一步,往往是因为环境没配好。
2.1 准备Ubuntu系统与基础软件
我强烈建议使用Ubuntu 20.04 LTS作为你的编译主机,它在软件包兼容性和稳定性上做得很好。如果你用Windows,可以安装WSL2(Windows Subsystem for Linux),并选择Ubuntu 20.04发行版,效果几乎一样。首先,我们更新软件源并安装一些最基础的开发工具。
打开终端,执行以下命令:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install vim git wget make gcc g++ flex bison libssl-dev bc kmod cpio python unzip rsync -y
这里安装的vim是为了方便后续编辑配置文件,git用于下载源码,make、gcc等是编译核心工具,libssl-dev和bc等是编译内核时可能需要的依赖。一口气装完,避免后面频繁中断。
2.2 配置ARM交叉编译工具链
我们的电脑(通常是x86_64架构)无法直接编译出能在ARM芯片(V3S是armv7架构)上运行的代码。这就需要交叉编译工具链。你可以把它理解为一套专门在A机器上为B机器生成程序的编译器。
全志官方和社区推荐使用Linaro提供的GCC工具链。我们选择一个比较经典的版本:gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf。这个版本对V3S支持良好,且比较稳定。
我们把它下载到/opt目录下,这是存放可选软件包的常规位置:
cd /opt
sudo wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
如果遇到证书错误,可以把https换成http再试。下载完成后,解压:
sudo tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
解压后,/opt目录下会多出一个同名的文件夹。接下来,我们需要让系统在任何位置都能找到这个工具链。修改用户的环境变量配置文件(假设你用bash):
vim ~/.bashrc
在文件的最后,添加这一行:
export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH
保存退出后,执行source ~/.bashrc让配置立即生效。现在,打开一个新的终端窗口,验证工具链是否安装成功:
arm-linux-gnueabihf-gcc -v
如果看到输出以“gcc version 6.3.1 20170404”结尾,恭喜你,工具链配置成功了!这一步非常关键,后续所有编译命令里的CROSS_COMPILE=arm-linux-gnueabihf-都依赖于这个路径的正确设置。
3. 编译与配置U-Boot引导程序
U-Boot可以理解为嵌入式系统的“BIOS”。它的任务是初始化最基础的硬件(如DDR内存、时钟、存储设备),然后从存储设备(如TF卡)上加载Linux内核并跳转执行。为V3S编译U-Boot,有几个关键点需要注意。
3.1 获取源码与基础配置
LicheePi社区维护了一个适配V3S SPI Flash的U-Boot分支,我们直接克隆它:
git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental
cd u-boot
进入u-boot目录后,我们先进行最基础的配置。LicheePi Zero有几个不同的显示屏配置,你需要根据自己手头的屏幕来选择。如果你的板子接了800x480分辨率的LCD屏,使用:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
如果是480x272的屏,则用LicheePi_Zero_480x272LCD_defconfig。如果没有屏幕,只用串口,就选LicheePi_Zero_defconfig。这个命令会根据预置的配置文件(在configs/目录下)生成当前构建所需的.con


671

被折叠的 条评论
为什么被折叠?



