手把手教你用主线Uboot+主线Linux给荔枝派Zero(全志V3s)构建最‘潮’开发环境
手把手教你用主线Uboot主线Linux给荔枝派Zero全志V3s构建最‘潮’开发环境荔枝派Zero作为全志V3s平台的代表开发板凭借其小巧体积和丰富接口在创客圈持续走红。但官方SDK的陈旧内核3.4版本和fex配置方式让追求现代开发体验的开发者望而却步。本文将带你用主线Uboot和Linux 5.x内核打造一个支持设备树、驱动完善的新潮开发环境。1. 环境准备工具链与源码获取全志V3s的Cortex-A7架构需要ARM交叉编译工具链支持。推荐使用Linaro GCC的最新版本wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz export PATH$PATH:$(pwd)/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin获取主线代码时需要注意分支选择Uboot主线git clone -b v2023.04 https://github.com/Lichee-Pi/u-boot.gitLinux主线git clone -b sunxi-5.15 https://github.com/Lichee-Pi/linux提示国内用户可从Gitee镜像仓库克隆速度更快git clone https://gitee.com/licheepi/linux.git2. Uboot编译与定制化配置全志V3s的启动流程需要特别注意SPLSecondary Program Loader的生成。配置时使用make licheepi_zero_defconfig加载默认配置后还需手动调整cd u-boot make licheepi_zero_defconfig make menuconfig关键配置项ARM architecture→ Enable ARMv7 virtualization supportBoot options→ Boot logo → 480x272 24bpp匹配常见LCD分辨率Device Tree Control→ Provider of DTB for Booting → Embedded DTB编译命令需要指定架构和工具链前缀make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j$(nproc)生成的关键文件u-boot-sunxi-with-spl.bin带SPL的完整镜像arch/arm/dts/sun8i-v3s-licheepi-zero-dock.dtb设备树二进制3. Linux内核编译与设备树魔改Linux主线对V3s的支持已相当完善但针对荔枝派Zero的特殊硬件需要调整设备树。首先加载默认配置cd linux make ARCHarm licheepi_zero_defconfig重点配置区域Device Drivers → Graphics support启用FB_SUNXI和DRM_SUN4IDevice Drivers → Multimedia support配置MIPI CSI摄像头驱动System Type→ Select ARM system type → Allwinner V3 SoCs设备树文件arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts需要根据实际外设修改。例如启用RGB LCD接口lcd0 { status okay; port { lcd0_out: endpoint { remote-endpoint panel_input; }; }; };编译内核和模块make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j$(nproc) make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- modules -j$(nproc)4. 系统镜像制作与烧录使用dd工具创建TF卡镜像时需要精确分区布局sudo fdisk /dev/sdX # 假设TF卡设备为sdX # 创建新分区表 (g) # 添加第一个分区 (n)1M-2M类型a2 (SPL) # 添加第二个分区 (n)2M-16M类型83 (Uboot) # 添加第三个分区 (n)16M-512M类型c (FAT32) # 添加第四个分区 (n)剩余空间类型83 (EXT4)写入引导文件的具体操作sudo dd ifu-boot-sunxi-with-spl.bin of/dev/sdX bs1024 seek8 sudo mkfs.vfat /dev/sdX3 sudo mkfs.ext4 /dev/sdX4将内核和设备树复制到FAT分区sudo mount /dev/sdX3 /mnt sudo cp arch/arm/boot/zImage /mnt sudo cp arch/arm/boot/dts/sun8i-v3s-*.dtb /mnt sudo umount /mnt5. 外设驱动调试实战5.1 RGB LCD显示配置通过修改设备树配置LCD参数panel: panel { compatible simple-panel; #address-cells 1; #size-cells 0; enable-gpios pio 1 7 GPIO_ACTIVE_HIGH; // PB7 power-supply reg_vcc3v3; port { panel_input: endpoint { remote-endpoint lcd0_out; }; }; };5.2 MIPI CSI摄像头接入OV5640摄像头的典型配置csi1 { status okay; port { csi1_ep: endpoint { remote-endpoint ov5640_ep; bus-width 8; hsync-active 1; vsync-active 0; pclk-sample 1; }; }; };5.3 网络与USB功能验证以太网PHY的电源管理配置emac { phy-handle int_mii_phy; phy-mode mii; allwinner,leds-active-low; status okay; };6. 常见问题排错指南SPL阶段卡住检查TF卡烧录偏移量是否正确seek8确认uboot配置中DRAM参数匹配V3s的64MB内存内核启动panic设备树未正确编译make dtbs后确认.dtb文件更新时间检查控制台输出确认是驱动问题还是内存问题外设不工作使用sunxi-pio工具检查GPIO状态通过dmesg | grep regulator查看电源管理状态# 常用调试命令 cat /proc/device-tree/model # 验证设备树加载 sunxi-gpio list # 查看GPIO状态 v4l2-ctl --list-devices # 检查视频设备7. 进阶优化技巧内核裁剪通过make menuconfig移除不需要的驱动模块典型可精简区域未使用的文件系统驱动如NTFS不需要的网络协议如IPv6特殊硬件支持如蓝牙启动加速修改uboot环境变量setenv bootargs consolettyS0,115200 root/dev/mmcblk0p4 rootwait panic10 setenv bootcmd load mmc 0:3 0x41000000 zImage; load mmc 0:3 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; bootz 0x41000000 - 0x41800000 saveenv根文件系统构建使用buildroot定制make qemu_arm_vexpress_defconfig make menuconfig # 选择V3s相关配置 make