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