编译手册

准备编译环境

安装依赖包

# =====> Input:
sudo apt install libssh-dev

安装 gcc-linaro 交叉编译工具

  1. 准备交叉编译工具文件

  可以网盘下载或在线下载。

  • 网盘下载方式:

  在网盘下载“gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz”后,把文件传输到 x86_64 Linux 主机中。

  • 在线下载方式:

# =====> Input:
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
  1. 执行安装

# =====> Input:

# 创建安装目录
mkdir ~/work/toolchain/gcc-linaro -p

# 安装指令
tar xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C ~/work/toolchain/gcc-linaro
  1. 创建交叉编译工具配置文件

# =====> Input:
# 创建配置文件
cat << EOF > ~/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.env
#!/bin/sh
export PATH=${HOME}/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:${PATH}
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
EOF

# 配置可执行权限
chmod +x ~/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.env
  1. 配置工具环境变量

# =====> Input:
source ~/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.env
  1. 检查安装

# =====> Input:
${CROSS_COMPILE}gcc -v
  1. 工具信息

使用内建 specs。
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/tangbin/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/7.5.0/lto-wrapper
目标:aarch64-linux-gnu
配置为:'/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.5-2019.12/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-arch=armv8-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=aarch64-linux-gnu --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu
线程模型:posix
gcc 版本 7.5.0 (Linaro GCC 7.5-2019.12)

编译 Boot 文件

编译 U-Boot 文件

  1. 准备 U-Boot 源码包文件

  ① 打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “uboot-2018.03*.tar.bz2”。
  ② 把文件 “uboot-2018.03*.tar.bz2” 传输到 x86_64 Linux 主机中。
  1. 解压源码包

# =====> Input:
tar xf uboot-2018.03*.tar.bz2 -C ~/work/linux/imx-linux-4.14.98
  1. 配置编译工具环境变量

# =====> Input:
~/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.env
  1. 目标文件编译

备注

编译 boot 文件也可以通过执行 ./make_uboot.sh并根据提示进行编译。

cd ~/work/linux/imx-linux-4.14.98/uboot-2018.03
make myimx8mmek200-2g_defconfig O=build-myimx8mmek240-2g
cd build-myimx8mmek240-2g; make -j24
  1. 目标文件

cd ..
mkdir image-uboot
cp build-myimx8mmek240-2g/spl/u-boot-spl.bin image-uboot
cp build-myimx8mmek240-2g/u-boot-nodtb.bin image-uboot
cp build-myimx8mmek240-2g/arch/arm/dts/myimx8mmek240.dtb image-uboot

编译 Boot 文件

  1. 准备 Boot 编译工具

把文件 “mkimage-4.14.98*.tar.bz2” 传输到 x86_64 Linux 主机中。

  1. 解压 Boot 编译工具

# =====> Input:
tar xf mkimage-4.14.98*.tar.bz2 -C ~/work/linux/imx-linux-4.14.98
  1. 编译 Boot 文件

备注

编译imkimage 文件也可以通过执行 ./make_boot.sh并根据提示进行编译。

cd mkimage-4.14.98
cp ../uboot-2018.03/image-uboot/u-boot-nodtb.bin ./iMX8M/myimx8mmek200-2g-nodtb.bin
cp ../uboot-2018.03/image-uboot/u-boot-spl.bin ./iMX8M/myimx8mmek200-2g-spl.bin
cp ../uboot-2018.03/image-uboot/myimx8mmek200.dtb ./iMX8M/myimx8mmek200.dtb
make myimx8mm SOC=iMX8MM DTB=myimx8mmek200.dtb OUTIMG=myimx8mmek200-2g.bin
  1. 目标文件说明

  iMX8M/myimx8mmek200-2g.bin 即目标文件,可以用编译出来的目标文件替换烧录工具的同名文件。

编译 Linux 内核

  1. 准备 Linux 源码包文件

  把文件 “linux-4.14.98*.tar.bz2” 传输到 x86_64 Linux 主机中。

  1. 解压源码包

# =====> Input:
tar xf linux-4.14.98*.tar.bz2 -C ~/work/linux/imx-linux-4.14.98
  1. 配置编译工具环境变量

# =====> Input:
~/work/toolchain/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.env
  1. Linux Image 文件编译

备注

编译kernel 文件也可以通过执行 make_kern.sh并根据提示进行编译。

  • 执行编译

# =====> Input:

cd ~/work/linux/imx-linux-4.14.98/linux-4.14.98

make myimx8mm_defconfig O=build_myimx8mm

cd build_myimx8mm; make Image -j24
  • Image 编译过程中输出信息类似如下:

MODPOST vmlinux.o
KSYM    .tmp_kallsyms1.o
KSYM    .tmp_kallsyms2.o
LD      vmlinux
SORTEX  vmlinux
SYSMAP  System.map
OBJCOPY arch/arm64/boot/Image
  1. Linux 设备树文件编译

  • 执行编译

# =====> Input:
make myzr/myimx8mmek200.dtb
  • 设备树首次编译成功时,输出信息类似如下:

DTC     arch/arm64/boot/dts/myzr/myimx8mmek200.dtb
  1. Linux 模块编译

  • 执行编译

# =====> Input:
make modules -j24
  • 模块编译成功输出信息类似如下:

......
LD [M]  sound/usb/snd-usb-audio.ko
LD [M]  sound/usb/snd-usbmidi-lib.ko
  • 安装内核模块到指定目录

# =====> Input:
if [ -d modules ]; then rm -rf modules; fi; mkdir modules
make modules_install INSTALL_MOD_PATH=./modules
  • 模块安装输出信息类似如下:

......
INSTALL sound/usb/snd-usbmidi-lib.ko
DEPMOD  4.14.98-gda548b57eb4f
  • 打包内核模块文件

# =====> Input:
tar cjf kernel-modules.tar.bz2 -C modules lib
  1. 目标文件说明

  Image, myimx8mmek200.dtb, kernel-modules.tar.bz2 即目标文件,可以用编译出来的目标文件替换烧录工具的同名文件。


--------------------------------------------------------------------------------
* 珠海明远智睿科技有限公司
* ZhuHai MYZR Technology CO.,LTD.
* Latest Update: 2023/4/26
* Supporter: Zhong JiaYi
--------------------------------------------------------------------------------