荔枝派Zero从零到跑通:手把手教你用16M NOR Flash构建全志V3s最小Linux系统

张开发
2026/4/18 8:23:18 15 分钟阅读

分享文章

荔枝派Zero从零到跑通:手把手教你用16M NOR Flash构建全志V3s最小Linux系统
荔枝派Zero全志V3s开发实战16M NOR Flash最小Linux系统构建指南当一块仅有16MB存储空间的NOR Flash芯片遇上全志V3s这颗高性能嵌入式处理器会碰撞出怎样的火花本文将带你从零开始在荔枝派Zero开发板上构建一个完整的Linux系统涵盖从工具链准备到最终烧录的全流程。不同于常规教程仅关注配置细节我们将重点关注NOR Flash这种特殊存储介质下的系统构建技巧以及如何规避实际开发中的各种坑。1. 开发环境搭建与硬件准备在开始构建系统之前我们需要准备合适的开发环境和硬件工具。荔枝派Zero是一款基于全志V3s处理器的超小型开发板其核心优势在于极低的功耗和丰富的接口。本次项目使用的存储介质是XT25F128B NOR Flash芯片容量为16MB128Mb。必备工具清单硬件部分荔枝派Zero开发板含XT25F128B NOR FlashUSB转TTL串口调试模块如CH3405V电源适配器Micro USB数据线软件工具链# 基础编译工具 sudo apt-get install build-essential git bison flex libssl-dev # 交叉编译工具链 wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz mv gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf /opt/ echo export PATH$PATH:/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin ~/.bashrc source ~/.bashrc提示建议使用Ubuntu 18.04或20.04 LTS版本作为开发环境避免因系统版本过新导致的兼容性问题。NOR Flash特性与挑战与常见的NAND Flash相比NOR Flash具有以下特点特性NOR FlashNAND Flash读取速度快慢写入速度慢快擦除单位块(通常64KB)页(通常2KB)寿命10万次100万次随机访问支持不支持价格高低这些特性决定了我们在构建系统时需要特别注意文件系统必须选择支持NOR Flash的JFFS2分区大小必须是擦除块大小(64KB)的整数倍需要考虑有限的存储空间优化系统组件2. U-Boot编译与NOR Flash适配U-Boot作为系统的引导程序需要特别配置以支持NOR Flash启动。我们使用Lichee Pi社区维护的U-Boot分支git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git cd u-boot关键配置步骤Flash型号支持配置make ARCHarm menuconfig进入Device Drivers SPI Flash Support选择与XT25F128B兼容的驱动如Macronix SPI flash support环境变量设置修改include/configs/sun8i.h在#include configs/sunxi-common.h前添加#define CONFIG_BOOTCOMMAND sf probe 0; \ sf read 0x41800000 0x100000 0x10000; \ sf read 0x41000000 0x110000 0x400000; \ bootz 0x41000000 - 0x41800000 #define CONFIG_BOOTARGS consolettyS0,115200 earlyprintk panic5 rootwait \ mtdpartsspi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) root31:03 rw rootfstypejffs2编译配置与执行make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig time make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- 21 | tee build.log常见问题排查Flash识别失败检查menuconfig中是否正确选择了兼容的SPI Flash驱动启动卡住确认bootcmd中的内存地址与分区布局匹配环境变量不生效确保配置添加在sunxi-common.h包含之前编译成功后将在目录下生成u-boot-sunxi-with-spl.bin文件这是我们需要烧录的U-Boot镜像。3. Linux内核定制与设备树配置针对NOR Flash的特殊性Linux内核需要做相应调整。我们使用Lichee Pi提供的4.13.y内核分支git clone -b zero-4.13.y https://github.com/Lichee-Pi/linux.git cd linux内核关键配置SPI NOR Flash支持make ARCHarm menuconfig确保启用以下选项Device Drivers Memory Technology Device (MTD) support Command line partition table parsingDevice Drivers Memory Technology Device (MTD) support SPI-NOR device supportJFFS2文件系统支持File systems Miscellaneous filesystems Journalling Flash File System v2 (JFFS2) support设备树修改编辑arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts添加SPI节点spi0 { status okay; xt25f128b: xt25f128b0 { compatible jedec,spi-nor; reg 0; spi-max-frequency 50000000; #address-cells 1; #size-cells 1; }; };内核编译命令make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j$(nproc) make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- dtbs编译完成后关键文件位置内核镜像arch/arm/boot/zImage设备树二进制arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb注意避免在配置后运行make ARCHarm licheepi_zero_defconfig这会覆盖你的自定义配置。4. 根文件系统制作与JFFS2优化由于NOR Flash的特性我们需要使用JFFS2文件系统。以下是构建步骤准备基础文件系统可以使用Buildroot或Debian等工具生成基础文件系统得到一个rootfs.tar.gz文件。安装JFFS2工具sudo apt-get install mtd-utils计算JFFS2分区大小对于16MB Flash扣除其他分区后总空间16MB U-Boot1MB DTB64KB 内核4MB 剩余空间16 - 1 - 0.064 - 4 10.936MB (0xAF0000)生成JFFS2镜像mkfs.jffs2 -s 0x100 -e 0x10000 -p 0xAF0000 -d rootfs/ -o jffs2.img参数说明-s 0x100页大小256字节-e 0x10000擦除块大小64KB-p 0xAF0000分区大小空间优化技巧删除不必要的文档和手册页使用BusyBox替代完整版工具静态编译关键应用减少库依赖压缩二进制文件如使用UPX5. 镜像打包与烧录实战将所有组件打包成一个完整的Flash镜像分区布局规划分区大小起始地址描述uboot1MB0x000000引导程序dtb64KB0x100000设备树kernel4MB0x110000内核镜像rootfs剩余0x510000JFFS2文件系统打包脚本#!/bin/sh dd if/dev/zero offlashimg.bin bs1M count16 \ dd ifu-boot-sunxi-with-spl.bin offlashimg.bin bs1K convnotrunc \ dd ifsun8i-v3s-licheepi-zero.dtb offlashimg.bin bs1K seek1024 convnotrunc \ dd ifzImage offlashimg.bin bs1K seek1088 convnotrunc \ dd ifjffs2.img offlashimg.bin bs1K seek5184 convnotrunc烧录工具准备git clone -b spi-rebase https://github.com/Icenowy/sunxi-tools.git cd sunxi-tools make sudo make install进入FEL模式的方法确保SPI Flash为空或内容无效或者在上电时将SPI_MISO引脚拉低或者使用特制的SD卡启动烧录命令sudo sunxi-fel -p spiflash-write 0 flashimg.bin单独烧录各分区# U-Boot sudo sunxi-fel -p spiflash-write 0x0 u-boot-sunxi-with-spl.bin # 设备树 sudo sunxi-fel -p spiflash-write 0x100000 sun8i-v3s-licheepi-zero.dtb # 内核 sudo sunxi-fel -p spiflash-write 0x110000 zImage # 根文件系统 sudo sunxi-fel -p spiflash-write 0x510000 jffs2.img6. 系统调试与性能优化系统成功启动后可以通过串口查看启动日志默认波特率115200。常见的调试技巧包括NOR Flash性能优化SPI时钟配置在设备树中调整spi-max-frequencyXT25F128B最高支持50MHzspi-max-frequency 50000000;文件系统挂载选项在/etc/fstab中添加优化参数/dev/mtdblock3 / jffs2 noatime,compresslzo 0 0内存盘使用对频繁写入的目录使用tmpfstmpfs /var tmpfs defaults,size1M 0 0 tmpfs /tmp tmpfs defaults,size2M 0 0常见问题解决方案启动卡在U-Boot检查SPI Flash驱动是否匹配确认bootcmd设置正确内核panic确认设备树是否正确配置了SPI节点检查内核是否包含NOR支持文件系统损坏确保JFFS2创建时指定的擦除块大小与实际一致空间不足精简内核模块移除不必要的驱动性能测试工具# Flash读写测试 time dd if/dev/mtdblock3 of/dev/null bs1M count1 time dd if/dev/zero of/tmp/test bs1M count1 convfdatasync # 内存测试 mbw 8通过本文的详细指导即使是嵌入式Linux新手也能成功在荔枝派Zero上构建基于NOR Flash的完整Linux系统。这种方案特别适合需要高可靠性、快速启动且存储需求不大的应用场景如工业控制、物联网网关等。

更多文章