allwinner bsp

    全志 Linux 点亮指南:F1C100s、V3s、T113 从 Boot ROM 到根文件系统

    在全志 F1C100s、V3s、T113 板子上点亮 Linux 的实战指南:主线内核还是厂商 BSP、启动链、FEL 恢复、DRAM 与启动介质的坑、设备树和量产烧录。

    ·XTELL 工程团队

    为什么全志芯片总出现在成本敏感的 Linux 产品里

    F1C100s、V3s、T113 这几个系列,让小团队用很少的外围元件、两到四层板,就能得到一颗封装内带 DRAM、能跑 Linux 的处理器。对面板、控制器、网关、音视频设备这类产品,树莓派级别的模块太贵或太大,而单片机又跑不动软件,它们就是自然的选择。它们也不留情面:资料比主流厂商少,启动流程有自己的约定,一块"差不多能用"的板子,会以看起来随机的方式出问题。

    下面是我们点亮这类板子的顺序,以及最容易耗掉时间的地方。

    先决定:主线内核还是厂商 BSP

    全志提供厂商 BSP(Tina Linux SDK 是其中一种形式),内核较老,带厂商驱动,显示、视频和部分外设里有闭源部分。主线 Linux 和 U-Boot 由 sunxi 社区维护,已经支持 F1C100s(suniv 系列)、V3s,以及较新的 T113 系列,外设支持在增加,但并不完整。

    • 厂商 BSP:当产品依赖硬件视频编解码、厂商的摄像头流水线,或主线暂未覆盖的显示功能时,这是更快的路。代价是内核老、安全补丁要自己回移,构建系统也很难迁移到别的芯片。
    • 主线:如果产品只需要 CPU、存储、网络、USB、GPIO、I2C、SPI、UART 和普通 RGB 屏,主线是更好的长期基础。可以升级、工具链标准、设备树由你掌控。

    这一点要在第一次原理图评审之前定下来,因为它决定了你能依赖哪些外设。两种路线我们都交付过:全志 R528 控制板就是在厂商 Tina Linux 上,围绕它集成了网络服务、GPIO、UART 和 USB 驱动。

    启动链,以及它为什么决定调试顺序

    所有全志芯片的启动方式都一样:片上 Boot ROM 按固定顺序在支持的介质上找启动镜像,把一个很小的第一级加载器(SPL)装进片上内存,这个加载器初始化 DRAM 并加载 U-Boot,U-Boot 再加载内核。由此有三个后果。

    • SPL 把 DRAM 初始化好之前,你没有内存,也几乎没有输出。板子"死机"几乎都是死在这里,所以先接好 Boot ROM 和 SPL 使用的串口,盯着最初几行输出。
    • SPL 里的 DRAM 参数必须和实际 DRAM 匹配。对封装内带 DRAM 的芯片,社区为该芯片提供的配置通常可用;对使用外置 DRAM 的板子,时序和驱动参数要来自内存芯片的数据手册并经过验证,不能直接照抄参考板。
    • 启动介质是按顺序探测的。一块空白的 SPI 闪存、插着没拔的 SD 卡和一个启动选择电阻,凑在一起,就会得到一块今天能启动、明天不能的板子。

    把 FEL 模式留作恢复通道

    这些芯片的 Boot ROM 里都有 FEL,一种 USB 启动模式。板子进入 FEL 后,sunxi-fel 工具可以通过 USB 加载并运行代码、读内存、烧写 SPI 存储,所以闪存写坏了也不等于板子变砖。请确保你的设计留出了入口:复位时可以拉动 FEL 选择脚,USB OTG 接口接到产线夹具能够接触的连接器上。多数工厂也是用这条路径烧录板子,一举两得。

    DRAM 是第一个要认真测试的东西

    能启动但一加载就崩溃的板子,通常是内存问题,而不是内核问题。在花几天时间调驱动之前,先在温度变化下、其他外设都在工作时,跑几个小时的内存测试。重点检查三件事:

    • 核心和 DRAM 的电源轨,要在负载阶跃下测,而不是空闲时。
    • DRAM 的时钟和驱动设置,特别是使用外置内存的板子,走线长度匹配的影响很大。
    • 不稳定现象是否随温度变化。如果是,那就是余量问题,任何软件手段都治不了。

    存储:SD 卡、SPI NOR、SPI NAND 还是 eMMC

    SD 卡开发时方便,现场里不可靠。做产品时,小系统选 SPI NAND 或 NOR,芯片支持的话选 eMMC,并规划只读的根文件系统加单独的可写数据区。NAND 上要用适合裸闪存的文件系统,并预期要调整分区布局、坏块处理,以及 Boot ROM 期望的 ECC 设置。要专门测试掉电:在系统写数据时拔掉电源,确认之后还能启动,而且要反复做很多次。

    设备树就是这块板子本身

    从内核树里最接近的参考板开始,复制成你硬件的新文件,每次只改一件事:引脚复用、稳压器、显示时序、以太网 PHY 或 USB 角色。大多数点亮延误,都是没注意到的引脚冲突,或者因为没有任何节点声明使用而被内核关掉的稳压器。外设没出现时,按顺序检查:它的时钟和复位是否打开、引脚是否复用到它、供电是否打开、驱动是否真的匹配上了这个节点。

    可复现的根文件系统

    对这类小系统,Buildroot 通常大小合适:它用一份你放进版本管理的配置文件,构建出工具链、内核、U-Boot 和最小的用户空间。不要手工拼装镜像。产品要在一年后逐位复现,那时做出第一版镜像的人可能已经离开。

    量产烧录与测试

    设计板子的同时就要设计工厂流程:板子怎样进入 FEL,或从已烧写的器件启动;镜像怎样写入并校验;夹具怎样记录结果;固件首次启动时跑哪些自检(内存、存储、网络、显示、传感器)。一块无法在夹具上三十秒内测完的板子,在工厂里花的钱会比工程上更多。

    我们能帮什么

    我们在全志及其他应用处理器上点亮 Linux,从启动链、设备树到驱动和可复现的根文件系统,也设计围绕它们的电路板。请看我们的 Linux BSP 与驱动服务,以及篇幅更长的通用点亮指南。

    需要专业服务?

    联系我们获取定制化解决方案和报价