3. 开发环境搭建与首次启动
在开始任何 Layerscape 工程之前,必须先建立一套可复现的宿主机开发环境。本节以 Ubuntu 20.04 LTS 宿主机、LS1046A 参考板(RDB)为例,说明从 SDK 安装、交叉工具链配置,到串口与网络调试环境搭建,再到目标板首次启动与登录的完整过程。所有参数均为教学示例,实际工程中应以所用板卡原理图、BSP 版本和官方文档为准。
一、选择 SDK 与安装方式
NXP 为 Layerscape 提供两条主要路径:一是 LSDK(Layerscape Software Development Kit),包含 U-Boot、Linux 内核、RCW、设备树、根文件系统及交叉工具链,适合需要深度定制启动链和底层驱动的场景;二是 Yocto SDK,通过 bitbake meta-toolchain 或 bitbake fsl-image-networking 生成,适合以发行版方式管理软件包、需要长期维护 BSP 的团队。两者都提供 aarch64 交叉编译器,区别在于 LSDK 更贴近 NXP 官方启动流程,Yocto 更贴近社区化构建体系。
以 LSDK 为例,从 NXP 官网下载 LSDK-21.08 对应的 flex-installer 与 lsdk-21.08 镜像包,解压后目录结构通常包含 boot/、kernel/、rfs/、tools/。安装交叉工具链时,将 gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu 解压到 /opt,并在 ~/.bashrc 中追加:
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH
执行 source ~/.bashrc 后,用 aarch64-none-linux-gnu-gcc -v 验证版本。若输出中显示 Target: aarch64-none-linux-gnu,说明工具链可用。Yocto SDK 则通过 source /opt/fsl-imx-xwayland/5.10-zeus/environment-setup-aarch64-poky-linux 激活,环境变量会自动设置 CC、CXX、SDKTARGETSYSROOT 等。
二、串口与网络调试环境
Layerscape 参考板通常通过板载 USB-to-UART 桥接芯片引出调试串口,默认参数为 115200-8-N-1,无硬件流控。在 Linux 宿主机上,设备节点一般为 /dev/ttyUSB0。使用 minicom 或 picocom 连接:
sudo picocom -b 115200 /dev/ttyUSB0
若使用 minicom,需先 sudo minicom -s 配置串口设备与波特率,保存为默认配置后再启动。串口是观察 U-Boot 打印、内核启动日志和登录提示的唯一可靠通道,务必在通电前先打开串口终端,避免错过早期启动信息。
网络调试环境包括两部分:一是宿主机与目标板之间的 TFTP/NFS 服务,用于快速加载内核、设备树和根文件系统;二是目标板自身的以太网接口配置。以 Ubuntu 宿主机为例,安装并配置 TFTP:
sudo apt install tftpd-hpa
sudo systemctl enable tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_DIRECTORY="/srv/tftp"
TFTP_OPTIONS="--secure --create"
将编译生成的 Image、fsl-ls1046a-rdb.dtb 放入 /srv/tftp。NFS 则通过 /etc/exports 导出根文件系统目录,例如 /srv/nfs/rootfs *(rw,sync,no_root_squash),再执行 sudo exportfs -ra。目标板侧需保证与宿主机在同一网段,例如宿主机 192.168.1.10/24,目标板 192.168.1.100/24。
三、目标板首次启动与登录
上电前确认启动模式拨码开关设置为 SD 卡或 QSPI 启动,具体取决于 RCW 烧录位置。以 SD 卡启动为例,将 LSDK 提供的 firmware_ls1046ardb_uboot_sdboot.img 写入 SD 卡:
sudo dd if=firmware_ls1046ardb_uboot_sdboot.img of=/dev/sdX bs=1M
sync
插入 SD 卡并上电,串口终端应依次出现 RCW 版本、U-Boot 版本、DDR 容量、CPU 频率等信息。若在 U-Boot 阶段看到 Hit any key to stop autoboot,按任意键进入命令行,设置 bootargs 与 bootcmd:
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.10
setenv bootargs 'console=ttyS0,115200 root=/dev/nfs rw nfsroot=192.168.1.10:/srv/nfs/rootfs ip=192.168.1.100:192.168.1.10:192.168.1.1:255.255.255.0:ls1046a:fm1-mac9:off'
tftp 0x80000000 Image
tftp 0x90000000 fsl-ls1046a-rdb.dtb
booti 0x80000000 - 0x90000000
内核启动后,若看到 VFS: Mounted root (nfs filesystem) 以及 systemd 或 init 启动日志,说明根文件系统挂载成功。最终出现 ls1046ardb login: 提示,输入默认用户名 root(无密码或按 BSP 文档设置),即可进入 Shell。此时执行 ip addr show fm1-mac9 应看到 192.168.1.100/24,执行 ping 192.168.1.10 应能收到宿主机回应。
dmesg | grep ttyUSB)、波特率是否为 115200、TX/RX 是否接反、板卡是否真正上电。若 U-Boot 能启动但 TFTP 超时,检查宿主机防火墙是否放行 69/udp,以及 serverip 与宿主机实际 IP 是否一致。
四、首次启动后的基本检查
登录成功后,建议按以下顺序确认环境可用性:查看内核版本 uname -a,确认 aarch64 架构;查看网络接口 ip link,确认 fm1-mac9 处于 UP 状态;查看存储 lsblk,确认 SD 卡或 eMMC 被识别;查看串口 ls /dev/ttyS*,确认调试串口节点存在。若需要固化启动,可将 bootargs 与 bootcmd 写入 U-Boot 环境并 saveenv,使目标板脱离宿主机 TFTP/NFS 也能从本地存储启动。