
100ASK-T113 Pro 开发板 Bootloader 完全开发指南本章基于 Tina-Linux SDK深入讲解 BootloaderU-Boot的组成、编译、配置、修改及烧录方法。包含大量实战示例从环境搭建到修改设备树、增加开机 Logo、使用 fastboot 更新分区手把手带你掌握嵌入式 Linux 启动的第一阶段。学完本章你将能独立对 T113 开发板的 U-Boot 进行定制和调试。文章目录100ASK-T113 Pro 开发板 Bootloader 完全开发指南一、Tina-Linux Bootloader 简述1.1 什么是 Bootloader1.2 Tina-Linux 启动流程文字描述二、单独编译 Bootloader 部分2.1 准备编译工具链2.2 快速编译 boot0 及 U-Boot2.3 单独编译 U-Boot2.4 单独编译 BOOT0 / FES / SBOOT三、单独配置 U-Boot3.1 U-Boot 设备树与环境变量文件3.2 U-Boot 源码所在位置3.3 Tina 系统指定的配置文件3.4 编译打包与更新四、修改系统启动环境变量4.1 查看 U-Boot 默认环境变量4.2 修改启动等待时间4.3 设置为默认配置永久修改五、U-Boot 支持的命令部分常用5.1 信息查询类5.2 环境变量操作5.3 内存操作5.4 存储介质操作5.5 网络命令5.6 FAT 文件系统命令六、示例U-Boot 下查看并修改内核设备树节点6.1 FDT 命令基本用法6.2 查询配置以 WiFi 节点为例6.3 修改整数属性6.4 修改字符串属性6.5 GPIO 或 PIN 配置特殊说明七、示例使用 fastboot 更新系统分区7.1 进入 fastboot 模式7.2 主机端安装 fastboot 工具7.3 查看设备连接7.4 更新 boot 分区7.5 其他分区八、示例修改 U-Boot 支持 RGB 屏幕8.1 修改 U-Boot 设备树8.2 修改 U-Boot 配置8.3 编译并烧录九、示例U-Boot 下增加启动 LOGO 图9.1 准备合适尺寸的图片9.2 转换图片格式如需要9.3 拷贝到特定目录9.4 编译打包使用9.5 调整图像大小可选十、示例固化自己的 U‑Boot 配置重启不丢失10.1 修改默认环境变量推荐用于 bootcmd、bootargs 等10.2 修改 Kconfig 配置用于开启/关闭命令、功能10.3 验证固化是否成功十一、必须掌握 vs 了解即可✅ 必须掌握面试/工作中高频 了解即可能看懂、不要求独立完成十二、面试官提问环节第1问U-Boot 中如何修改启动等待时间如何永久生效第2问U-Boot 中如何从 SD 卡加载内核并启动第3问如何单独编译 U-Boot 而不重新编译整个 Tina 系统第4问在 U-Boot 中修改设备树节点后如何使修改生效并传递给内核第5问为什么修改了 env.cfg 后重新烧录固件但开发板上的环境变量还是旧的十三、常见问题与调试技巧13.1 U-Boot 无法进入命令行13.2 修改设备树后屏幕依然不亮13.3 fastboot 无法识别设备十四、总结一、Tina-Linux Bootloader 简述1.1 什么是 BootloaderBootloader 是系统上电后第一个执行的程序负责初始化硬件时钟、DDR、存储控制器等然后将 Linux 内核加载到内存并启动。在 Tina-Linux SDK 中Bootloader 由两部分组成一级引导程序BOOT0固化在芯片内部 BootROM 之后的第一个可执行程序用汇编编写极小负责初始化 DDR 并将完整 U-Boot 加载到内存。二级引导程序U-Boot功能强大的引导器提供命令行接口、支持多种文件系统、网络下载、环境变量管理等。1.2 Tina-Linux 启动流程文字描述text上电 → 芯片内部 BootROM 根据启动引脚选择启动介质NAND/SD卡/SPI Flash → 加载 BOOT0 到内部 SRAM 并执行 → BOOT0 初始化 DDR 控制器将 U-Boot 从 Flash 复制到 DDR → 跳转到 U-Boot 执行 → U-Boot 初始化更多外设根据环境变量加载内核 → 启动 Linux 内核我们将在后续章节详细讲解如何单独编译 BOOT0 和 U-Boot以及如何修改它们的配置。二、单独编译 Bootloader 部分2.1 准备编译工具链Tina-SDK 中已经包含了交叉编译工具链位于prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin。在编译之前需要确保环境变量已加载bashcd ~/tina-d1-h source build/envsetup.sh lunch 4 # 选择 t113_100ask-tina2.2 快速编译 boot0 及 U-Boot在 SDK 的lichee/brandy-2.0/目录下执行./build.sh -p 平台名称可以一键编译整个 Bootloader。平台名称对应LICHEE_CHIP变量对于 T113 是sun8iw20p1。示例bashcd lichee/brandy-2.0/ ./build.sh -p sun8iw20p1该命令会自动编译 BOOT0包含 nand、emmc、spinor 版本和 U-Boot。编译完成后生成的文件会被复制到device/config/chips/t113/bin/以及out/t113-100ask/目录。2.3 单独编译 U-Boot如果只需要编译 U-Boot不重新编译 BOOT0可以进入 U-Boot 源码目录手动配置并编译。bashcd lichee/brandy-2.0/u-boot-2018/ make sun8iw20p1_uart3_defconfig # 配置为 T113 百问网开发板配置 make -j$(nproc)sun8iw20p1_uart3_defconfig是专门为 T113 百问网开发板准备的默认配置调试串口为 UART3。编译成功后会在当前目录生成u-boot.bin并自动重命名并复制到device/config/chips/t113/bin/u-boot-sun8iw20p1.bin。2.4 单独编译 BOOT0 / FES / SBOOTBOOT0 的源码位于lichee/brandy-2.0/spl/目录。进入该目录后可以通过make命令选择不同存储介质进行编译。编译用于 NAND Flash 的 boot0bashcd lichee/brandy-2.0/spl make distclean make psun8iw20p1 mnand make boot0编译用于 SD/eMMC 的 boot0bashmake distclean make psun8iw20p1 memmc make boot0编译 FES工厂烧录相关bashmake distclean make psun8iw20p1 mfes make fes编译 SBOOT安全启动相关bashmake distclean make psun8iw20p1 msboot make sboot编译输出的文件位于spl/nboot/或out/t113-100ask/目录下例如boot0_sdcard_sun8iw20p1.bin、boot0_nand_sun8iw20p1.bin。必须掌握如何单独编译 U-Boot 和 BOOT0。这在实际开发中频繁用到例如修改 U-Boot 源码后只需重新编译 U-Boot 而无需重编整个系统。三、单独配置 U-Boot3.1 U-Boot 设备树与环境变量文件Tina SDK 将板级配置放在device/config/chips/t113/configs/100ask/目录下其中与 U-Boot 相关的文件有文件名作用uboot-board.dtsU-Boot 专用的设备树源文件描述引脚、时钟等env.cfg默认 U-Boot 环境变量如 bootdelay、bootcmd、consolesys_config.fex硬件引脚复用、时钟、电源等配置会参与生成设备树注意U-Boot 的设备树与内核的设备树是分开的。U-Boot 的设备树主要用于驱动显示、存储、网络等以便加载内核。3.2 U-Boot 源码所在位置完整的 U-Boot 源码位于text~/tina-d1-h/lichee/brandy-2.0/u-boot-2018/该目录下包含常见的 U-Boot 子目录arch/、board/、common/、configs/、drivers/、dts/等。你可以在configs/目录中找到所有预定义的配置文件bashcd lichee/brandy-2.0/u-boot-2018/configs/ ls -1 *sun8iw20p1*输出textsun8iw20p1_defconfig sun8iw20p1_nor_defconfig sun8iw20p1_uart3_defconfig # 我们使用的配置3.3 Tina 系统指定的配置文件Tina SDK 通过device/config/chips/t113/configs/100ask/BoardConfig.mk来指定 U-Boot 使用的配置makefileLICHEE_CHIP : sun8iw20p1 LICHEE_BRANDY_VER : 2.0 LICHEE_BRANDY_DEFCONF : sun8iw20p1_uart3_defconfig当执行 SDK 顶层make时构建系统会读取BoardConfig.mk自动调用 U-Boot 的make sun8iw20p1_uart3_defconfig。3.4 编译打包与更新在 SDK 顶层目录执行以下命令即可重新编译整个系统包括 U-Boot并打包固件bashmboot # 单独编译 Bootloader等同于 cd lichee/brandy-2.0 ./build.sh -p sun8iw20p1 make -j$(nproc) # 编译完整系统包括内核、包等 pack # 打包生成最终烧录镜像如果只修改了 U-Boot 源码可以只运行mboot然后pack最后烧录镜像。这样比完整编译节省大量时间。四、修改系统启动环境变量4.1 查看 U-Boot 默认环境变量连接开发板串口波特率 115200上电后迅速按空格键进入 U-Boot 命令行。输入print命令即可查看所有环境变量bash print bootdelay1 consolettyS3,115200 bootcmdrun setargs_nand_ubi boot_normal ...关键变量解释bootdelay自动启动前的等待秒数默认为 1。bootcmdU-Boot 自动执行的命令例如此处为run setargs_nand_ubi boot_normal。setargs_nand定义传递给内核的启动参数bootargs包括根文件系统位置、控制台等。setargs_mmc当从 SD 卡启动时使用的 bootargs。boot_normal实际加载内核的命令sunxi_flash read ...; bootm ...。4.2 修改启动等待时间在 U-Boot 命令行中修改bootdelay并保存bash setenv bootdelay 3 saveenv reset重启后会发现倒计时变成了 3 秒。必须掌握printenv、setenv、saveenv是 U-Boot 最常用的调试命令。4.3 设置为默认配置永久修改如果你希望在编译固件时就内置新的环境变量例如默认bootdelay3或添加固定 MAC 地址可以修改device/config/chips/t113/configs/100ask/env.cfg文件。示例添加 MAC 地址原文件内容片段textmac wifi_mac bt_mac修改为textmac20:0D:B0:33:9D:7E wifi_mac bt_mac保存后重新执行make pack并烧录固件MAC 地址就会成为默认值。进入 U-Boot 后输入print即可验证。了解即可env.cfg中的变量会覆盖 U-Boot 源码中的默认环境变量。五、U-Boot 支持的命令部分常用在 U-Boot 提示符下输入?或help可以列出所有命令。以下列出最常用的几类5.1 信息查询类命令作用bdinfo显示板级信息内存地址、时钟等mmcinfo显示 MMC/SD 卡信息flinfo显示 NOR Flash 信息5.2 环境变量操作命令作用printenv打印所有环境变量setenv设置环境变量saveenv保存环境变量到存储介质5.3 内存操作命令作用md显示内存内容mw填充内存cp内存拷贝cmp内存比较md示例md 0x42000000查看内存地址 0x42000000 处的数据。5.4 存储介质操作MMC/SD 卡mmc dev id切换设备mmc part显示分区fatls mmc 0:1列出 FAT 分区文件。NAND Flashnand info显示 NAND 信息nand read/nand write读写nand erase擦除。UBI 卷ubi part sys挂载 UBI 分区ubifsmount ubi0:rootfs挂载 UBIFS。5.5 网络命令命令作用dhcp自动获取 IPtftp addr file通过 TFTP 下载文件到内存bootm addr启动内存中的内核镜像5.6 FAT 文件系统命令命令作用fatls interface dev[:part] [path]列出目录fatload interface dev[:part] addr file加载文件到内存fatinfo显示文件系统信息示例从 SD 卡的第一个分区加载内核镜像bash mmc dev 0 fatload mmc 0:1 0x42000000 zImage bootm 0x42000000六、示例U-Boot 下查看并修改内核设备树节点U-Boot 提供了fdt命令来操作设备树Flattened Device Tree。注意操作的是当前内存中的设备树通常内核的设备树会在启动时由 U-Boot 传递给内核。6.1 FDT 命令基本用法命令作用fdt addr addr设置设备树的内存地址fdt list path列出节点或属性fdt set path prop val修改属性值fdt rm path [prop]删除节点或属性fdt mknode path node创建新节点示例查看根节点bash fdt addr 0x43ec0e70 # 假设设备树在此地址 fdt list /6.2 查询配置以 WiFi 节点为例bash fdt list /soc3000000/rfkill0/wlan0 wlan0 { compatible allwinner,sunxi-wlan; wlan_busnum 0x00000001; wlan_regon 0x00000013 0x00000006 0x0000000c 0x00000000; wlan_hostwake 0x00000013 0x00000006 0x0000000a 0x00000000; };6.3 修改整数属性例如将wlan_busnum从 1 改为 2bash fdt set /soc3000000/rfkill0/wlan0 wlan_busnum 0x2 fdt list /soc3000000/rfkill0/wlan0 wlan_busnum wlan_busnum 0x00000002;6.4 修改字符串属性例如将 WiFi 状态从okay改为disabledbash fdt set /soc3000000/rfkill0/wlan0 status disabled6.5 GPIO 或 PIN 配置特殊说明在设备树中GPIO 通常用一组数字描述phandle port pin func pull drive data。对于全志芯片GPIO 编号规则如下端口宏定义数值PA#define PA 00PB#define PB 11PC#define PC 22………PP#define PP 1515示例0x00000013 0x00000006 0x0000000c 0x00000000其中第二个数0x06表示 PG 端口第三个数0x0c表示组内序号 12即PG12。后面的数分别表示功能分配、内部电阻、驱动能力、输出电平。修改 GPIO 配置可以使用fdt set但要注意保持其他位的值不变。通常不建议手动修改而是修改源码中的设备树文件。必须掌握fdt list和fdt set是调试设备树的有力工具特别适用于快速验证硬件配置。七、示例使用 fastboot 更新系统分区当开发板通过 USB 连接到 PC 时可以在 U-Boot 中进入 fastboot 模式然后通过 PC 端的fastboot命令单独更新某个分区如 boot、rootfs。7.1 进入 fastboot 模式在 U-Boot 命令行中输入bash fastboot开发板会进入 fastboot 模式等待 USB 连接。7.2 主机端安装 fastboot 工具Ubuntu 下安装bashsudo apt install android-tools-fastboot7.3 查看设备连接bashsudo fastboot devices Android Fastboot fastboot7.4 更新 boot 分区先找到 boot 分区的镜像文件。在 SDKout/t113-100ask/目录下boot.fex是一个软链接指向实际的boot.img。bashcd out/t113-100ask ls -l image/boot.fex # lrwxrwxrwx ... - /home/ubuntu/tina-d1-h/out/t113-100ask/boot.img使用 fastboot 烧写bashsudo fastboot flash boot /home/ubuntu/tina-d1-h/out/t113-100ask/boot.img输出示例texttarget reported max download size of 33554432 bytes sending boot (3766 KB)... OKAY [ 0.212s] writing boot... OKAY [ 1.152s] finished. total time: 1.364s7.5 其他分区类似地可以更新rootfs分区bashsudo fastboot flash rootfs rootfs.img或者擦除分区bashsudo fastboot erase private必须掌握fastboot 是快速迭代开发的利器避免反复插拔 SD 卡或重新烧录完整固件。八、示例修改 U-Boot 支持 RGB 屏幕百问网 T113 开发板支持 7 寸 RGB 接口 LCD1024×600。我们需要修改 U-Boot 的设备树增加 LCD 节点使 U-Boot 能够初始化屏幕以便显示开机 Logo。8.1 修改 U-Boot 设备树设备树文件位于textdevice/config/chips/t113/configs/100ask/uboot-board.dts找到lcd0节点如果不存在则添加。以下是完整配置重要参数已注释clcd0 { lcd_used 1; // 启用 LCD lcd_driver_name default_lcd; lcd_backlight 100; // 背光亮度 0-255 lcd_if 0; // 0: RGB 接口 lcd_hv_if 0; // 0: 水平垂直同步 lcd_x 1024; // 水平分辨率 lcd_y 600; // 垂直分辨率 lcd_width 154; // 屏幕物理宽度 (mm) lcd_height 85; // 屏幕物理高度 (mm) lcd_dclk_freq 51; // 像素时钟 51MHz lcd_hbp 140; // Horizontal Back Porch lcd_ht 1344; // Horizontal Total lcd_hspw 20; // Horizontal Sync Pulse Width lcd_vbp 20; // Vertical Back Porch lcd_vt 635; // Vertical Total lcd_vspw 3; // Vertical Sync Pulse Width lcd_pwm_used 1; // 使用 PWM 调背光 lcd_pwm_ch 7; // 使用 PWM 通道 7 lcd_pwm_freq 500; // PWM 频率 500Hz lcd_pwm_pol 1; // 极性 lcd_power vcc-lcd; lcd_pin_power vcc-pd; pinctrl-0 rgb18_pins_a; // 数据引脚组 pinctrl-1 rgb18_pins_b; };注意如果原文件已有lcd0但某些属性不同需要删除原来的兼容节点替换为本节内容。8.2 修改 U-Boot 配置进入 U-Boot 源码目录编辑configs/sun8iw20p1_uart3_defconfig在文件末尾添加以下配置若没有kconfig# 启用 LCD 驱动 CONFIG_VIDEO_LCDy CONFIG_VIDEO_SUNXIy CONFIG_VIDEO_SUNXI_DE_BEy CONFIG_VIDEO_SUNXI_DE_FEy CONFIG_VIDEO_SUNXI_HDMIn CONFIG_DISPLAY_LOGOy CONFIG_BMP_16BPPy CONFIG_BMP_24BPPy CONFIG_BMP_32BPPy8.3 编译并烧录回到 SDK 顶层执行bashmboot # 重新编译 U-Boot make -j$(nproc) # 完整编译可选因为只改了 U-Boot pack # 打包然后烧录新固件。此时启动后屏幕应该会亮起但无图像因为还未添加 Logo。如果背光亮起说明 LCD 初始化成功。必须掌握修改设备树是嵌入式开发的核心技能学会添加 LCD 节点后也可以类推添加其他外设。九、示例U-Boot 下增加启动 LOGO 图9.1 准备合适尺寸的图片以 7 寸屏1024×600为例建议使用分辨率小于屏幕分辨率的 BMP 图片例如 800×480。为了加快加载速度图片大小应控制在 200KB 以内。可以使用 GIMP 或画图工具将图片转换为 BMP 格式颜色深度选择 24 位。9.2 转换图片格式如需要使用 ImageMagick 的convert命令bashsudo apt install imagemagick convert original.jpg -resize 800x480 -colors 256 bootlogo.bmp或者使用 GIMP 导出为 BMP不压缩、24 位。9.3 拷贝到特定目录将bootlogo.bmp复制到 SDK 的boot-resource目录该目录会被打包到启动分区。bashcp bootlogo.bmp ~/tina-d1-h/device/config/chips/t113/configs/100ask/configs/注意路径可能因 SDK 版本而异。实际使用的目录是device/config/chips/t113/configs/100ask/configs/这个目录下的文件会被打包到boot-resource.fex中。9.4 编译打包使用重新编译并打包bashmake -j$(nproc) pack烧录固件后上电即可看到开机 Logo。9.5 调整图像大小可选如果 Logo 显示不完全或拉伸可以更换为更小尺寸的图片。推荐使用 512×300 黑色背景的图片加载速度极快。了解即可开机 Logo 的显示由 U-Boot 中的bmp_display函数实现。你也可以通过修改env.cfg中的bootlogo变量来更换 Logo 文件名需要配合 U-Boot 源码修改。十、示例固化自己的 U‑Boot 配置重启不丢失直接修改运行时的环境变量setenv只在当前启动生效复位后就会恢复成默认值。要想修改永久生效必须修改U‑Boot 的默认配置defconfig或env.cfg然后重新编译并烧写。10.1 修改默认环境变量推荐用于 bootcmd、bootargs 等Tina SDK 中板级的环境变量默认值存放在device/config/chips/t113/configs/100ask/env.cfg。bashcd ~/tina-d1-h/device/config/chips/t113/configs/100ask vim env.cfg例如将默认启动命令从boot_normal改为boot_recoverytextbootcmdrun setargs_nand_ubi boot_recovery保存后重新完整编译 SDK会自动重新打包 U‑Bootbashcd ~/tina-d1-h make -j32 pack10.2 修改 Kconfig 配置用于开启/关闭命令、功能如果你需要永久启用某个 U‑Boot 命令比如config、cpu、license等需要修改defconfig。① 进入 U‑Boot 源码目录打开 menuconfigbashcd ~/tina-d1-h/lichee/brandy-2.0/u-boot-2018 make sun8iw20p1_uart3_defconfig # 加载当前板子的配置 make menuconfig② 在菜单中勾选你需要的功能例如Command line interface → Info commands → [*] config。③ 保存并退出然后生成新的 defconfigbashmake savedefconfig cp defconfig configs/sun8iw20p1_uart3_defconfig④ 回到 SDK 顶层重新编译bashcd ~/tina-d1-h make -j3210.3 验证固化是否成功烧写新生成的固件例如tina_t113-100ask_uart3.img到设备重启后bash# 进入 U‑Boot 命令行查看环境变量是否为你修改的值 print bootcmd # 检查新增的命令是否存在 help config如果两者都符合预期说明配置已永久固化。核心原则不要在运行时用setenv改完就重启除非你执行了saveenv但某些 NAND 或 SPI NOR 上saveenv可能不可靠。生产环境必须通过修改defconfig或板级 env.cfg来固化配置。备份你的修改将device/config/chips/t113/configs/100ask/和修改后的 defconfig 用 Git 管理。十一、必须掌握 vs 了解即可✅ 必须掌握面试/工作中高频U-Boot 源码位置lichee/brandy-2.0/u-boot-2018/板级配置device/config/chips/t113/configs/100ask/。常用 U-Boot 命令printenv、setenv、saveenv、md、mmcinfo、fatload、bootm、reset。单独编译 U-Bootmake sun8iw20p1_uart3_defconfig→make -jN。修改环境变量通过 U-Boot 命令行setenvsaveenv或修改env.cfg后重新编译。使用 fastboot 更新分区fastboot flash boot boot.img。修改设备树编辑uboot-board.dts后重新编译。增加开机 Logo放置 BMP 到configs/目录重新打包。 了解即可能看懂、不要求独立完成BOOT0 的详细编译命令make p sun8iw20p1 mnand等。FDT 命令的高级用法修改数组属性、添加节点。U-Boot 源码的目录结构arch/arm/cpu/armv7/sunxi/等。GPIO 编号与设备树中数字的转换规则。U-Boot 中的 SPI NAND 驱动细节。十二、面试官提问环节第1问U-Boot 中如何修改启动等待时间如何永久生效参考答案临时修改在 U-Boot 命令行输入setenv bootdelay 3然后saveenv下次启动生效。永久固化修改 SDK 中的device/config/chips/t113/configs/100ask/env.cfg将bootdelay3写入然后重新编译打包烧录。第2问U-Boot 中如何从 SD 卡加载内核并启动参考答案bash mmc dev 0 fatload mmc 0:1 0x42000000 zImage fatload mmc 0:1 0x43000000 sun8iw20p1.dtb bootz 0x42000000 - 0x43000000其中bootz用于 zImagebootm用于 uImage。注意设备树地址与内核地址不能重叠。第3问如何单独编译 U-Boot 而不重新编译整个 Tina 系统参考答案bashcd ~/tina-d1-h source build/envsetup.sh lunch 4 mboot # 单独编译 Bootloader或者手动进入 U-Boot 目录make然后回到顶层执行pack重新打包。注意mboot会自动将生成的u-boot.bin复制到正确位置。第4问在 U-Boot 中修改设备树节点后如何使修改生效并传递给内核参考答案使用fdt set修改内存中的设备树然后使用bootm或bootz启动内核时U-Boot 会自动将修改后的设备树地址传给内核。示例bash fdt addr 0x43ec0e70 fdt set /soc3000000/uart3 status okay bootm 0x42000000 - 0x43ec0e70如果已经通过setenv bootargs设置了正确的设备树地址也可以直接运行bootcmd。第5问为什么修改了env.cfg后重新烧录固件但开发板上的环境变量还是旧的参考答案可能的原因没有执行make clean或删除旧的out/目录导致打包时仍使用了旧的env.fex。开发板上的环境变量被保存到了存储介质如 NAND 的 env 分区U-Boot 启动时会优先使用已保存的环境变量而不是固件中的默认值。解决方法在 U-Boot 命令行执行env default -a恢复默认然后saveenv。确保修改的env.cfg路径正确且没有被其他板级配置文件覆盖。十三、常见问题与调试技巧13.1 U-Boot 无法进入命令行检查串口参数波特率 115200数据位 8停止位 1无流控。确认开发板供电正常且启动介质SD 卡/NAND有正确固件。如果启动倒计时非常短例如bootdelay0可在上电前按住空格键或任意键直到串口输出Hit any key to stop autoboot。13.2 修改设备树后屏幕依然不亮确认lcd_used 1确认背光 PWM 通道和极性正确检查硬件连接。在 U-Boot 命令行执行fdt list /soc/lcd0查看设备树节点是否生效。可以暂时在uboot-board.dts中直接写死lcd_backlight 255测试。13.3 fastboot 无法识别设备确保在 U-Boot 中已输入fastboot命令。检查 USB 线是否连接正确通常使用 OTG 口。主机端安装驱动Windows 需要 Zadig 或全志 USB 驱动Linux 无需额外驱动。执行lsusb查看是否有1f3a:1000或类似的全志设备。十四、总结本章详细讲解了 Tina-Linux SDK 中 Bootloader 的组成、编译、配置与调试方法。通过一系列示例你应当能够独立完成以下任务单独编译 U-Boot 和 BOOT0。修改 U-Boot 环境变量和设备树。增加开机 Logo 并调整显示。使用 fastboot 快速更新内核或文件系统。Bootloader 是嵌入式系统的地基熟练掌握 U-Boot 将极大提升你的开发效率和调试能力。建议在实验板上反复练习本章所有示例并尝试修改不同参数观察效果。