如今,一般的 iMX量产项目使用的是 Yocto 工程。而真正的设计过程中常常是对部分进行更改设定,此时若仍对整个项目进行编译,操作时间过长,不方便。尤其针对 i.MX8 系列,在 Bootloader 中加入了一些组件,若要修改这些组件,使用单独编译方式创建 BSP会更加简单。本文针对 iMX8MQ,介绍了整个 BSP的创建,并着重讲述了 Bootloader的生成方式。
获取交叉工具链:
- 通过yocto 创建 SDK 先
- 执行 DISTRO=fsl-imx-wayland MACHINE=imx8mqevk source fsl-setup-release.sh –b imx8qxpmek_toolchain
- Bitbake core-image-mininal –c populate_sdk
- Cp fsl-imx-wayland-glibc-x86_64-core-image-minimal-aarch64-toolchain-4.14-sumo.sh 到主机
- 执行之,安装交叉工具链
Bootloader:
Imx8mq 的bootloader 由 U-boot、ATF、hdmi&ddr 配置文件组成
- uboot
- git clone https://source.codeaurora.org/external/imx/uboot-imx
- git checkout rel_imx_4.14.98_2.0.0_ga
- 执行下图命令编译u-boot
- 编译完成后,将获得制作 bootloader 所需的文件
- ATF(bl31.bin) :ARM trusted FW
git checkout rel_imx_4.14.98_2.0.0_ga
- 依次执行下图命令,在 imx-atf/imxqx/release 路径下生成bin 文件
- SECO:firmware container image
- wget https://www.nxp.com/lgfiles/NMG/MAD/TOCTO/firmware-imx-8.1.bin
- 执行下图命令,获取 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
- git clone https://source.codeaurora.org/external/imx/linux-imx
- git checkout imx_4.14.98_2.0.0.0_ga
- make defconfig
- LDFLAGS=”” CC=”$CC” make
- Then you will find
Arch/arm64/boot/dts/freescale/fsl-imx8mq-evk.dtb
Arch/arm64/boot/Image
Boot from SD Card
- $sudo fdisk /dev/sdb //根据实际设备节点
P
d
n
p
1
20480
102400
P
n
p
2
1228800
Default (enter)
P
w
- mkfs.vfat -n boot /dev/sdb1
mkfs.ext3 -L rootfs /dev/sdb2
- 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
参考资料:
- i.MX_Linux_User's_Guide
- i.MX_Porting_Guide
- i.MX_Reference_Manual
- i.MX_Linux_Release_Notes
评论