1. 全志V3s开发板与主线Linux系统简介
全志V3s是一款面向嵌入式设备的低功耗处理器,广泛应用于智能硬件和物联网设备开发。Lichee Pi Zero开发板搭载这款芯片,以其小巧的体积和丰富的接口成为开发者入门嵌入式Linux的热门选择。构建主线Linux系统意味着直接使用Linux官方内核源码,而非厂商提供的定制版本,这样能获得最新的功能支持和长期维护保障。
我第一次接触V3s开发板时,发现官方文档多是基于老版本内核的教程,而主线内核的构建过程需要自己摸索。经过多次尝试后,我总结出这套适合新手的完整流程,从源码获取到系统启动,帮你避开那些我踩过的坑。整个过程需要准备一台x86电脑作为开发主机(推荐Ubuntu系统)、Lichee Pi Zero开发板、microSD卡和读卡器。
2. 搭建交叉编译环境
2.1 安装必备工具链
嵌入式开发需要在x86主机上编译ARM架构的代码,这就是交叉编译。推荐使用Linaro提供的工具链:
sudo apt update sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf验证安装是否成功:
arm-linux-gnueabihf-gcc --version如果看到类似"gcc version 9.3.0"的输出说明环境就绪。我建议使用Ubuntu 20.04 LTS系统,这个版本的工具链与内核编译兼容性最好。遇到过有同学在Arch Linux上编译失败的情况,就是因为工具链版本太新。
2.2 配置环境变量
为了后续编译方便,可以设置全局变量:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf-把这些命令加到~/.bashrc文件里,这样每次打开终端都会自动生效。记得执行source ~/.bashrc让配置立即生效。
3. 获取和配置Linux内核源码
3.1 克隆内核仓库
主线内核可以从官方Git仓库获取:
git clone https://github.com/linux-sunxi/linux.git -b sunxi-next cd linuxsunxi-next分支包含了对全志芯片的最新支持。如果网络不好,也可以从国内镜像源下载:
git clone https://gitee.com/mirrors/linux-sunxi.git -b sunxi-next我实测下载速度能快5倍以上。记得检查分支是否正确:
git branch -a3.2 内核配置与定制
先应用默认配置:
make sunxi_defconfig然后进入图形化配置界面:
make menuconfig这里有几个关键配置项需要注意:
- 在"System Type"中确保选中Allwinner V3s SoC支持
- 在"Device Drivers"里启用需要的硬件驱动(如USB、网络等)
- 文件系统支持建议把ext4编入内核(而不是模块)
新手可以直接保存退出,使用默认配置。我第一次编译时因为去掉太多驱动导致系统无法启动,后来发现保持默认最稳妥。
4. 编译内核与生成镜像
4.1 执行编译命令
使用多线程编译加快速度:
make -j$(nproc)-j后面的数字表示并行任务数,一般设为CPU核心数的1.5倍。我的6核电脑用-j9编译大约需要15分钟。编译过程中如果报错,通常是缺少依赖库,可以这样安装:
sudo apt install libssl-dev flex bison4.2 处理编译产物
编译完成后,关键文件位于:
- 内核镜像:arch/arm/boot/zImage
- 设备树文件:arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb
- 驱动模块:在modules目录下
建议把这些文件集中到一个目录:
mkdir output cp arch/arm/boot/zImage output/ cp arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb output/ make INSTALL_MOD_PATH=output modules_install5. 制作可启动的SD卡
5.1 分区与格式化
插入SD卡后,先用lsblk确认设备名(比如/dev/sdb)。然后使用fdisk分区:
sudo fdisk /dev/sdb依次输入:
- o (创建新DOS分区表)
- n (新建分区)
- p (主分区)
- 1 (分区号)
- 回车 (默认起始扇区)
- +32M (第一分区大小)
- n (再建分区)
- p
- 2
- 回车
- 回车 (使用剩余空间)
- t (修改分区类型)
- 1 (选择第一分区)
- c (设为FAT32)
- w (保存)
格式化分区:
sudo mkfs.vfat /dev/sdb1 sudo mkfs.ext4 /dev/sdb25.2 部署启动文件
挂载并复制文件:
sudo mount /dev/sdb1 /mnt sudo cp output/zImage /mnt/ sudo cp output/sun8i-v3s-licheepi-zero.dtb /mnt/ sudo umount /mnt sudo mount /dev/sdb2 /mnt sudo cp -r output/lib /mnt/ sudo umount /mnt还需要创建boot.scr引导脚本:
echo "setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10" > boot.cmd mkimage -C none -A arm -T script -d boot.cmd boot.scr sudo cp boot.scr /mnt/6. 上电启动与问题排查
6.1 首次启动流程
插入SD卡到开发板,连接串口线到电脑,用minicom或其他串口工具查看输出:
sudo apt install minicom sudo minicom -D /dev/ttyUSB0 -b 115200正常启动会看到uboot加载内核,最后出现内核日志。如果没有输出:
- 检查串口线连接是否正确
- 确认开发板供电充足
- 验证SD卡是否制作正确
6.2 常见问题解决
内核崩溃:通常是设备树不匹配或文件系统问题。尝试:
- 重新编译设备树
- 检查文件系统是否完整
无法挂载根文件系统:确认bootargs中的root参数是否正确指向第二分区
驱动缺失:回menuconfig检查相关驱动是否启用,重新编译
我第一次成功启动时,因为忘记配置USB驱动,导致键盘无法使用。后来在menuconfig中启用所有USB HID设备驱动后问题解决。