从 SDK 编译到镜像固化|SBC‑TLT153 单板机 Linux 系统深度开发指南(二)

2.4 编译Recovery

 

Recovery是设备的一个独立轻量级运行环境,专门用于OTA升级、恢复出厂设置等维护操作。本小节主要说明如何构建Recovery分区,编译生成Recovery镜像,若无需编译生成Recovery镜像,可跳过此步骤,不影响系统镜像生成。
 

请先完成上文“编译LinuxSDK”章节,并确保板级配置文件BoardConfig.mk已开启Recovery相关配置。NAND FLASH配置单板机的BoardConfig.mk位于在"device/config/chips/t153/configs/sbc-tlt153-nand/ubuntu/"目录下。eMMC配置单板机的BoardConfig.mk位于在"device/config/chips/t153/configs/sbc-tlt153-emmc/ubuntu/"目录下。

在对应BoardConfig.mk中,Recovery编译依赖以下核心配置,用于指定内核与ramfs编译方案。如下是NAND FLASH配置单板机的BoardConfig.mk内容。

 

 

执行如下命令,进入LinuxSDK源码目录,加载Tina构建环境后执行Recovery编译。

Host# source build/envsetup.sh

Host# swupdate_make_recovery_img

备注:修改Recovery ramfs内部脚本(如swupdate_cmd.sh日志路径)或Recovery内核/ramfs配置后,需执行swupdate_make_recovery_img重新编译Recovery。

 

 

 

 

 

 

 

2.5 编译生成系统镜像

 

执行如下命令,打包生成系统镜像文件。

Host# ./build.sh pack

 

 

 

本次操作会将SPL镜像(boot0_sdcard_sun8iw22p1.bin、boot0_sdcard_sun8iw22p1.bin、boot0_spinor_sun8iw22p1.bin)转化为boot0_sdcard.fex、boot0_nand.fex、boot0_spinor.fex文件;将U-Boot镜像(u-boot-sun8iw22p1.bin)、U-Boot设备树镜像、sys_config配置文件合并生成boot_package.fex文件;将内核镜像(boot.img)、内核设备树镜像转化为boot.fex文件;将文件系统镜像文件转化为rootfs-ubifs.fex文件和rootfs-ext4.fex文件。

最后将boot0_sdcard.fex、boot0_nand.fex、boot0_spinor.fex、boot_package.fex、boot.fex、rootfs.fex、recovery.fex等文件,打包生成"out/t153_linux_sbc-tlt153-xxxx.img"系统镜像文件。

 

 

请参考《系统固化手册》,将系统镜像文件固化至Micro SD卡、NAND FLASH/eMMC即可。
 

3 U-Boot开发

 

3.1 U-Boot源码说明
 

U-Boot是开源的嵌入式系统引导加载程序,主要负责硬件初始化、环境参数配置及Linux内核的引导启动。原生U-Boot位于LinuxSDK源码下的"brandy/brandy-2.0/u-boot-2023/"目录,全志官方适配后的U-Boot源码位于"brandy/brandy-2.0/u-boot-bsp/"目录。

备注:u-boot-2023采用独立BSP仓库机制,即u-boot-2023目录存放原生U-Boot,全志官方的相关修改内容均置于u-boot-bsp目录,编译时会自动整合,详见“6-开发参考资料/全志官方参考文档/基础组件开发指南/Tina_Linux_系统软件_开发指南.pdf”。

 

 

 


 

3.2 配置U-Boot

 

U-Boot可使用menuconfig进行配置,请参考“配置内核选项”章节,配置menuconfconfig所需依赖环境。
 

在LinuxSDK源码目录下,执行如下命令通过menuconfig配置U-Boot。

Host# ./build.sh uboot_menuconfig

 

 

 

执行如下命令,保存配置选项。NAND FLASH配置单板机将保存在"brandy/brandy-2.0/u-boot-bsp/configs/sun8iw22p1_t153_bga_defconfig"目录;eMMC配置单板机将保存在"brandy/brandy-2.0/u-boot-bsp/configs/sun8iw22p1_t153_bga_mmc_defconfig"目录。

Host# ./build.sh uboot_saveconfig

 

 

3.3编译U-Boot
 

在LinuxSDK源码目录下执行如下命令,配置编译选项,并单独编译U-Boot。

Host# ./build.sh uboot

 

 

 

执行如下命令,打包生成新的U-Boot镜像boot_package.fex。

Host# ./build.sh pack

 

 

 

 

3.4替换U-Boot
 

3.4.1替换U-Boot SPL镜像
 

请先参考“编译U-Boot”章节完成U-Boot编译,生成SPL镜像boot0_sdcard.fex文件,将SPL镜像boot0_sdcard.fex文件拷贝至单板机系统,执行如下命令固化至系统启动卡。如需固化至eMMC,请将命令中的"mmcblk0"替换为"mmcblk2"。

备注:目前暂不支持通过dd命令的方式固化U-Boot SPL镜像至NAND FLASH。

Target# dd if=boot0_sdcard.fex of=/dev/mmcblk0 seek=16 conv=fsync //将boot0_sdcard.fex写入SD卡的第16个扇区

Target# dd if=boot0_sdcard.fex of=/dev/mmcblk0 seek=256 conv=fsync //将boot0_sdcard.fex写入SD卡的第256个扇区

Target#reboot

 

 

3.4.2替换U-Boot镜像
 

我司已提供U-Boot镜像文件,位于产品资料“4-软件资料\Linux\U-Boot\image\u-boot-2023-[版本号]-[Git系列号]_u-boot-bsp-[版本号]-[Git系列号]\”目录下。
 

其中"nand"目录下的U-Boot镜像文件适配NAND FLASH配置单板机,"emmc"目录下的U-Boot镜像文件适配eMMC配置单板机。

请从NAND FLASH启动系统,将U-Boot镜像拷贝至单板机系统(镜像名称请以实际情况为准),执行如下命令固化至NAND FLASH。

Target#flash_erase /dev/mtd1 0 0 //擦除/dev/mtd1分区的所有块

Target#nandwrite -p /dev/mtd1 boot_package.fex //将boot_package.fex写入/dev/mtd1分区

Target#reboot

 

 

备注:

(1)如需固化至系统启动卡,请参考如下命令进行操作。

(2)如需固化至eMMC,请将以下命令中的"mmcblk0"替换为"mmcblk2"。

Target# dd if=boot_package.fex of=/dev/mmcblk0 seek=32800 conv=fsync //将boot_package.fex写入系统启动卡的第32800扇区

Target# dd if=boot_package.fex of=/dev/mmcblk0 seek=24576 conv=fsync //将boot_package.fex写入系统启动卡的第24576扇区

Target# reboot

 

 

3.5 U-Boot使用说明
 

3.5.1 U-Boot命令进入方式
 

单板机上电启动后,在U-Boot倒计时结束之前按下"Ctrl + C"进入U-Boot命令行模式。
 

3.5.2 环境变量说明
 

(1)环境变量存储

执行命令"setenv"或"env default -f -a"修改的是运行空间中的环境变量值,须使用"saveenv"命令将修改后的环境变量保存起来。否则U-Boot重启后,将会使用修改前的环境变量值。环境变量修改完成后,执行reset命令,即可使用修改后的U-Boot环境变量启动。
 

U-Boot# env default -f -a //强制恢复所有环境变量为默认值

U-Boot#saveenv //将当前环境变量保存到存储设备

U-Boot#reset //重启

 

 

(2)默认配置信息

在U-Boot命令行执行printenv命令可查看环境变量,如下提供主要U-Boot环境变量的解析说明。不同版本的U-Boot,环境变量可能会有所不同,内容仅供参考。

 

 

 

(3)环境变量修改

本次演示将内核打印信息等级从8修改为0。

U-Boot# setenv loglevel 0 //设置环境变量loglevel的值为0

U-Boot# printenv loglevel //打印当前loglevel环境变量的值,用于确认设置是否正确

U-Boot# saveenv //将修改后的环境变量保存到存储设备

U-Boot# reset //重启

 

 

可以观察内核打印信息明显减少。

 

 

4 Kernel开发

 

4.1 Kernel源码说明
 

Linux内核作为操作系统核心,负责系统资源管理、硬件设备驱动及系统服务提供。原生内核源码位于LinuxSDK源码目录下的"kernel/linux-5.10-origin/",全志官方适配后的内核源码在"bsp/"目录,Linux-RT内核源码则位于"kernel/linux-5.10-rt/"目录。

备注:编译配置完成后,kernel目录会生成指向"bsp"目录的软链接文件。如需修改模块内容,请直接进入"bsp"目录操作,直接编辑软链接文件会导致编译时被覆盖,且不利于版本管理。

 

 

 

 

posted @ 2026-09-17 08:54  创龙科技-黄工  阅读(10)  评论(0)    收藏  举报