一.编译 uboot
- 获取 uboot 源码
git clone https://source.codeaurora.org/external/imx/uboot-imx cd uboot-imx |
2.选择编译版本
git tag |grep rel_imx_4.14.
git checkout rel_imx_4.14.98_2.0.0_ga
git status
3. 设置编译环境
source /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
前面安装的编译器路径
ls configs |grep imx8qm
make imx8qm_mek_defconfig
make
4.编译结束后的输出镜像
u-boot.bin
arch/arm/dts/fsl-imx8qm-mek.dtb
二、编译 kernel
1.获取源码
git checkout rel_imx_4.14.98_2.0.0_ga
git status
3.配置编译环境
source /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
make defconfig
make
三、编译 SCfirmware
- 下载 scfw tool:imx-scfw-porting-kit-1.2.tar.gz
wget https://cache.nxp.com/lgfiles/bsps/imx-scfw-porting-kit-1.2.tar.gz |
2.将下载的文件拷贝到当前目录解压
tar xzvf imx-scfw-porting-kit-1.2.tar.gz cd ./packages chmod a+x ./imx-scfw-porting-kit-1.2.bin sh ./imx-scfw-porting-kit-1.2.bin cd imx-scfw-porting-kit-1.2/src tar xzvf scfw_export_mx8qm_b0.tar.gz |
3.下载编译工具链
wget -P ./gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2?revision=2cc92fb5-3e0e-402d-9197-bdfc8224d8a5?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,6-2017-q2-update |
(E.g. Linux 64-bit File:gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 (95.90 MB) )
注意最新验证过的工具链版本是 2017-q2,不建议使用最新的工具链。
4.拷贝前面下载的工具链到 toolchain 目录下
mv gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 toolchain/ cd toolchain tar jxvf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 cd ../src/scfw_export_mx8qm_b0 export TOOLS=../../toolchain/ make qm B=mek R=B0 |
(如果需要看串口调试信息就增加 M=1 参数,U=2 表示使用 SCU 本身串口,注意重新编译之前要 make clean-qm 一下)
5.生成的 scfw 镜像在 imx-scfw-porting-kit-1.2/src/scfw_export_mx8qm_b0/build_mx8qm_b0/
四、编译 ATF
- 下载 ATF
git clone https://source.codeaurora.org/external/imx/imx-atf cd imx-atf git checkout rel_imx_4.14.98_2.0.0_ga git status source /home/host/imx8qm/linux/build_wayland/sdk/environment-setup-aarch64-poky-linux LDFLAGS="" make PLAT=imx8qm |
2.编译结束后的输出镜像
./build/imx8qm/release/bl31.bin
五、运行 imx-mkimage 脚本生成 flash.bin
另打开一个终端,不要与编译 uboot&kernel 同用一个终端
- 下载 imx-mkimage
git clone https://source.codeaurora.org/external/imx/imx-mkimage cd imx-mkimage git tag git checkout rel_imx_4.14.98_2.0.0_ga git status |
imx-mkimage 需要调用 host PC 的 GCC 工具,所以需要退出之前的 terminal。重新进入,从而退出之前 source 的交叉编译变量。
2.使用 wget 命令获得 mx8qm-ahab-container.img
wget http://www.freescale.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.1.bin chmod +x firmware-imx-8.1.bin && ./firmware-imx-8.1.bin --auto-accept |
mx8qm-ahab-container.img 位于 firmware-imx-8.1/firmware/seco/mx8qm-ahab-container.img
3.将 mx8qm-ahab-container.img, sc firmware bin, atf 和 uboot 拷贝至对应 iMX8QM 目录
cp firmware-imx-8.1/firmware/seco/mx8qm-ahab-container.img ./iMX8QM/ cp ../packages/imx-scfw-porting-kit-1.2/src/scfw_export_mx8qm_b0/build_mx8qm_b0/scfw_tcm.bin ./iMX8QM/ cp ../imx-atf/build/imx8qm/release/bl31.bin ./iMX8QM/ cp ../uboot-imx/u-boot.bin ./iMX8QM/ ls ./iMX8QM/ |
- 运行imx-mkimage 脚本生成 flash.bin 镜像
make SOC=iMX8QM flash_b0 |
- 结束后生成 flash.bin
./iMX8QM/flash.bin