第一次接触Lichee Pi Zero V3s开发板时,我被它小巧的体积和全志V3s芯片的强大功能所吸引。但当我尝试为其编译主线Linux内核时,却遭遇了各种意想不到的问题。这篇文章将详细记录我从环境配置到成功启动的完整过程,特别聚焦那些容易踩坑的环节。
交叉编译环境的搭建是整个过程的基石。我最初尝试使用Ubuntu 20.04 LTS作为主机系统,但发现某些工具链版本不兼容。经过多次尝试,最终确定以下配置最为稳定:
bash复制sudo apt update
sudo apt install -y gcc-arm-linux-gnueabihf build-essential flex bison libssl-dev bc
验证交叉编译器是否安装成功:
bash复制arm-linux-gnueabihf-gcc --version
提示:确保输出显示gcc版本在4.9.x到7.x之间,过高或过低的版本可能导致编译错误
常见问题排查:
gcc-arm-linux-gnueabihf包,或尝试重新安装Lichee Pi Zero的Linux内核源码有多个分支,选择不当会导致各种硬件支持问题:
| 分支版本 | 特点 | 推荐场景 |
|---|---|---|
| zero-4.10.y | 最基础支持 | 仅需基本功能 |
| zero-4.13.y | 改进网络支持 | 需要以太网功能 |
| zero-5.2.y | 最新功能 | 需要最新驱动 |
我最终选择了5.2.y分支:
bash复制git clone -b zero-5.2.y https://github.com/Lichee-Pi/linux.git
cd linux
关键教训:不要盲目选择最新分支,应先确认自己的硬件版本。我的第一块板子是早期批次,使用5.2.y分支时SPI闪存无法识别,换成4.13.y后问题解决。
编辑顶层Makefile的两处关键设置:
makefile复制ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
常见错误:
标准编译流程:
bash复制make licheepi_zero_defconfig
make menuconfig # 可选:添加蓝牙等额外功能
make -j$(nproc)
实际踩坑:直接使用-j16导致内存不足,我的8GB RAM主机频繁崩溃。改为-j4后编译稳定完成。
模块编译特别注意:
bash复制make INSTALL_MOD_PATH=out modules
make INSTALL_MOD_PATH=out modules_install
注意:
INSTALL_MOD_PATH必须与后续文件系统构建时的路径一致
根据硬件配置选择正确的dtb文件:
sun8i-v3s-licheepi-zero.dtbsun8i-v3s-licheepi-zero-dock.dtbsun8i-v3s-licheepi-zero-with-480x272-lcd.dtb创建boot.scr引导脚本:
text复制setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb
bootz 0x41000000 - 0x41800000
转换为二进制格式:
bash复制mkimage -C none -A arm -T script -d boot.cmd boot.scr
推荐分区方案:
实际教训:我曾尝试将所有内容放在单个FAT32分区,结果内核无法挂载EXT4根文件系统。
观察串口输出的关键信息:
典型问题处理:
root=参数是否正确指向第二分区通过make menuconfig移除不需要的驱动,显著减小内核体积:
关键配置项:
text复制CONFIG_BOOTDELAY=1 # 减少uboot等待时间
CONFIG_PREEMPT=y # 启用抢占式调度
必备调试工具:
kermit或minicom:串口终端tftp:网络传输内核镜像gdbserver:远程调试应用OV2640摄像头配置步骤:
CONFIG_MEDIA_SUPPORT和CONFIG_VIDEO_SUN6I_CSIv4l-utils工具包RTL8723BS WiFi模块集成:
bash复制make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C drivers/staging/rtl8723bs modules
特别注意:该驱动需要特定的固件文件,需放置到/lib/firmware/rtlwifi/目录下
启用V3s音频支持:
CONFIG_SND_SUN4I_CODECcodec节点正确配置aplay -l列出音频设备建议工作流程:
git bisect定位问题提交创建补丁的规范方法:
bash复制git format-patch -1 <commit-hash>
git am <patch-file>
示例编译脚本:
bash复制#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make licheepi_zero_defconfig
make -j4
make INSTALL_MOD_PATH=output modules_install
cp arch/arm/boot/zImage output/
cp arch/arm/boot/dts/sun8i-v3s-licheepi-zero*.dtb output/
经过三周的反复尝试,我的Lichee Pi Zero V3s终于跑起了最新的主线内核。最深刻的体会是:遇到编译错误时,不要急于搜索解决方案,先仔细阅读错误信息,90%的问题都能从中找到线索。另外,保持开发环境的纯净非常重要,我后来专门准备了一台Ubuntu物理机用于嵌入式开发,避免了虚拟机带来的各种奇怪问题。