“MYZR-IMX8M-EK300 Linux-4.14.98 编译参考手册”的版本间的差异

来自明远智睿的wiki
跳转至: 导航搜索
第1行: 第1行:
[^_^]: MY-IMX8M-EK300 Linux-4.14.98 编译参考手册
+
## MY-i.MX8M Linux 编译手册
  
## **安装交叉编译工具链**
+
### 1. 安装交叉编译工具
* 创建安装目录 
+
 
<pre>
+
- 创建目录
=====> Input:
+
 
mkdir ~/my-work/03_toolchain -p
+
```shell
cd ~/my-work/03_toolchain
+
=> mkdir ~/myimx8m/gcc-tool -p
</pre>
+
=> cd ~/myimx8m/gcc-tool
* 下载交叉编译工具
+
```
<pre>
+
 
=====> Input:
+
- 下载交叉编译工具
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
+
 
</pre>
+
```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
<pre>
+
```
=====> Input:
+
 
tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/my-work/03_toolchain 
+
- 解压交叉编译工具
</pre>
+
 
* 创建交叉编译工具配置脚本
+
```shell
<pre>
+
=> tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/myimx8m/gcc-tool
=====> Input:
+
```
cat << EOF > ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
 
 +
- 创建交叉编译工具配置脚本
 +
 
 +
```shell
 +
=> vim gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
 +
 
 +
# 输入如下内容
 
#!/bin/sh
 
#!/bin/sh
 
+
export PATH=${HOME}/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:${PATH}
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 ARCH=arm64
 
export CROSS_COMPILE=aarch64-linux-gnu-
 
export CROSS_COMPILE=aarch64-linux-gnu-
EOF
+
```
 +
 
 +
```shell
 +
# 赋予脚本执行权限
 +
=> chmod +x gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
 +
```
 +
 
 +
- 配置交叉编译环境变量
 +
 
 +
```shell
 +
=> source ~/myimx8m/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
 +
```
 +
 
 +
- 验证安装
  
=====> Input:
+
```shell
chmod +x ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
+
=> ${CROSS_COMPILE}gcc -v
</pre>
 
* 配置交叉编译环境变量 
 
<pre>
 
=====> Input:
 
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env 
 
</pre>
 
* 检查安装 
 
<pre>
 
=====> Input:
 
${CROSS_COMPILE}gcc -v  
 
  
=====> Output:
 
 
Using built-in specs.
 
Using built-in specs.
 
COLLECT_GCC=aarch64-linux-gnu-gcc
 
COLLECT_GCC=aarch64-linux-gnu-gcc
第50行: 第57行:
 
Thread model: posix
 
Thread model: posix
 
gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)  
 
gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)  
</pre>
+
```
 +
 
 +
 
 +
 
 +
### 2. 内核编译
 +
 
 +
#### 2.1 准备源码
 +
 
 +
- 创建目录
 +
 
 +
```shell
 +
=> mkdir ~/myimx8m/source -p
 +
```
 +
 
 +
- 下载源码
 +
 
 +
  打开网盘到 “2.1\_OS\_Linux-4.14.98 -> 02_Source”,下载 “linux-4.14.98.*.tar.bz2”。 
 +
  把源码包复制到虚拟机的 “~/myimx8m/source”,并解压(解压命令如下):
 +
 
 +
```shell
 +
=> cd ~/myimx8m/source
 +
=> tar -xvf linux-4.14.98.*.tar.bz2
 +
```
 +
 
 +
- 进入内核源码目录
 +
 
 +
```shell
 +
=> cd ~/myimx8m/source/linux-4.14.98
 +
```
 +
 
 +
- 配置交叉编译环境
 +
 
 +
```shell
 +
=> source ~/myimx8m/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
 +
```
 +
 
 +
#### 2.2 编译内核目标文件
 +
 
 +
- 生成目标.config文件
 +
 
 +
```shell
 +
=> make myimx8mq_defconfig
 +
```
 +
 
 +
- 编译内核目标文件
 +
 
 +
```shell
 +
=> make Image
 +
```
 +
 
 +
- 复制内核目标文件
 +
 
 +
```shell
 +
=> cp arch/arm64/boot/Image ./
 +
```
 +
 
 +
#### 2.3 编译设备树目标文件
 +
 
 +
- 根据开发板型号规格配置编译环境变量
 +
 
 +
```shell
 +
=> EVK_MODE=myimx8mek300
 +
=> EVK_MPU=8mq
 +
```
 +
 
 +
- 执行编译命令
 +
 
 +
```shell
 +
# MIPI输出
 +
=> make myzr/${EVK_MODE}-${EVK_MPU}.dtb
 +
# HDMI输出
 +
=> make myzr/${EVK_MODE}-${EVK_MPU}-hdmi.dtb
 +
```
 +
 
 +
- 复制设备树目标文件
 +
 
 +
```shell
 +
=> cp arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}.dtb ./
 +
=> cp arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}-hdmi.dtb ./
 +
```
 +
 
 +
#### 2.4 编译内核模块包
 +
 
 +
- 执行编译
 +
 
 +
```shell
 +
=> make modules
 +
```
 +
 
 +
- 创建内核模块的保存目录
 +
 
 +
```shell
 +
=> mkdir modules
 +
```
 +
 
 +
- 安装内核模块到指定目录
 +
 
 +
```shell
 +
=> make modules_install headers_install INSTALL_MOD_PATH=./modules
 +
```
 +
 
 +
- 打包内核模块文件
 +
 
 +
```shell
 +
=> tar -cjf kernel-modules.tar.bz2 -C modules lib
 +
```
 +
 
 +
####  2.5 目标文件
 +
 
 +
**Image、\*.dtb 和 kernel-modules.tar.bz2 即编译得到的目标文件,保存这些文件**
 +
 
 +
 
 +
 
 +
### 3. 编译u-boot文件
 +
 
 +
#### 3.1  编译前的准备
 +
 
 +
- 下载u-boot源码
 +
 
 +
  打开网盘到 “2.1\_OS\_Linux-4.14.98 -> 02_Source”,下载 “u-boot-2018.03.*.tar.bz2”。
 +
 
 +
  把源码包复制到虚拟机的 “~/myimx8m/source”,并解压(解压命令如下):
 +
 
 +
```shell
 +
=> cd ~/myimx8m/source
 +
=> tar -xvf u-boot-2018.03.*.tar.bz2
 +
```
 +
 
 +
- 进入uboot源码目录
 +
 
 +
```shell
 +
=> cd ~/myimx8m/source/u-boot-2018.03
 +
```
 +
 
 +
- 配置交叉编译环境变量
 +
 
 +
```shell
 +
=> source ~/myimx8m/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
 +
```
 +
 
 +
#### 3.2 编译u-boot目标文件
 +
 
 +
- 根据开发板型号规格配置编译环境变量
  
<br>
+
```shell
## **编译内核文件**
+
=> EVK_MODE=myimx8mek300
### 编译前的准备
+
=> EVK_MPU=8mq
* 创建编译工作目录
+
=> EVK_MEM=2g
<pre>
+
```
=====> Input:
 
mkdir ~/my-work/02_source/ -p
 
</pre>
 
* 下载内核源码
 
打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “linux-4.14.98.*.tar.bz2”。 
 
把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下): 
 
<pre>
 
=====> Input:
 
cd ~/my-work/02_source
 
tar xf linux-4.14.98.*.tar.bz2
 
</pre>
 
* 进入内核源码目录 
 
<pre>
 
=====> Input:
 
cd ~/my-work/02_source/linux-4.14.98
 
</pre>
 
* 配置交叉编译环境变量 
 
<pre>
 
=====> Input:
 
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env 
 
</pre>
 
  
### 编译内核目标文件
+
**EVK_MEM:支持的设置为 2g、1g、3g、4g。**
* 生成目标 .config 文件
 
<pre>
 
=====> Input:
 
make myimx8mq_defconfig 
 
  
=====> Output:
+
- 生成目标 .config 文件
  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
 
#
 
</pre>
 
  
* 编译内核目标文件
+
```shell
<pre>
+
=> make ${EVK_MODE}-${EVK_MPU}-${EVK_MEM}_defconfig
=====> Input:
+
```
make Image
 
  
=====> Output:
+
- 编译u-boot目标文件
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
 
</pre>
 
  
* 复制内核目标文件
+
```shell
<pre>
+
=> make
=====> Input:
+
```
cp arch/arm64/boot/Image ./ 
 
</pre>
 
  
### 编译设备树目标文件
+
- 复制u-boot目标文件
* 设置 TARGETEVKMODE
 
<pre>
 
=====> Input:
 
TARGET_EVK_MODE=myimx8mek300-8mq
 
</pre>
 
**【说明】:TARGET_EVK_MODE 是根据开发板型号设置,可设置为 myimx8mevk-8mq, myimx8mek300-8mq** 
 
  
* 执行编译命令 
+
```shell
<pre>
+
=> cp arch/arm/dts/${EVK_MODE}-${EVK_MPU}.dtb ./
=====> Input:
+
```
make myzr/${TARGET_EVK_MODE}.dtb  
 
  
=====> Output:
+
#### 3.3 目标文件
  CHK    scripts/mod/devicetable-offsets.h
 
  DTC    arch/arm64/boot/dts/myzr/${TARGET_EVK_MODE}.dtb
 
</pre>
 
  
* 复制设备树目标文件
+
**${EVK_MODE}-${EVK_MPU}.dtb、u-boot-nodtb.bin 和 u-boot-spl.bin 即编译得到的目标文件,保存这三个文件,在下一步的 bootloader 编译需要用到**
<pre>
 
=====> Input:
 
cp arch/arm64/boot/dts/myzr/${TARGET_EVK_MODE}.dtb ./
 
</pre>
 
  
### 编译内核模块包 
+
#### 3.4 编译BootLoader
* 执行编译
 
<pre>
 
=====> Input:
 
make modules 
 
  
=====> Output:
+
##### 3.4.1 编译前的准备
  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
 
</pre>
 
  
* 创建内核模块的保存目录
+
- 下载BootLoader编译工具
<pre>
+
  打开网盘到 “2.1\_OS\_Linux-4.14.98 -> 02_Source”,下载 “mkimage-4.14.98.*.tar.bz2”。
=====> Input:
+
  把源码包复制到虚拟机的 “~/myimx8m/source/”,并解压(解压命令如下):
mkdir modules 
 
</pre>
 
  
* 安装内核模块到指定目录
+
```shell
<pre>
+
=> cd ~/myimx8m/source
=====> Input:
+
=> tar -xvf mkimage-4.14.98.*.tar.bz2
make modules_install headers_install INSTALL_MOD_PATH=./modules 
+
```
  
=====> Output:
+
- 进入工具目录
  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
 
</pre>
 
  
* 打包内核模块文件
+
```shell
<pre>
+
=> cd ~/myimx8m/source/mkimage-4.14.98
=====> Input:
+
```
tar cjvf kernel-modules.tar.bz2 -C modules lib   
 
</pre>
 
  
### 目标文件 
+
- 根据开发板型号规格配置编译环境变量
**Image、*.dtb 和 kernel-modules.tar.bz2 即编译得到的目标文件,保存这三个文件**
 
  
 +
```shell
 +
=> EVK_MODE=myimx8mek300
 +
=> EVK_MPU=8mq
 +
=> EVK_MEM=2g
 +
=> EVK_SOC=iMX8M
 +
```
  
## **编译u-boot文件**
+
**EVK_MEM:支持的设置为 2g、1g、3g、4g;**
### 编译前的准备
 
* 下载u-boot源码
 
打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “u-boot-2018.03.*.tar.bz2”。
 
把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下):
 
<pre>
 
=====> Input:
 
tar xf u-boot-2018.03.*.tar.bz2
 
</pre>
 
* 进入内核源码目录 
 
<pre>
 
=====> Input:
 
cd ~/my-work/02_source/u-boot-2018.03 
 
</pre>
 
* 配置交叉编译环境变量 
 
<pre>
 
=====> Input:
 
source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env 
 
</pre>
 
  
### 编译u-boot目标文件 
+
- 复制依赖文件
* 设置 TARGETEVKMODE 
 
<pre>
 
=====> Input:
 
TARGET_EVK_MODE=myimx8mek300-8mq 
 
</pre>
 
**【说明】:TARGET_EVK_MODE 是根据开发板型号设置,可设置为 myimx8mevk-8mq, myimx8mek300-8mq**
 
* 生成目标 .config 文件 
 
<pre>
 
=====> Input:
 
make ${TARGET_EVK_MODE}_defconfig
 
  
=====> Output:
+
   把u-boot编译得到的三个文件复制过来。
   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
 
#
 
</pre>
 
* 编译u-boot目标文件   
 
<pre>
 
=====> Input:
 
make
 
  
=====> Output:
+
```shell
scripts/kconfig/conf  --silentoldconfig Kconfig
+
=> cp ../u-boot-2018.03/u-boot-nodtb.bin \
  CHK    include/config.h
+
./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}-nodtb.bin
  UPD    include/config.h
+
=> cp ../u-boot-2018.03/spl/u-boot-spl.bin \
  CFG    u-boot.cfg
+
./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}-spl.bin
  GEN    include/autoconf.mk
+
=> cp ../u-boot-2018.03/${EVK_MODE}-${EVK_MPU}.dtb \
  ......
+
./iMX8M/${EVK_MODE}-${EVK_MPU}.dtb
  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
 
</pre>
 
* 复制u-boot目标文件     
 
<pre>
 
=====> Input:
 
cp arch/arm/dts/${TARGET_EVK_MODE}.dtb ./
 
</pre>
 
### 目标文件 
 
**${TARGETEVKMODE}.dtb、u-boot-nodtb.bin 和 u-boot-spl.bin 即编译得到的目标文件,保存这三个文件,在下一步的 bootloader 编译需要用到**
 
  
## **编译BootLoader** 
+
##### 3.4.2 编译BootLoader目标文件
### 编译前的准备 
 
* 下载BootLoader编译工具
 
打开网盘到 “2.1_OS_Linux-4.14.98 -> 02Source”,下载 “mkimage-imx4.14.98.*.tar.bz2”。
 
把源码包复制到虚拟机的 “~/my-work/02_source/”,并解压(解压命令如下): 
 
<pre>
 
=====> Input:
 
tar xf mkimage-imx_4.14.98.*.tar.bz2 
 
</pre>
 
* 进入工具目录
 
<pre>
 
=====> Input:
 
cd ~/my-work/02_source/mkimage-imx_4.14.98 
 
</pre>
 
* 设置 TARGETEVKMODE 
 
<pre>
 
=====> Input:
 
TARGET_EVK_MODE=myimx8mek300-8mq
 
</pre>
 
**【说明】:TARGET_EVK_MODE 是根据开发板型号设置,可设置为 myimx8mevk-8mq, myimx8mek300-8mq** 
 
* 复制依赖文件 把u-boot编译得到的三个文件复制过来
 
<pre>
 
=====> Input:
 
cp ../u-boot-2018.03/u-boot-nodtb.bin ./iMX8M/${TARGET_EVK_MODE}-nodtb.bin
 
cp ../u-boot-2018.03/spl/u-boot-spl.bin ./iMX8M/${TARGET_EVK_MODE}-spl.bin
 
cp ../u-boot-2018.03/${TARGET_EVK_MODE}.dtb ./iMX8M/${TARGET_EVK_MODE}.dtb
 
</pre>
 
  
### 编译BootLoader目标文件
+
- 输入编译指令
* 输入编译指令
 
<pre>
 
=====> Input:
 
make SOC=iMX8M ${TARGET_EVK_MODE%-*} OUTIMG=${TARGET_EVK_MODE}.bin 
 
</pre>
 
<pre>
 
=====> Input:
 
DATE=`date "+%m%d%H%M"`
 
sed -i s#0x.*#0x$DATE# src/build_info.h
 
</pre>
 
<pre>
 
=====> Input:
 
make SOC=iMX8M ${TARGET_EVK_MODE%-*} OUTIMG=${TARGET_EVK_MODE}.bin 
 
  
=====> Output:
+
```shell
Compiling mkimage_imx8
+
=> make SOC=${EVK_SOC} ${EVK_MODE} OUTIMG=${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin
PLAT=imx8mq HDMI=yes
+
```
Compiling mkimage_imx8
 
......
 
Second Loader IMAGE:
 
sld_header_off 0x57c00
 
sld_csf_off 0x58c20
 
sld hab block: 0x401fcdc0 0x57c00 0x1020
 
</pre>
 
* 复制BootLoader目标文件 
 
<pre>
 
=====> Input:
 
cp ./iMX8M/${TARGET_EVK_MODE}.bin ./ 
 
</pre>
 
### 目标文件 
 
**${TARGET_EVK_MODE}.bin 即编译得到的目标文件,保存这个文件** 
 
  
 +
- 复制BootLoader目标文件
  
 +
```shell
 +
=> cp ./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin ./${EVK_MODE}-${EVK_MPU}.bin
 +
```
  
## **Linux C程序编译**
+
##### 3.4.3 目标文件
### 准备源码
 
  打开wiki上的MYZR IMX6 系列网盘到 **5_MY-Demo -> MY-Linux-C-Demo**,下载 **hello.c** 文件,并复制到虚拟机。 
 
### 编译目标文件
 
<pre>
 
=====> Input:
 
${CROSS_COMPILE}gcc hello.c -o hello.out
 
</pre>
 
**Note: 如果有“未找到命令”的信息,是因为交叉编译工具链的配置没有生效,可以按前面 “交叉编译工具链安装” 中的 “source 工具链配置文件” 操作一次后再执行此步骤** 
 
### 运行Linux C目标程序
 
* 把编译得到的 hello.out 复制到开发板上 
 
* 在开发板上运行Linux C目标程序 
 
<pre>
 
=====> Input:
 
chmod +x ./hello.out
 
./hello.out
 
  
=====> Output:
+
**${EVK_MODE}-${EVK_MPU}.bin 即编译得到的目标文件,保存这个文件**
MYZR Technology Co.,Ltd.
 
 
   
 
   
 
Web:  http://www.myzr.com.cn/
 
Web:  http://www.myzr.com.cn/

2020年4月28日 (二) 18:03的版本

MY-i.MX8M Linux 编译手册

1. 安装交叉编译工具

  • 创建目录
<code class="shell">=> mkdir ~/myimx8m/gcc-tool -p
=> cd ~/myimx8m/gcc-tool
</code>
  • 下载交叉编译工具
<code class="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
</code>
  • 解压交叉编译工具
<code class="shell">=> tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C ~/myimx8m/gcc-tool
</code>
  • 创建交叉编译工具配置脚本
<code class="shell">=> vim gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env

# 输入如下内容
#!/bin/sh
export PATH=${HOME}/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:${PATH}
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
</code>
<code class="shell"># 赋予脚本执行权限
=> chmod +x gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
</code>
  • 配置交叉编译环境变量
<code class="shell">=> source ~/myimx8m/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
</code>
  • 验证安装
<code class="shell">=> ${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) 
</code>

2. 内核编译

2.1 准备源码

  • 创建目录
<code class="shell">=> mkdir ~/myimx8m/source -p
</code>
  • 下载源码 打开网盘到 “2.1_OS_Linux-4.14.98 -> 02_Source”,下载 “linux-4.14.98.*.tar.bz2”。
    把源码包复制到虚拟机的 “~/myimx8m/source”,并解压(解压命令如下):
<code class="shell">=> cd ~/myimx8m/source
=> tar -xvf linux-4.14.98.*.tar.bz2
</code>
  • 进入内核源码目录
<code class="shell">=> cd ~/myimx8m/source/linux-4.14.98
</code>
  • 配置交叉编译环境
<code class="shell">=> source ~/myimx8m/gcc-tool/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
</code>

2.2 编译内核目标文件

  • 生成目标.config文件
<code class="shell">=> make myimx8mq_defconfig
</code>
  • 编译内核目标文件
<code class="shell">=> make Image
</code>
  • 复制内核目标文件
<code class="shell">=> cp arch/arm64/boot/Image ./
</code>

2.3 编译设备树目标文件

  • 根据开发板型号规格配置编译环境变量
<code class="shell">=> EVK_MODE=myimx8mek300
=> EVK_MPU=8mq
</code>
  • 执行编译命令
<code class="shell"># MIPI输出
=> make myzr/${EVK_MODE}-${EVK_MPU}.dtb
# HDMI输出
=> make myzr/${EVK_MODE}-${EVK_MPU}-hdmi.dtb
</code>
  • 复制设备树目标文件
<code class="shell">=> cp arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}.dtb ./
=> cp arch/arm64/boot/dts/myzr/${EVK_MODE}-${EVK_MPU}-hdmi.dtb ./
</code>

2.4 编译内核模块包

  • 执行编译
<code class="shell">=> make modules
</code>
  • 创建内核模块的保存目录
<code class="shell">=> mkdir modules
</code>
  • 安装内核模块到指定目录
<code class="shell">=> make modules_install headers_install INSTALL_MOD_PATH=./modules
</code>
  • 打包内核模块文件
<code class="shell">=> tar -cjf kernel-modules.tar.bz2 -C modules lib
</code>

2.5 目标文件

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

3. 编译u-boot文件

3.1 编译前的准备

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

3.2 编译u-boot目标文件

  • 根据开发板型号规格配置编译环境变量
<code class="shell">=> EVK_MODE=myimx8mek300
=> EVK_MPU=8mq
=> EVK_MEM=2g
</code>

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

  • 生成目标 .config 文件
<code class="shell">=> make ${EVK_MODE}-${EVK_MPU}-${EVK_MEM}_defconfig
</code>
  • 编译u-boot目标文件
<code class="shell">=> make
</code>
  • 复制u-boot目标文件
<code class="shell">=> cp arch/arm/dts/${EVK_MODE}-${EVK_MPU}.dtb ./
</code>

3.3 目标文件

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

3.4 编译BootLoader

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

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

  • 复制依赖文件 把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>
3.4.2 编译BootLoader目标文件
  • 输入编译指令
<code class="shell">=> make SOC=${EVK_SOC} ${EVK_MODE} OUTIMG=${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin
</code>
  • 复制BootLoader目标文件
<code class="shell">=> cp ./iMX8M/${EVK_MODE}-${EVK_MPU}-${EVK_MEM}.bin ./${EVK_MODE}-${EVK_MPU}.bin
</code>
3.4.3 目标文件

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

Web: http://www.myzr.com.cn/ Wiki: http://wiki.myzr.com.cn/ BBS: http://bbs.myzr.com.cn/

Tel: 0756-3628023/3628021 E-mail: service@myzr.com.cn </pre>



--------------------------------------------------------------------------------
* 珠海明远智睿科技有限公司  
* ZhuHai MYZR Technology CO.,LTD.
* Latest Update: 2019/11/08  
* Supporter: Tang Bin
--------------------------------------------------------------------------------