一、交叉编译环境搭建
1. 安装软件包
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm
2. 下载 repo
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
3. 设置 yocto 工程
git config --global user.name ipual
git config --global user.email ipual@wpi.com
git config --list
mkdir imx-yocto-bsp
cd imx-yocto-bsp
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml
repo sync
4. 编译 yocto 工具链
DISTRO=fsl-imx-wayland MACHINE=imx8qmmek source fsl-setup-release.sh -b build-wayland
bitbake meta-toolchain
编译完成会在 build-wayland-imx8qmmek/tmp/deploy/sdk 目录下生成如下文件
fsl-imx-wayland-glibc-x86_64-meta-toolchain-aarch64-toolchain-4.14-sumo.sh
5. 安装工具链
cd ./tmp/deploy/sdk
chmod +x fsl-imx-wayland-glibc-x86_64-meta-toolchain-aarch64-toolchain-4.14-sumo.sh
./fsl-imx-wayland-glibc-x86_64-meta-toolchain-aarch64-toolchain-4.14-sumo.sh
注:工具链安装目录可自行选择,eg:/home/host/imx8qm/linux/build_wayland/sdk
二、编译 uboot
1. 新建一个目录
mkdir standalone
2. 获取 uboot 源码
git clone https://source.codeaurora.org/external/imx/uboot-imx
cd uboot-imx
ls
3. 选择编译版本
git tag |grep rel_imx_4.14.
git checkout rel_imx_4.14.98_2.0.0_ga
git status
4. 设置编译环境
source /home/host/imx8qm/linux/build_wayland/sdk/environment-setup-aarch64-poky-linux
ls configs |grep imx8qm
make imx8qm_mek_defconfig
make
5. 编译结束后的输出镜像
u-boot.bin
arch/arm/dts/fsl-imx8qm-mek.dtb
三、编译 kernel
1. 进入目录
cd standalone
2. 获取源码
git clone https://source.codeaurora.org/external/imx/linux-imx
cd linux-imx
ls
git tag |grep rel_imx_4.14
git checkout rel_imx_4.14.98_2.0.0_ga
git status
3. 配置环境编译
source /home/host/imx8qm/linux/build_wayland/sdk/environment-setup-aarch64-poky-linux
make defconfig
LDFLAGS="" CC="$CC" make
LDFLAGS="" CC="$CC" make dtbs clean
LDFLAGS="" CC="$CC" make dtbs
4. 编译结束后的输出镜像
arch/arm64/boot/dts/freescale/fsl-imx8qm-mek.dtb
arch/arm64/boot/Image
四、编译 SCfirmware
1. 进入目录
cd standalone
2. 下载 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
3. 将下载的文件拷贝到当前目录解压
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
4. 下载编译工具链
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,不建议使用最新的工具链。
cd ..
mkdir toolchain
5. 拷贝前面下载的工具链到 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 一下)
6. 生成的 scfw 镜像在 imx-scfw-porting-kit-1.2/src/scfw_export_mx8qm_b0/build_mx8qm_b0/
五、编译 ATF
1. 进入目录
cd standalone
2. 下载 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
3. 编译结束后的输出镜像
./build/imx8qm/release/bl31.bin
六、运行 imx-mkimage 脚本生成 flash.bin
另打开一个终端,不要与编译 uboot&kernel 同用一个终端
1. 进入目录
cd standalone
2. 下载 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 的交叉编译变量。
3. 使用 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
4. 将 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/
5. 运行 imx-mkimage 脚本生成 flash.bin 镜像
make SOC=iMX8QM flash_b0
6. 结束后生成 flash.bin
./iMX8QM/flash.bin
七、参考资料
《MX8X_4.14.98_ga_kernel_V3-20190903_内核定制》
《i.MX_Linux_User's_Guide》
评论