“MYZR-IMX8MM-EK240-8MM Linux-4.14.98 编译参考手册”的版本间的差异

来自明远智睿的wiki
跳转至: 导航搜索
(创建页面,内容为“# MY-IMX8MM-EK240-8MM Linux-4.14.98 编译参考手册 #### 安装交叉编译工具 * 创建安装目录 ```shell =====> 输入指令: mkdir ~/my-work/03_toolc...”)
 
第1行: 第1行:
 
# MY-IMX8MM-EK240-8MM Linux-4.14.98 编译参考手册
 
# MY-IMX8MM-EK240-8MM Linux-4.14.98 编译参考手册
 +
 +
### 主机环境
 +
 +
    ubuntu14.04(64bit),已经真机编译验证。
  
 
#### 安装交叉编译工具
 
#### 安装交叉编译工具
第5行: 第9行:
 
* 创建安装目录
 
* 创建安装目录
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
mkdir ~/my-work/03_toolchain -p
+
    mkdir ~/my-work/03_toolchain -p
  
 
=====> 输入指令:
 
=====> 输入指令:
cd ~/my-work/03_toolchain
+
  cd ~/my-work/03_toolchain
```
+
 
  
 
* 下载交叉编译工具
 
* 下载交叉编译工具
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
+
    wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
```
+
 
  
 
* 解压交叉编译工具
 
* 解压交叉编译工具
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/my-work/03_toolchain
+
    tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/my-work/03_toolchain
```
+
 
  
 
* 创建交叉编译工具配置脚本
 
* 创建交叉编译工具配置脚本
  
```shell
 
 
=====> 输入指令:
 
=====> 输入指令:
cat << EOF > ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
    cat << EOF > ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
#!/bin/sh
+
    #!/bin/sh
 +
 
 +
    export PATH=${HOME}/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:${PATH}
 +
    export ARCH=arm64
 +
    export CROSS_COMPILE=aarch64-linux-gnu-
 +
    EOF
 +
 
  
export PATH=${HOME}/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:${PATH}
 
export ARCH=arm64
 
export CROSS_COMPILE=aarch64-linux-gnu-
 
EOF
 
```
 
  
  
```shell
 
 
=====> 输入指令:
 
=====> 输入指令:
chmod +x ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
    chmod +x ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
```
+
 
  
 
* 配置交叉编译环境变量
 
* 配置交叉编译环境变量
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
    source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
```
+
 
  
 
* 检查安装
 
* 检查安装
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
${CROSS_COMPILE}gcc -v
+
    ${CROSS_COMPILE}gcc -v
  
 
=====> 输出信息:  
 
=====> 输出信息:  
Using built-in specs.
+
    Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
+
    COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/7.3.1/lto-wrapper
+
    COLLECT_LTO_WRAPPER=/home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/7.3.1/lto-wrapper
Target: aarch64-linux-gnu
+
    Target: aarch64-linux-gnu
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-7.3-2018.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
+
    Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-7.3-2018.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-  
Thread model: posix
+
    buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-  
gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)  
+
    release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-  
```
+
    build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-  
 +
    release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-  
 +
    gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
 +
    Thread model: posix
 +
    gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)  
 +
 
  
  
第76行: 第88行:
 
* 创建工作目录
 
* 创建工作目录
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
mkdir ~/my-work/02_source/ -p
+
    mkdir ~/my-work/02_source/ -p
```
+
 
  
 
* 下载内核源码   
 
* 下载内核源码   
第85行: 第97行:
 
   把源码包复制到虚拟机的 “~/my-work/02\_source/”,并解压(解压命令如下):
 
   把源码包复制到虚拟机的 “~/my-work/02\_source/”,并解压(解压命令如下):
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
cd ~/my-work/02_source
+
    cd ~/my-work/02_source
tar xf linux-4.14.98.*.tar.bz2
+
    tar xf linux-4.14.98.*.tar.bz2
```
+
 
  
 
* 进入内核源码目录
 
* 进入内核源码目录
  
```shell
 
 
=====> 输入指令:
 
=====> 输入指令:
cd ~/my-work/02_source/linux-4.14.98
+
    cd ~/my-work/02_source/linux-4.14.98
```
+
 
  
 
* 配置交叉编译环境变量
 
* 配置交叉编译环境变量
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
    source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
```
+
 
  
 
#### 5.2.2 编译内核目标文件
 
#### 5.2.2 编译内核目标文件
第109行: 第120行:
 
* 生成目标 .config 文件
 
* 生成目标 .config 文件
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
make myimx8mm_defconfig
+
    make myimx8mm_defconfig
 
 
make myimx8mq_defconfig
+
    make myimx8mq_defconfig
  
 
=====> 输出信息:  
 
=====> 输出信息:  
  HOSTCC  scripts/basic/fixdep
+
    HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
+
    HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
+
    SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
+
    SHIPPED scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
+
    HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
+
    HOSTLD  scripts/kconfig/conf
#
+
    #
# configuration written to .config
+
    # configuration written to .config
#
+
    #
```
+
 
  
 
**myimx8mm_defconfig 对应的开发板是 MY-IMX8MM-EK240。**
 
**myimx8mm_defconfig 对应的开发板是 MY-IMX8MM-EK240。**
第135行: 第146行:
 
* 编译内核目标文件
 
* 编译内核目标文件
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
make Image
+
    make Image
  
 
=====> 输出信息:  
 
=====> 输出信息:  
scripts/kconfig/conf  --silentoldconfig Kconfig
+
    scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK    include/config/kernel.release
+
      CHK    include/config/kernel.release
  UPD    include/config/kernel.release
+
      UPD    include/config/kernel.release
  WRAP    arch/arm/include/generated/asm/bitsperlong.h
+
      WRAP    arch/arm/include/generated/asm/bitsperlong.h
  ......
+
      ......
  AR      built-in.o
+
      AR      built-in.o
  LD      vmlinux.o
+
      LD      vmlinux.o
  MODPOST vmlinux.o
+
      MODPOST vmlinux.o
  KSYM    .tmp_kallsyms1.o
+
      KSYM    .tmp_kallsyms1.o
  KSYM    .tmp_kallsyms2.o
+
      KSYM    .tmp_kallsyms2.o
  LD      vmlinux
+
      LD      vmlinux
  SORTEX  vmlinux
+
      SORTEX  vmlinux
  SYSMAP  System.map
+
      SYSMAP  System.map
  OBJCOPY arch/arm64/boot/Image
+
      OBJCOPY arch/arm64/boot/Image
```
+
 
  
 
* 复制内核目标文件
 
* 复制内核目标文件
  
```shell
+
 
 
=====> 输入指令:
 
=====> 输入指令:
cp arch/arm64/boot/Image ./
+
    cp arch/arm64/boot/Image ./
```
+
 
  
 
#### 5.2.3 编译设备树目标文件
 
#### 5.2.3 编译设备树目标文件

2020年6月17日 (三) 14:06的版本

MY-IMX8MM-EK240-8MM Linux-4.14.98 编译参考手册

主机环境

ubuntu14.04(64bit),已经真机编译验证。

安装交叉编译工具

  • 创建安装目录

=====> 输入指令:

   mkdir ~/my-work/03_toolchain -p

=====> 输入指令:

  cd ~/my-work/03_toolchain
  • 下载交叉编译工具

=====> 输入指令:

   wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
  • 解压交叉编译工具

=====> 输入指令:

   tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/my-work/03_toolchain
  • 创建交叉编译工具配置脚本

=====> 输入指令:

   cat << EOF > ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
   #!/bin/sh
export PATH=${HOME}/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:${PATH}
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
EOF

=====> 输入指令:

   chmod +x ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
  • 配置交叉编译环境变量

=====> 输入指令:

   source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
  • 检查安装

=====> 输入指令:

   ${CROSS_COMPILE}gcc -v

=====> 输出信息:

   Using built-in specs.
   COLLECT_GCC=aarch64-linux-gnu-gcc
   COLLECT_LTO_WRAPPER=/home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/7.3.1/lto-wrapper
   Target: aarch64-linux-gnu
   Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-7.3-2018.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg- 
   buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make- 
   release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64- 
   build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make- 
   release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_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/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux- 
   gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
   Thread model: posix
   gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)

5.2 编译内核文件

5.2.1 编译前的准备

  • 创建工作目录

=====> 输入指令:

   mkdir ~/my-work/02_source/ -p
  • 下载内核源码
    打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “linux-4.14.98.*.tar.bz2”。
    把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下):

=====> 输入指令:

   cd ~/my-work/02_source
   tar xf linux-4.14.98.*.tar.bz2
  • 进入内核源码目录

=====> 输入指令:

   cd ~/my-work/02_source/linux-4.14.98
  • 配置交叉编译环境变量

=====> 输入指令:

   source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env

5.2.2 编译内核目标文件

  • 生成目标 .config 文件

=====> 输入指令:

   make myimx8mm_defconfig

   make myimx8mq_defconfig

=====> 输出信息:

   HOSTCC  scripts/basic/fixdep
   HOSTCC  scripts/kconfig/conf.o
   SHIPPED scripts/kconfig/zconf.tab.c
   SHIPPED scripts/kconfig/zconf.lex.c
   HOSTCC  scripts/kconfig/zconf.tab.o
   HOSTLD  scripts/kconfig/conf
   #
   # configuration written to .config
   #

myimx8mm_defconfig 对应的开发板是 MY-IMX8MM-EK240。

myimx8mq_defconfig 对应的开发板是 MY-IMX8M-EVK、MY-IMX8M-EK300 ;

  • 编译内核目标文件

=====> 输入指令:

   make Image

=====> 输出信息:

   scripts/kconfig/conf  --silentoldconfig Kconfig
     CHK     include/config/kernel.release
     UPD     include/config/kernel.release
     WRAP    arch/arm/include/generated/asm/bitsperlong.h
     ......
     AR      built-in.o
     LD      vmlinux.o
     MODPOST vmlinux.o
     KSYM    .tmp_kallsyms1.o
     KSYM    .tmp_kallsyms2.o
     LD      vmlinux
     SORTEX  vmlinux
     SYSMAP  System.map
     OBJCOPY arch/arm64/boot/Image
  • 复制内核目标文件

=====> 输入指令:

   cp arch/arm64/boot/Image ./

5.2.3 编译设备树目标文件

  • 根据开发板型号规格配置编译环境变量
<code class="shell">=====> 输入指令:
EVK_MODE=myimx8mmek240
EVK_MPU=8mm
</code>

EVK_MODE:支持的设置为 myimx8mevk、myimx8mek300、myimx8mmek240;

EVK_MPU:支持的设置为 8mq、8mm。

  • 执行编译命令
<code class="shell">=====> 输入指令:
make myzr/${EVK_MODE}-${EVK_MPU}.dtb

=====> 输出信息: 
  CHK     scripts/mod/devicetable-offsets.h
  DTC     arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}.dtb
</code>
  • 复制设备树目标文件
<code class="shell">=====> 输入指令:
cp arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}.dtb ./
</code>

5.2.4 编译内核模块包

  • 执行编译
<code class="shell">=====> 输入指令:
make modules

=====> 输出信息: 
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  ......
  LD [M]  sound/usb/snd-usb-audio.ko
  LD [M]  sound/usb/snd-usbmidi-lib.ko
</code>
  • 创建内核模块的保存目录
<code class="shell">=====> 输入指令:
mkdir modules
</code>
  • 安装内核模块到指定目录
<code class="shell">=====> 输入指令:
make modules_install headers_install INSTALL_MOD_PATH=./modules

=====> 输出信息: 
  INSTALL arch/arm64/crypto/aes-neon-blk.ko
  INSTALL arch/arm64/crypto/aes-neon-bs.ko
  ......
  INSTALL sound/usb/snd-usbmidi-lib.ko
  DEPMOD  4.14.98-g2ff648b
  CHK     include/generated/uapi/linux/version.h
</code>
  • 打包内核模块文件
<code class="shell">=====> 输入指令:
tar cjvf kernel-modules.tar.bz2 -C modules lib
</code>

5.2.5 目标文件

Image、*.dtb 和 kernel-modules.tar.bz2 即编译得到的目标文件,保存这三个文件

5.3 编译u-boot文件

5.3.1 编译前的准备

  • 下载u-boot源码
    打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “u-boot-2018.03.*.tar.bz2”。
    把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下):
<code class="shell">=====> 输入指令:
tar xf u-boot-2018.03.*.tar.bz2
</code>
  • 进入内核源码目录
<code class="shell">=====> 输入指令:
cd ~/my-work/02_source/u-boot-2018.03
</code>
  • 配置交叉编译环境变量
<code class="shell">=====> 输入指令:
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
</code>

5.3.2 编译u-boot目标文件

  • 根据开发板型号规格配置编译环境变量
<code class="shell">=====> 输入指令:
EVK_MODE=myimx8mmek240
EVK_MPU=8mm
EVK_MEM=2g
</code>

EVK_MODE:支持的设置为 myimx8mevk、myimx8mek300、myimx8mmek240;

EVK_MPU:支持的设置为 8mq、8mm;

EVK_MEM:支持的设置为 2g、1g、3g、4g。

  • 生成目标 .config 文件
<code class="shell">=====> 输入指令:
make ${EVK_MODE}-${EVK_MPU}-${EVK_MEM}_defconfig

=====> 输出信息: 
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
</code>
  • 编译u-boot目标文件
<code class="shell">=====> 输入指令:
make

=====> 输出信息: 
scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK     include/config.h
  UPD     include/config.h
  CFG     u-boot.cfg
  GEN     include/autoconf.mk
  ......
  LD      spl/u-boot-spl
  OBJCOPY spl/u-boot-spl-nodtb.bin
  COPY    spl/u-boot-spl.bin
  CFGS    arch/arm/mach-imx/spl_sd.cfg.cfgtmp
  MKIMAGE SPL
  CFGCHK  u-boot.cfg
</code>
  • 复制u-boot目标文件
<code class="shell">=====> 输入指令:
cp arch/arm/dts/${EVK_MODE}-${EVK_MPU}.dtb ./
</code>

5.3.3 目标文件

${EVK_MODE}-${EVK_MPU}.dtb、u-boot-nodtb.bin 和 u-boot-spl.bin 即编译得到的目标文件,保存这三个文件,在下一步的 bootloader 编译需要用到

5.4 编译BootLoader

5.4.1 编译前的准备

  • 下载BootLoader编译工具
    打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “mkimage-imx_4.14.98.*.tar.bz2”。
    把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下):
<code class="shell">=====> 输入指令:
tar xf mkimage-imx_4.14.98.*.tar.bz2
</code>
  • 进入工具目录
<code class="shell">=====> 输入指令:
cd ~/my-work/02_source/mkimage-imx_4.14.98
</code>
  • 根据开发板型号规格配置编译环境变量
<code class="shell">=====> 输入指令:
EVK_MODE=myimx8mmek240
EVK_MPU=8mm
EVK_MEM=2g
EVK_SOC=iMX8M
</code>

EVK_MODE:支持的设置为 myimx8mevk、myimx8mek300、myimx8mmek240;

EVK_MPU:支持的设置为 8mq、8mm;

EVK_MEM:支持的设置为 2g、1g、3g、4g;

EVK_SOC:支持的设置为 iMX8M、iMX8MM。

  • 复制依赖文件 把u-boot编译得到的三个文件复制过来。
<code class="shell">=====> 输入指令:
cp ../u-boot-2018.03/u-boot-nodtb.bin \
./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}-nodtb.bin

cp ../u-boot-2018.03/spl/u-boot-spl.bin \
./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}-spl.bin

cp ../u-boot-2018.03/${EVK_MODE}-${EVK_MPU}.dtb \
./iMX8M/${EVK_MODE}-${EVK_MPU}.dtb
</code>

5.4.2 编译BootLoader目标文件

  • 输入编译指令
<code class="shell">=====> 输入指令:
make SOC=${EVK_SOC} ${EVK_MODE} OUTIMG=${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin

=====> 输出信息: 
Compiling mkimage_imx8
......
Second Loader IMAGE:
 sld_header_off     0x57c00
 sld_csf_off        0x58c20
 sld hab block:     0x401fcdc0 0x57c00 0x1020
</code>
  • 复制BootLoader目标文件
<code class="shell">=====> 输入指令:
cp ./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin ./${EVK_MODE}-${EVK_MPU}.bin
</code>

5.4.3 目标文件

${EVK_MODE}-${EVK_MPU}.bin 即编译得到的目标文件,保存这个文件