i.MX8MQ BSP 单独编译

关键字 :i.MX BSP NXP

  如今,一般的 iMX量产项目使用的是 Yocto 工程。而真正的设计过程中常常是对部分进行更改设定,此时若仍对整个项目进行编译,操作时间过长,不方便。尤其针对 i.MX8 系列,在 Bootloader 中加入了一些组件,若要修改这些组件,使用单独编译方式创建 BSP会更加简单。本文针对 iMX8MQ,介绍了整个 BSP的创建,并着重讲述了 Bootloader的生成方式。

 

获取交叉工具链:

  1. 通过yocto 创建 SDK 先
  2. 执行 DISTRO=fsl-imx-wayland MACHINE=imx8mqevk source fsl-setup-release.sh –b imx8qxpmek_toolchain
  3. Bitbake core-image-mininal –c populate_sdk
  4. Cp fsl-imx-wayland-glibc-x86_64-core-image-minimal-aarch64-toolchain-4.14-sumo.sh 到主机
  5. 执行之,安装交叉工具链
 

  

Bootloader

Imx8mq 的bootloader 由 U-boot、ATF、hdmi&ddr 配置文件组成

  • uboot
  1. git clone https://source.codeaurora.org/external/imx/uboot-imx
  2. git checkout rel_imx_4.14.98_2.0.0_ga
  3. 执行下图命令编译u-boot
 

 

  1. 编译完成后,将获得制作 bootloader 所需的文件

     

 

  • ATF(bl31.bin) :ARM trusted FW
  1. git clone https://source.codeaurora.org/external/imx/imx-atf

git checkout rel_imx_4.14.98_2.0.0_ga

  1. 依次执行下图命令,在 imx-atf/imxqx/release 路径下生成bin 文件
 

  

  • SECO:firmware container image
  1. wget https://www.nxp.com/lgfiles/NMG/MAD/TOCTO/firmware-imx-8.1.bin
  2. 执行下图命令,获取 mx8qx-ahab-container.img
 

 

此步获取 imx8 系列固件,imxmq所需的 hdmi 和 ddr 配置文件也包含在其中

 

  • Bootloader(flash.bin) 生成

1.git clone https://source.codeaurora.org/external/imx/imx-mkimage

git checkout –b master rel_imx_4.14.98_2.0.0_ga

2.Copy u-boot-spl.bin from u-boot/spl/u-boot-spl.bin to imx-mkimage/iMX8M

 Copy u-boot-nodtb.bin from u-boot/u-boot-nodtb.bin to imx-mkimage/iMX8M/.

 Copy fsl-imx8mq-evk.dtb from u-boot/arch/arm/dts/ to imx-mkimage/iMX8M/.

 Copy bl31.bin from ARM Trusted Firmware (imx-atf) to imx-mkimage/iMX8M/.

 Copy firmware/hdmi/cadence/signed_hdmi_imx8m.bin from firmware-imx package to imx-mkimage/iMX8M/

Copy lpddr4_pmu_train_1d_dmem.bin,lpddr4_pmu_train_1d_imem.bin, lpddr4_pmu_train_2d_dmem.bin,   \


lpddr4_pmu_train_2d_imem.bin from firmware/ddr/synopsys of firmware-imx package to imx-mkimage/iMX8M/.

 

3.run  make SOC=iMX8M flash_evk to generate flash.bin (imx-boot image) with HDMI FW included.

 note:imx-mkimage is for hostside,make sure not in cross compile env, echo $CC to check it.

 

kernel

  1. git clone https://source.codeaurora.org/external/imx/linux-imx
  2. git checkout imx_4.14.98_2.0.0.0_ga
  3. make defconfig
  4. LDFLAGS=”” CC=”$CC” make
  5. Then you will find

Arch/arm64/boot/dts/freescale/fsl-imx8mq-evk.dtb

Arch/arm64/boot/Image

 

 

Boot from SD Card

  1. $sudo fdisk /dev/sdb //根据实际设备节点

P

d

n

p

1

20480

102400

P

n

p

2

1228800

Default  (enter)

P

w

 

  1. mkfs.vfat -n boot   /dev/sdb1

      mkfs.ext3  -L rootfs  /dev/sdb2

 

 

  1. sudo dd if=???/ flash.bin of=/dev/sdb  seek=33 bs=1K conv=fsync

cp arch/arm64/boot/dts/freescale/fsl-imx8qxp-mek.dtb /media/user/boot

cp arch/arm64/boot/Image  /media/user/boot

tar zxvf  rootfs.tar.gz  -C  /media/user/rootfs

 

 

参考资料:

  1. i.MX_Linux_User's_Guide
  2. i.MX_Porting_Guide
  3. i.MX_Reference_Manual
  4. i.MX_Linux_Release_Notes

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论