查看: 698|回复: 0

[分享] 手把手教你以Standalone方式编译FRDM-IMX93相关启动镜像

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3917

    主题

    7535

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39887
    最后登录
    2025-8-18
    发表于 2025-4-24 10:24:25 | 显示全部楼层 |阅读模式
    前言
    在之前的开箱视频中,我们展示了FRDM-IMX93开发板的各部分硬件及软件支持,其中提到FRDM-IMX93开发板目前支持运行YOCTO和Debian两种Linux操作系统。在本篇文章中,我们将手把手教你以Standalone方式编译 YOCTO Linux 操作系统下的u-boot, ATF, flash.bin 及 kernel 各部分启动镜像。本文综合参考了 “手把手教你以 Standalone 方式编译” 系列文章(详细编译步骤请点击 手把手教你以 Standalone 方式编译总结篇 查看)以及NXP官方文档 “UG10195-i.MX FRDM Software User Guide Rev 2.0”。


    软件环境
    本文基于BSP版本LF6.6.36_2.1.0 及 Ubuntu20.04或者以上的Host主机环境进行编译,使用了Ubuntu下的GCC工具链。
    相关工具链可以使用以下方法安装:
    sudo apt-get install gcc-aarch64-linux-gnu
    更多有关FRDM-IMX93的软硬件资料,可以从NXP官网如下链接下载:
    http://nxp.com/FRDM-IMX93
    U-boot 及 SPL 的完整编译步骤
    在之前的文章中,我们说明了U-boot及SPL的作用及编译步骤,手把手教你以 Standalone 方式编译(一)-  SPL, ATF, OPTEE 及 U-boot。与之前的Standalone编译步骤相似,我们首先需要搭建编译环境及目录
    1. /* 创建编译环境,后续的所有编译将在本目录下进行 */

    2. mkdir standalone_build_frdm

    3. cd ~/standalone_build_frdm

    4. /* Embedded Linux */

    5. mkdir embedded_Linux

    6. cd ~/standalone_build_frdm/embedded_Linux
    复制代码

    与之前不同的是,这里我们还需要下载并打板级相关补丁至源码中,从而对FRDM-IMX93进行板级支持
    1. /* 下载i.MX FRDM layer */

    2. wget https://github.com/nxp-imx-support/meta-imx-frdm/archive/refs/tags/imx-frdm-2.0.tar.gz -O imx-frdm-2.0.tar.gz

    3. tar -zxvf imx-frdm-2.0.tar.gz

    4. /* 下载u-boot软件 */

    5. git clone https://github.com/nxp-imx/uboot-imx -b lf_v2024.04

    6. cd uboot-imx

    7. git checkout -b b_lf-6.6.36-2.1.0 lf-6.6.36-2.1.0

    8. /* 打patch */

    9. git am ~/standalone_build_frdm/embedded_Linux/meta-imx-frdm-imx-frdm-2.0/meta-imx-bsp/recipes-bsp/u-boot/u-boot-imx/*.patch
    复制代码

    随后便可以执行我们的编译步骤
    1. /* 设置环境变量 */

    2. export CROSS_COMPILE=aarch64-linux-gnu-

    3. export ARCH=arm64

    4. /* 编译 */

    5. make distclean

    6. make imx93_11x11_frdm_defconfig

    7. make -j$(nproc)
    复制代码

    编译好的uboot.bin 可以直接在根目录~/standalone_build_frdm/embedded_Linux/uboot-imx 下找到。另外,编译好的u-boot-spl.bin 可以在 ~/standalone_build_frdm/embedded_Linux/uboot-imx/spl目录下找到。
    ATF 的完整编译步骤
    接下来,我们可以编译bootloader的另一组成部分,ATF。关于ATF 的详细说明同样可以在之前的文章中找到,手把手教你以 Standalone 方式编译(一)-  SPL, ATF, OPTEE 及 U-boot。
    1. cd ~/standalone_build_frdm

    2. wget https://github.com/nxp-imx/imx-atf/archive/refs/tags/lf-6.6.36-2.1.0.tar.gz -O atf-lf-6.6.36-2.1.0.tar.gz

    3. tar -zxvf atf-lf-6.6.36-2.1.0.tar.gz

    4. rm atf-lf-6.6.36-2.1.0.tar.gz

    5. cd imx-atf-lf-6.6.36-2.1.0

    6. export CROSS_COMPILE=aarch64-linux-gnu-

    7. export ARCH=arm64

    8. make distclean

    9. make PLAT=imx93 bl31
    复制代码

    编译生成后的bl31.bin可以在~/standalone_build_frdm/imx-atf-lf-6.6.36-2.1.0/build/imx93/release 目录下找到。
    打包 flash.bin
    在之前的文章,手把手教你以 Standalone 方式编译(三)- flash.bin中,我们详细说明了flash.bin的作用及打包源码说明。这里我们便针对FRDM-IMX93开发板的步骤进行演示。
    首先,我们同样需要下载编译所需的.bin文件
    1. cd ~/standalone_build_frdm

    2. /* 获取ELE firmware,对应版本号参考对应版本的BSP文档“IMX_LINUX_RELEASE_NOTES.pdf” 章节 “Table 3. BSP and multimedia standard packages” */

    3. wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-0.1.3-4e6938c.bin

    4. chmod +x firmware-ele-imx-0.1.3-4e6938c.bin

    5. ./firmware-ele-imx-0.1.3-4e6938c.bin

    6. rm firmware-ele-imx-0.1.3-4e6938c.bin

    7. /* 获取DDR等firmware,对应版本号参考对应版本的BSP文档“IMX_LINUX_RELEASE_NOTES.pdf”章节“Table 3. BSP and multimedia standard packages” */

    8. wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.25-27879f8.bin

    9. chmod +x firmware-imx-8.25-27879f8.bin

    10. ./firmware-imx-8.25-27879f8.bin

    11. rm firmware-imx-8.25-27879f8.bin
    复制代码

    接下来,便可以将之前编译好的文件复制到对应目录
    1. /* 获取打包软件imx-mkimage */

    2. git clone https://github.com/nxp-imx/imx-mkimage

    3. cd imx-mkimage

    4. git checkout -b b_lf-6.6.36-2.1.0 lf-6.6.36-2.1.0

    5. /* 将之前编译及从NXP获取的.bin 及 .img 文件分别放在对应文件夹中 */

    6. /* DDR firmware*/

    7. cp ~/standalone_build_frdm/firmware-imx-8.25-27879f8/firmware/ddr/synopsys/lpddr4_dmem_1d_v202201.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    8. cp ~/standalone_build_frdm/firmware-imx-8.25-27879f8/firmware/ddr/synopsys/lpddr4_dmem_2d_v202201.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    9. cp ~/standalone_build_frdm/firmware-imx-8.25-27879f8/firmware/ddr/synopsys/lpddr4_imem_1d_v202201.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    10. cp ~/standalone_build_frdm/firmware-imx-8.25-27879f8/firmware/ddr/synopsys/lpddr4_imem_2d_v202201.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    11. /* i.MX93 A1 ELE firmware*/

    12. cp ~/standalone_build_frdm/firmware-ele-imx-0.1.3-4e6938c/mx93a1-ahab-container.img ~/standalone_build_frdm/imx-mkimage/iMX93


    13. /* U-boot 和 SPL*/

    14. cp ~/standalone_build_frdm/embedded_Linux/uboot-imx/u-boot.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    15. cp ~/standalone_build_frdm/embedded_Linux/uboot-imx/spl/u-boot-spl.bin ~/standalone_build_frdm/imx-mkimage/iMX93

    16. /* ATF */

    17. cp ~/standalone_build_frdm/imx-atf-lf-6.6.36-2.1.0/build/imx93/release/bl31.bin ~/standalone_build_frdm/imx-mkimage/iMX93
    复制代码

    在将各部分镜像复制到对应目录后,我们可以使用以下命令编译flash.bin
    /* 执行如下命令打包 */
    make SOC=iMX93 flash_singleboot
    编译后的flash.bin可以在 ~/standalone_build_frdm/imx-mkimage/iMX93 目录下找到。
    21.png
    编译Kernel及DTB
    启动所需的另外一个部分便是 Linux Kernel的编译,如需了解更加详细的说明,请参考之前公众号文章,手把手教你以 Standalone 方式编译(二)- Kernel。
    首先,我们同样需要创建路径,下拉源码并打板级相关补丁
    1. cd ~/standalone_build_frdm/embedded_Linux
    2. /* 下载Kernel软件 */
    3. git clone https://github.com/nxp-imx/linux-imx -b lf-6.6.y
    4. cd linux-imx
    5. git checkout -b b_lf-6.6.36-2.1.0 lf-6.6.36-2.1.0
    6. /* 打patch */
    7. git am ~/standalone_build_frdm/embedded_Linux/meta-imx-frdm-imx-frdm-2.0/meta-imx-bsp/recipes-kernel/linux/linux-imx/*.patch
    复制代码

    打完补丁后,我们便可以使用以下命令正式编译
    1. /* 设置环境变量 */
    2. export CROSS_COMPILE=aarch64-linux-gnu-
    3. export ARCH=arm64
    4. /* 编译 */
    5. make imx_v8_defconfig
    6. make -j$(nproc)
    复制代码
    编译好的 Image 文件会被保存在 ~/standalone_build_frdm/linux-imx/arch/arm64/boot 目录下。在编译生成Image的同时,我们同样会得到针对FRDM-IMX93的dtb,其可以在~/standalone_build_frdm/linux-imx/arch/arm64/boot/dts/freescale 路径中找到。
    22.png
    编后语
    本文展示了对FRDM-IMX93板卡bootloader和kernel以Standalone方式进行编译和打包的方法。关于文章有任何疑问或者建议,欢迎留言或私信咨询。

    qiandao qiandao
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-19 02:48 , Processed in 0.075589 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表