全志T113-S3开发板uboot配置实战:从BoardConfig.mk到设备树修改全流程
全志T113-S3开发板uboot深度配置指南从存储介质差异到设备树联动1. 全志T113-S3开发环境全景解析初次接触全志T113-S3平台的开发者往往会对SDK的目录结构感到困惑。让我们先解剖Tina Linux SDK的骨架——lichee目录作为uboot和内核源码的大本营其中u-boot-2018和linux-5.4构成了基础软件栈。但真正的魔法发生在device/config/chips/t113/configs/[板型]这个目录这里藏着开发板的基因图谱。关键配置文件四重奏BoardConfig.mkuboot和内核的编译指挥棒sys_config.fex硬件参数的调音台DRAM/UART等uboot-board.dtsboard.dtsuboot与内核设备树的双胞胎env.cfguboot环境变量的备忘录经验提示开发板启动时串口打印的内核版本和编译器信息是确认工具链版本的黄金标准。例如常见的arm-openwrt-linux-muslgnueabi-gcc。2. 存储介质差异化的uboot配置实战不同存储介质(nand/emmc/sdcard)的uboot配置就像为不同性格的人准备不同的沟通方式。在spl目录下通过m参数指定存储介质类型# NAND Flash编译 make psun8iw20p1 mnand # eMMC编译 make psun8iw20p1 memmc # SD卡编译 make psun8iw20p1 mcard存储介质配置对比表参数项NANDeMMCSD Card块大小128KB/256KB512B512B坏块管理需要不需要不需要读写速度中等快依赖卡等级生命周期10万次5000次1000次典型配置指令mnandmemmcmcard3. BoardConfig.mk的奥秘解析这个看似简单的Makefile却是整个编译系统的大脑几个关键参数决定了编译行为的DNALICHEE_CHIP:sun8iw20p1 # 芯片型号指纹 LICHEE_BRANDY_DEFCONF:sun8iw20p1_uart3_defconfig # uboot配置蓝图 LICHEE_KERN_DEFCONF:sun8iw20p1smp_defconfig # 内核配置基因 LICHEE_REDUNDANT_ENV_SIZE:0x20000 # 环境变量保护区大小常见配置陷阱环境变量区大小不足导致参数丢失选错defconfig文件导致启动失败芯片型号与硬件不匹配引发异常调试技巧通过mboot命令可一键编译ubootboot0比手动编译更不易出错但需要提前配置好环境变量。4. 设备树双胞胎的协调之道uboot-board.dts和内核board.dts就像一对需要默契配合的双胞胎它们的协调程度直接决定系统能否正常启动。以修改UART调试串口为例步骤1修改uboot设备树// 在uboot-board.dts中 chosen { stdout-path serial2:115200n8; // 指定UART2 };步骤2同步内核设备树// 在board.dts中 uart2 { status okay; pinctrl-names default; pinctrl-0 uart2_pins; };步骤3更新环境变量在env.cfg中确保配置一致bootargsconsolettyS2,115200 earlyprintksunxi-uart,0x02500C00设备树联动检查清单[ ] 时钟配置一致[ ] 引脚复用状态匹配[ ] 中断号无冲突[ ] 寄存器地址正确[ ] status属性同步设置5. 高频问题排雷手册问题1如何确定交叉编译器版本方法1查看开发板启动日志中的编译器信息方法2检查prebuilt目录下的工具链日期版本方法3通过arm-openwrt-linux-muslgnueabi-gcc -v验证问题2串口配置冲突解决方案当硬件设计使用非默认串口时如UART2替代UART3复制并修改defconfigcp sun8iw20p1_uart3_defconfig sun8iw20p1_uart2_defconfig修改关键参数CONFIG_CONS_INDEX3 # UART2对应索引3 CONFIG_DEBUG_UART_BASE0x02500C00 # UART2基址更新BoardConfig.mk指向新配置LICHEE_BRANDY_DEFCONF:sun8iw20p1_uart2_defconfig问题3uboot与内核设备树不一致使用diff工具比对关键节点diff -u uboot-board.dts board.dts | grep -A 5 -B 5 reg\|status6. 高级调试技巧三则技巧1uboot环境变量保鲜术# 在uboot中设置保存次数 setenv upgrade_available 1 saveenv技巧2内核日志等级实时调节# 通过sysfs动态调整 echo 8 /proc/sys/kernel/printk技巧3设备树反编译验证# 将dtb转换为可读格式 dtc -I dtb -O dts -o decompiled.dts sunxi.dtb在完成uboot配置后真正的艺术在于平衡存储性能与可靠性的平衡、启动速度与功能完备性的平衡、默认配置与定制需求的平衡。记得每次修改后执行make clean清除旧配置就像画家在创作新作品前清理调色板。当所有环节协调一致时那个瞬间的启动日志将成为最动人的技术诗篇。