如今,一般的 iMX量产项目使用的是 Yocto 工程。而真正的设计过程中常常是对部分进行更改设定,此时若仍对整个项目进行编译,操作时间过长,不方便。尤其针对 i.MX8 系列,在 Bootloader 中加入了一些组件,若要修改这些组件,使用 Standalone 方式创建 BSP
会更加简单。本文针对 iMX8QXP,介绍了整个 BSP的创建,并着重讲述了 Bootloader的生成方式。
一.获取交叉工具链:
- 通过yocto 创建 SDK 先
- 执行 DISTRO=fsl-imx-wayland MACHINE=imx8qxpmek 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:
iMX8QXP 的bootloader 由 U-boot、SCFW、ATF、SECO以及OPTEE 组成
- uboot
- git clone https://source.codeaurora.org/external/imx/uboot-imx
- git checkout rel_imx_4.14.98_2.0.0_ga
- 执行下图命令编译u-boot
- scfw: system controller firmware for imx8quadmax & imx8quadxplus ref boad
- 下载14.98_2.0.0_scfwkit-1.2.tar.gz
2.执行以下命令
3.从如下网址下载 gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
4.解压tar.gz ,如下图执行命令,生成 scfw_tcm.bin 文件
- 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
- OPTEE:不使用该组件,如需使用,详见参考资料。
- Bootloader(flash.bin) 生成
git checkout –b master rel_imx_4.14.98_2.0.0_ga
- Copy u-boot.bin from u-boot/u-boot.bin to imx-mkimage/iMX8QX/.
Copy scfw_tcm.bin from SCFW porting kit to imx-mkimage/iMX8QX/.
Copy bl31.bin from ARM Trusted Firmware (imx-atf) to imx-mkimage/iMX8QX/.
Copy the SECO firmware container image (ahab-container.img) to imx-mkimage/iMX8QX/.
Run make SOC=iMX8QX flash to generate flash.bin.
If using OPTEE, copy tee.bin to imx-mkimage/iMX8QX/ and copy u-boot/spl/u-boot-spl.bin to imx-mkimage/
iMX8QX/. Run make SOC=iMX8QX flash_spl to generate flash.bin.
note:imx-mkimage 是一个主机工具,确保使用时的环境变量, 建议使用echo $CC 检查
三.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-imx8qxp-mek.dtb
Arch/arm64/boot/Image
四.Boot from SD Card
- SD 卡分区
$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=32 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
评论