1. 荔枝派Zero开发板开箱与硬件解析荔枝派Zero作为一款基于全志V3S处理器的超小型开发板尺寸仅有40mm×60mm却集成了丰富的硬件资源。我第一次拿到这块板子时被它的精致设计惊艳到了——核心处理器采用Cortex-A7架构主频高达1.2GHz内置64MB DDR2内存还配备了USB OTG、TF卡槽、RGB LCD接口等常用外设接口。板载资源中最亮眼的是那个26pin的扩展接口包含了UART、SPI、I2C、PWM等常用通信接口。我在实际项目中经常用这个接口连接各种传感器模块。特别提醒新手焊接这个排针时要注意方向我就曾经因为焊反了导致调试半天找不到问题。全志V3S这颗SoC最吸引我的是它的低功耗特性实测运行Linux系统时功耗仅0.5W左右非常适合嵌入式物联网应用。不过要注意的是官方提供的原理图中有些细节需要特别注意比如USB接口的ESD保护电路设计我在早期版本中就遇到过静电损坏的问题。2. 开发环境搭建与工具链配置搭建交叉编译环境是开发的第一步。我推荐使用Linaro GCC 7.5.0工具链这个版本对V3S的兼容性最好。具体安装步骤如下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 sudo mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf /opt/配置环境变量时我习惯在~/.bashrc中添加export PATH$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin export CROSS_COMPILEarm-linux-gnueabihf- export ARCHarm验证工具链是否安装成功arm-linux-gnueabihf-gcc -v除了基本工具链还需要安装一些辅助工具sudo apt-get install device-tree-compiler u-boot-tools build-essential3. U-Boot编译与烧录实战荔枝派Zero支持主线U-Boot这大大简化了开发流程。我推荐使用Lichee-Pi维护的U-Boot分支git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current cd u-boot根据你的屏幕型号选择对应的配置# 480x272 LCD make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- LicheePi_Zero_480x272LCD_defconfig # 800x480 LCD make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig编译U-Bootmake ARCHarm menuconfig time make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- 21 | tee build.log编译完成后会生成u-boot-sunxi-with-spl.bin文件这就是我们要烧录的镜像。烧录前需要先对TF卡进行分区处理# 查看TF卡设备名 ls /dev/sd* # 清空分区表 sudo dd if/dev/zero of/dev/sdb bs512K count1 # 烧录U-Boot sudo dd ifu-boot-sunxi-with-spl.bin of/dev/sdb bs1024 seek84. Linux内核编译与配置技巧Linux内核的编译过程相对复杂一些但主线内核已经很好地支持了V3S芯片。我通常使用Lichee-Pi维护的5.2.y分支git clone -b zero-5.2.y https://github.com/Lichee-Pi/linux.git cd linux配置内核时有几个关键选项需要注意make ARCHarm licheepi_zero_defconfig make ARCHarm menuconfig在menuconfig界面中我建议开启以下功能Device Drivers Network device support Ethernet driver support Allwinner Sun8i Ethernet MAC supportDevice Drivers USB support USB Gadget Support Ethernet (g_ether)Device Drivers Staging drivers Realtek RTL8723BS SDIO Wireless LAN NIC driver编译内核和模块make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j$(nproc) make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- modules_install INSTALL_MOD_PATHoutput/编译完成后关键文件位置内核镜像arch/arm/boot/zImage设备树文件arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb内核模块output/lib/modules/5. 根文件系统构建方案对比根文件系统构建主要有两种方案Debootstrap和Buildroot。我在项目中都使用过各有优缺点。5.1 Debian系根文件系统构建使用debootstrap构建Debian根文件系统sudo apt install qemu-user-static debootstrap mkdir rootfs sudo debootstrap --foreign --archarmhf buster rootfs http://ftp.cn.debian.org/debian sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/ sudo chroot rootfs /debootstrap/debootstrap --second-stage配置基本系统sudo chroot rootfs passwd root apt-get install ssh vim exit这种方案的优点是软件包丰富适合需要复杂软件环境的项目。缺点是体积较大启动时间较长。5.2 Buildroot构建精简系统Buildroot更适合嵌入式场景配置方法wget https://buildroot.org/downloads/buildroot-2021.02.tar.gz tar xvf buildroot-2021.02.tar.gz cd buildroot-2021.02 make menuconfig关键配置选项Target options Target Architecture (ARM little endian)Toolchain External toolchain path (/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf)System configuration Root password (设置root密码)Target packages 按需选择软件包编译并打包make生成的根文件系统在output/images/rootfs.tar解压到TF卡的第二分区即可。6. 系统烧录与启动配置TF卡需要分成三个区域8MB未格式化的空间用于存放U-Boot32MB的FAT32分区存放内核和设备树剩余空间的EXT4分区存放根文件系统使用fdisk分区sudo fdisk /dev/sdb # 创建新分区表 (o) # 创建第一个分区 (n)起始2048大小8M # 创建第二个分区 (n)默认起始大小32M类型c (W95 FAT32) # 创建第三个分区 (n)默认起始默认大小 # 写入分区表 (w)格式化分区sudo mkfs.vfat /dev/sdb2 sudo mkfs.ext4 /dev/sdb3复制系统文件# 内核和设备树 sudo mount /dev/sdb2 /mnt sudo cp zImage sun8i-v3s-licheepi-zero.dtb /mnt/ # 根文件系统 sudo mount /dev/sdb3 /mnt sudo tar xvf rootfs.tar -C /mnt创建boot.scr引导脚本cat boot.cmd EOF setenv bootargs consolettyS0,115200 root/dev/mmcblk0p2 rootwait panic5 load mmc 0:1 0x41000000 zImage load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero.dtb bootz 0x41000000 - 0x41800000 EOF mkimage -C none -A arm -T script -d boot.cmd boot.scr sudo cp boot.scr /dev/sdb27. 核心外设驱动开发实战7.1 以太网驱动配置V3S内置了10/100M以太网控制器需要在内核中启用Device Drivers Network device support Ethernet driver support Allwinner Sun8i Ethernet MAC support修改设备树文件arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts添加emac { phy phy0; phy-mode mii; allwinner,use-internal-phy; status okay; phy0: ethernet-phy0 { reg 1; }; };网络配置ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up route add default gw 192.168.1.1 echo nameserver 8.8.8.8 /etc/resolv.conf7.2 USB摄像头驱动V3S支持USB摄像头内核配置Device Drivers Multimedia support Media USB Adapters USB Video Class (UVC)插入摄像头后检查ls /dev/video* dmesg | grep uvc测试摄像头apt-get install fswebcam fswebcam -d /dev/video0 test.jpg7.3 WiFi模块配置RTL8723BS WiFi模块配置Device Drivers Staging drivers Realtek RTL8723BS SDIO Wireless LAN NIC driver配置网络连接cat /etc/wpa_supplicant.conf EOF ctrl_interface/var/run/wpa_supplicant ap_scan1 network{ ssidyour_SSID pskyour_password } EOF wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf udhcpc -i wlan08. 常见问题排查与优化技巧8.1 启动失败排查常见问题及解决方法U-Boot无法启动检查TF卡烧录是否正确确认seek8参数内核panic检查bootargs中的root参数是否正确根文件系统挂载失败检查文件系统格式和内核驱动是否匹配8.2 性能优化建议内核裁剪去掉不需要的驱动和功能使用BusyBox替代完整版工具启用zRAM压缩交换空间优化启动脚本减少不必要的服务8.3 电源管理V3S支持多种低功耗模式echo mem /sys/power/state实测功耗数据全速运行约350mA 5V空闲状态约80mA 5V休眠模式约20mA 5V9. 进阶开发Qt应用移植在Buildroot中配置Qt支持make menuconfig Target packages Graphic libraries and applications Qt5 [*] gui module [*] widgets module [*] qt5base examples编译测试程序cd output/build/qt5base-5.15.2/examples/widgets/widgets/analogclock qmake make部署到开发板scp analogclock root192.168.1.100:/root ./analogclock -platform linuxfb10. 项目实战智能家居控制终端结合前面所有知识我开发了一个基于荔枝派Zero的智能家居控制终端。主要功能包括通过WiFi连接家庭网络通过GPIO控制继电器模块通过USB摄像头实现简易监控通过Qt实现图形界面关键代码片段GPIO控制#define GPIO_PIN PE12 int fd open(/sys/class/gpio/export, O_WRONLY); write(fd, GPIO_PIN, strlen(GPIO_PIN)); close(fd); fd open(/sys/class/gpio/gpio GPIO_PIN /direction, O_WRONLY); write(fd, out, 3); close(fd); fd open(/sys/class/gpio/gpio GPIO_PIN /value, O_WRONLY); write(fd, 1, 1); // 打开继电器 write(fd, 0, 1); // 关闭继电器 close(fd);这个项目充分展示了荔枝派Zero的强大功能整个系统成本不到100元却实现了商业级智能终端的大部分功能。