1. LS1046A开发环境搭建与首次启动

LS1046A开发环境搭建与首次启动 学习卡片

环境搭建的四个关键环节

LS1046A 的首次启动依赖一条完整的工具链:从 NXP 官方 SDK 获取源码与预编译工具链,配置交叉编译环境,分别编译 U-Boot 与 Linux 内核,最后通过 TFTP 将镜像加载到参考板并借助串口观察启动日志。四个环节的输入输出关系如下:

LS1046A 开发环境搭建与首次启动 — 数据流与工具链关系 ① SDK 安装 LSDK-21.08 flex-builder 脚本 源码 + 预编译工具链 ② 交叉编译工具链 aarch64-linux-gnu- gcc 9.3 / glibc 2.33 PATH 环境变量配置 ③ 编译 U-Boot / 内核 u-boot.bin Image + fsl-ls1046a-rdb.dtb rootfs (buildroot) ④ 首次启动 TFTP 加载 串口 115200 登录验证 关键产物与验证点 SDK 目录结构 packages/rpm/ build/ tools/ 工具链验证 aarch64-linux-gnu-gcc -v 输出目标架构确认 编译产物 u-boot.bin (约 800KB) Image (约 20MB) 启动日志关键行 U-Boot 2021.04 Linux version 5.10 主机 ↔ 目标板连接拓扑 开发主机 (x86_64) TFTP Server / 串口终端 LS1046A-RDB U-Boot / Linux 以太网 (TFTP: 192.168.1.100 → 192.168.1.10) 串口 (115200-8-N-1, /dev/ttyUSB0) SDK/工具链 编译 产物 启动验证 物理连接

SDK 获取与目录结构

NXP 官方 LSDK(Layerscape Software Development Kit)以 flex-builder 脚本为核心,一条命令即可拉取源码、工具链和根文件系统。推荐使用 LSDK 21.08 版本,对应 U-Boot 2021.04 和 Linux 5.10。

# 下载 LSDK 安装脚本
wget https://www.nxp.com/lsdk/lsdk-21.08/lsdk-21.08.sh
chmod +x lsdk-21.08.sh
./lsdk-21.08.sh

# 进入 SDK 目录后,查看关键子目录
ls
# packages/    — 源码包(U-Boot、Linux、DPAA 驱动等)
# build/       — 编译输出目录
# tools/       — 预编译交叉工具链
# configs/     — 板级配置文件

交叉编译工具链配置

LSDK 自带 aarch64 工具链,位于 tools/gcc-9.3/ 下。将其加入 PATH 后,用 aarch64-linux-gnu-gcc -v 确认目标架构为 aarch64。

export PATH=$PWD/tools/gcc-9.3/bin:$PATH
aarch64-linux-gnu-gcc -v
# 预期输出包含: Target: aarch64-linux-gnu
#              gcc version 9.3.0

编译 U-Boot 与 Linux 内核

使用 flex-builder 一键编译,或手动进入源码目录分别编译。首次编译建议使用一键方式,确保依赖关系正确。

# 一键编译 U-Boot + Linux + rootfs
flex-builder -c all -m ls1046ardb -b nor

# 或手动编译 U-Boot
cd packages/u-boot
make distclean
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ls1046ardb_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

# 手动编译内核
cd packages/linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

TFTP 加载与串口启动

将编译产物放入 TFTP 根目录,目标板上电后进入 U-Boot 命令行,通过 TFTP 加载内核与设备树,再用 booti 启动。

# 主机端:启动 TFTP 服务,将镜像放入 /srv/tftp
cp build/images/u-boot.bin /srv/tftp/
cp build/images/Image /srv/tftp/
cp build/images/fsl-ls1046a-rdb.dtb /srv/tftp/

# 目标板 U-Boot 命令行
setenv ipaddr 192.168.1.10
setenv serverip 192.168.1.100
tftp 0x80000000 Image
tftp 0x90000000 fsl-ls1046a-rdb.dtb
booti 0x80000000 - 0x90000000
串口参数固定为 115200-8-N-1。若启动卡在 "Starting kernel ..." 之后无输出,优先检查设备树是否与板卡匹配,以及内核命令行中的 console 参数是否为 ttyS0。

验证清单

检查项预期结果异常处理
工具链版本aarch64-linux-gnu-gcc 9.3.0检查 PATH 是否包含 tools/gcc-9.3/bin
U-Boot 编译生成 u-boot.bin,大小约 800KB确认 defconfig 为 ls1046ardb_defconfig
内核编译生成 Image 与 dtb 文件确认 ARCH=arm64 与 CROSS_COMPILE 设置正确
TFTP 传输U-Boot 显示 "Bytes transferred = ..."检查主机防火墙与 TFTP 根目录权限
串口启动出现 Linux 登录提示符检查 console=ttyS0,115200 与波特率