ZHCACZ9A August 2023 – September 2024 AM620-Q1 , AM623 , AM625 , AM625-Q1 , AM625SIP , AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM62P-Q1
本节介绍了如何在配置完能够将 Linux 内核映像、器件树和文件系统载入 RAM 的外设后,立即加载这些组件。要测试内核配置,请通过 UART 加载 U-Boot 二进制文件,并按照前面几节中的提示退出自动引导。
此方法使用 AM62x Processor SDK 提供的内核映像和 initramfs 文件系统。下表指定了这些映像在 SDK 中的位置。
组件 | 路径 |
---|---|
内核映像 | TI_SDK/board-support/prebuilt-images/am62xx-evm/Image |
Ramdisk | TI_SDK/filesystem/am62xx-evm/tisdk-tiny-initramfs-am62xx-evm.rootfs.cpio |
需要编译内核器件树。虽然到目前为止,此器件树将与用于 U-Boot 的器件树完全相同,但必须在 Linux 内核存储库中编译它。
按照以下命令将编辑后的电路板器件树文件从 U-Boot 复制到 Linux 内核存储库并生成内核 DTB。
// copy board DTS from U-Boot to kernel
$ cp TI_U_BOOT/arch/arm/dts/k3-am625-<boardname>.dts TI_LINUX/arch/arm64/boot/dts/ti/
// from the root of TI_LINUX
$ make ARCH=arm64 CROSS_COMPILE="$CROSS_COMPILE_64" distclean
$ make ARCH=arm64 CROSS_COMPILE="$CROSS_COMPILE_64" defconfig ti_arm64_prune.config
$ make DTC_FLAGS=-@ ARCH=arm64 CROSS_COMPILE="$CROSS_COMPILE_64" ti/k3-am625-<boardname>.dtb
生成的 DTB 可以在 TI_LINUX/arch/arm64/boot/dts/ti/k3-am625-<boardname>.dtb 中找到。
内核映像、器件树和文件系统通过外设单独载入 RAM,或从非易失性存储复制。此过程取决于上述章节中在定制电路板上启用的外设或接口。需要将 Linux 映像复制到用于通过可用接口将内核组件转移到器件的外部介质或主机目录。在上面的部分中讨论了以太网,如果以太网正常工作,则可以使用以太网。在以下步骤中,使用 SD 卡是因为 TI 板上已有现成可用的 SD 卡,并且在电路板启动的这一阶段很容易使用。
要使用 SD 卡加载内核组件,需要分区 SD 卡。创建分区 SD 卡的一种方法是使用 SDK 提供的默认映像刷写 SD 卡。这是使用像 balenaEtcher 这样的应用程序完成的。默认映像位于 AM62x Processor SDK 下载页面。选择“Downloads”,然后选择 PROCESSOR-SDK-LINUX-AM62X 对应的“Download options”。下载 AM62x Yocto SD 卡映像并将其刷写到 SD 卡中。这将正确地对卡进行分区,并在卡上放置可正常工作版本的 SDK 文件系统。此时不会使用此文件系统。
为了避免混淆,请从引导分区中删除所有文件,并将内核组件复制到该位置。AM62x Processor SDK 指南中提供了 SD 卡刷写指南。
使用 UART 引导以进入 U-Boot 提示符并停止自动引导。对于用于将内核组件载入 RAM 中的外设,请使用 U-Boot 加载命令。请参阅 U-Boot 文档以确定为各个不同的外设使用哪些命令。以下示例说明了如何使用 SD 卡加载所需的内核组件。
/* using MMC device 0 (SD), partition 1 */
=> load mmc 0:1 $loadaddr Image
=> load mmc 0:1 $fdtaddr k3-am625-<boardname>.dtb
=> load mmc 0:1 $rdaddr tisdk-tiny-initramfs-am62xx-evm.rootfs.cpio
如果映像加载失败,则器件配置可能存在问题。返回到节 5.1以尝试重新配置器件。
现在,所需的内核组件已经加载到器件 RAM 中,下一步是指定内核初始化过程。对于主板启动,这是输入内核命令 shell 并使用 initramfs 作为文件系统。为此,请设置 bootargs 环境变量,该变量在 Linux 内核开始引导时从 U-Boot 传递到 Linux 内核。以下 U-Boot 命令用于设置此初始化过程。
=> setenv bootargs rdinit=/bin/sh
该器件现已准备好尝试使用复制到 RAM 的映像来引导内核。下面的命令会引导存储在 RAM 中的内核组件。
=> booti $loadaddr $rdaddr:0x$filesize $fdtaddr
Linux 内核将尝试引导。如果成功,内核引导日志将填充初始化消息,并最终进入内核命令 shell。为了访问系统和硬件信息,请使用以下命令装载以下 psuedo-filesystems。
# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devtmpfs none /dev
如果您无法进入内核命令 shell,有多种方法可以调试此问题。有关如何尝试正确重新配置外设以成功引导内核的方法,请参阅节 5.1。有关调试的帮助,请参阅节 7。
进入内核命令行可让您访问在构建器件树和调试引导故障时非常有用的工具。务必继续采用相同的迭代方法,即逐个启用每个外设,并在建立有效的配置后将代码提交到 U-Boot 存储库。节 5.1中提供的器件树配置方法以及下一节中的工具对于构建器件树非常有用,可用于初始化电路板上的所有外设。
完成电路板启动过程的常见后续步骤包括配置定制电路板以使用外部文件系统、启用高速数据功能以及自定义内核映像。有关更多详细信息,请参阅 AM62x Processor SDK 指南。