“MY-IMX6 Linux-3.14 编译手册”的版本间的差异

来自明远智睿的wiki
跳转至: 导航搜索
使编译配置文件生效
 
(未显示同一用户的23个中间版本)
第1行: 第1行:
 +
<div>
  
 
= '''文档说明''' =
 
= '''文档说明''' =
 +
----
 
== '''系统环境说明''' ==
 
== '''系统环境说明''' ==
 +
 
* 编译主机CPU架构:64位 <br>
 
* 编译主机CPU架构:64位 <br>
 +
 
* 编译主机系统:Linux <br>
 
* 编译主机系统:Linux <br>
 +
 
* Linux发行版:Ubuntu <br>
 
* Linux发行版:Ubuntu <br>
 +
 
* Ubuntu版本类型:服务器版 <br>
 
* Ubuntu版本类型:服务器版 <br>
 +
 
* Ubuntu版本号:12.04.5 <br>
 
* Ubuntu版本号:12.04.5 <br>
 +
 
* Ubuntu系统类型:x86-64 <br>
 
* Ubuntu系统类型:x86-64 <br>
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。 <br>
+
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。</span> <br>
 +
 
 +
 
 +
== '''操作说明''' ==
  
== '''操作说明 ''' ==
 
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
 +
 
2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br>
 
2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br>
 +
 
3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br>
 
3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br>
 +
 
4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br>
 
4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br>
 +
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
 +
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
 +
 +
 
== '''截图说明''' ==
 
== '''截图说明''' ==
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
 +
 +
 
== '''图片中的Linux命令''' ==
 
== '''图片中的Linux命令''' ==
 
在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。<br>
 
在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。<br>
 +
 
== <span style="color:red">'''重要信息说明'''</span> ==
 
== <span style="color:red">'''重要信息说明'''</span> ==
 
<span style="color:red">为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。<br></span>
 
<span style="color:red">为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。<br></span>
'''具体参见 [[MYZR虚拟机系统指导]]'''
+
 
 +
 
 +
'''具体参见 [[MYZR虚拟机系统指导|《MYZR虚拟机系统指导》]]'''
  
 
= '''准备源码及相关文件''' =
 
= '''准备源码及相关文件''' =
第29行: 第51行:
 
== '''源码文件''' ==
 
== '''源码文件''' ==
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板型号 || 支持的系统版本 || u-boot源码文件 || linux源码文件
+
!评估板型号 || u-boot源码文件 || linux源码文件
 
|-
 
|-
|MY-IMX6-EK200 || rowspan=4|Linux-3.14.52 || rowspan=4|u-boot-2015.04.tar.xz || rowspan=4|linux-3.14.52.tar.xz
+
|MY-IMX6-EK200 || rowspan=4|u-boot-2015.04.tar.xz || rowspan=4|linux-3.14.52.tar.xz
 
|-
 
|-
 
|MY-IMX6-EK314
 
|MY-IMX6-EK314
第41行: 第64行:
 
|MY-IMX6-EK140
 
|MY-IMX6-EK140
 
|}
 
|}
 +
  
 
== '''交叉编译工具文件''' ==
 
== '''交叉编译工具文件''' ==
交叉编译工具:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh<br>
+
Linux程序交叉编译工具:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz<br>
 +
 
 +
Linux交叉编译工具配置文件:gcc-linaro-arm-linux-gnueabihf-492-env<br>
 +
 
 +
QT5程序交叉编译工具:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh<br>
 +
 
  
 
== '''创建工作目录''' ==
 
== '''创建工作目录''' ==
第49行: 第78行:
 
$ mkdir ~/my-imx6/02_source –p <br>
 
$ mkdir ~/my-imx6/02_source –p <br>
 
[[文件:myimx6linux3.14_build_2.3.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.1.png]]<br>
 +
 
2)工具目录<br>
 
2)工具目录<br>
 
$ mkdir ~/my-imx6/03_tools –p<br>
 
$ mkdir ~/my-imx6/03_tools –p<br>
 
[[文件:myimx6linux3.14_build_2.3.0.2.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.2.png]]<br>
 +
 
3)镜像目录<br>
 
3)镜像目录<br>
 
$ mkdir ~/my-imx6/04_image –p<br>
 
$ mkdir ~/my-imx6/04_image –p<br>
第57行: 第88行:
 
$ mkdir ~/my-imx6/04_image/image-linux-31452 –p<br>
 
$ mkdir ~/my-imx6/04_image/image-linux-31452 –p<br>
 
[[文件:myimx6linux3.14_build_2.3.0.4.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.4.png]]<br>
 +
 
4)应用程序目录<br>
 
4)应用程序目录<br>
 
$ mkdir ~/my-demo<br>
 
$ mkdir ~/my-demo<br>
 
[[文件:myimx6linux3.14_build_2.3.0.5.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.5.png]]<br>
 +
  
 
= '''安装交叉编译工具链''' =
 
= '''安装交叉编译工具链''' =
说明:安装后的 fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh 可以用来编译 u-boot、linux 内核、linux 应用程序、QT5应用程序。
+
----
== '''安装步骤''' ==
+
== '''安装Linux交叉编译工具链''' ==
 +
1)进入交叉编译工具链目录<br>
 +
$ cd ~/my-imx6/03_tools/<br>
 +
 
 +
2)复制Linux交叉编译工具到目录<br>
 +
将gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
 +
 
 +
3)解压Linux交叉编译工具<br>
 +
$ tar xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz<br>
 +
[[文件:myimx6linux3.14_build_4.1.0.1.png]]<br>
 +
 
 +
4)复制交叉编译工具配置文件<br>
 +
将gcc-linaro-arm-linux-gnueabihf-492-env复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
 +
 
 +
5)检查安装<br>
 +
$ source gcc-linaro-arm-linux-gnueabihf-492-env<br>
 +
$ ${CROSS_COMPILE}gcc –v<br>
 +
[[文件:myimx6linux3.14_build_4.1.0.2.png]]<br>
 +
 
 +
 
 +
== '''安装QT5交叉编译工具(install QT5 cross compiler tool)''' ==
 
1)进入交叉编译工具链目录<br>
 
1)进入交叉编译工具链目录<br>
 
$ cd ~/my-imx6/03_tools/<br>
 
$ cd ~/my-imx6/03_tools/<br>
 
[[文件:myimx6linux3.14_build_4.2.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_4.2.0.1.png]]<br>
 +
 
2)执行安装命令<br>
 
2)执行安装命令<br>
 
$ sh fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh<br>
 
$ sh fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh<br>
 +
 
3)选择安装路径<br>
 
3)选择安装路径<br>
 
执行安装命令后会出现如下提示信息:<br>
 
执行安装命令后会出现如下提示信息:<br>
 
Enter target directory for SDK (default: /opt/fsl-imx-x11/3.14.52-1.1.0):<br>
 
Enter target directory for SDK (default: /opt/fsl-imx-x11/3.14.52-1.1.0):<br>
 
这时按“回车(Enter)”键,我们保持默认的安装路径。<br>
 
这时按“回车(Enter)”键,我们保持默认的安装路径。<br>
 +
 
4)确认安装路径<br>
 
4)确认安装路径<br>
 
之后,会提示如下信息:<br>
 
之后,会提示如下信息:<br>
第78行: 第134行:
 
这时输入“Y”并按“回车(Enter)”键表示确认。<br>
 
这时输入“Y”并按“回车(Enter)”键表示确认。<br>
 
[[文件:myimx6linux3.14_build_4.2.0.2.png]]<br>
 
[[文件:myimx6linux3.14_build_4.2.0.2.png]]<br>
 +
 
5)等待安装完成<br>
 
5)等待安装完成<br>
 
提示:安装过程大概需要几分钟的时间。
 
提示:安装过程大概需要几分钟的时间。
== '''检查安装''' ==
+
 
 +
6) 检查安装<br>
 
查看交叉编译工具链的版本信息以验证交叉编译工具链安装正常。<br>
 
查看交叉编译工具链的版本信息以验证交叉编译工具链安装正常。<br>
 
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi<br>
 
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi<br>
第86行: 第144行:
 
执行命令后会也出现类似如下的信息:<br>
 
执行命令后会也出现类似如下的信息:<br>
 
[[文件:myimx6linux3.14_build_4.2.0.3.png]]<br>
 
[[文件:myimx6linux3.14_build_4.2.0.3.png]]<br>
 +
  
 
= '''U-Boot编译''' =
 
= '''U-Boot编译''' =
 
----
 
----
 
== '''准备编译''' ==
 
== '''准备编译''' ==
 +
 
=== 复制源码包到开发主机中 ===
 
=== 复制源码包到开发主机中 ===
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
=== 解压u-boot源码包 ===
+
 
 +
 
 +
=== 解压u-boot源码包===
 
$ cd ~/my-imx6/02_source/<br>
 
$ cd ~/my-imx6/02_source/<br>
 
$ tar xf u-boot-2015.04.tar.xz<br>
 
$ tar xf u-boot-2015.04.tar.xz<br>
 
[[文件:myimx6linux3.14_build_5.1.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.1.2.1.png]]<br>
 +
 +
 
== '''编译''' ==
 
== '''编译''' ==
=== 检查交叉编译工具配置 ===
+
=== 使编译配置文件生效 ===
$ arm-poky-linux-gnueabi-gcc -v<br>
+
$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env<br>
如果执行命令后当前终端有输出“gcc version 4.9.2 (GCC)”,则表示交叉编译工具配置正常。<br>
+
[[文件:myimx6linux3.14_build_5.2.1.1.png]]<br>
否则需要执行下面的命令:<br>
+
 
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
 
  
 
=== 进入u-boot源码目录 ===
 
=== 进入u-boot源码目录 ===
 
$ cd ~/my-imx6/02_source/u-boot-2015.04<br>
 
$ cd ~/my-imx6/02_source/u-boot-2015.04<br>
 
[[文件:myimx6linux3.14_build_5.2.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.2.1.png]]<br>
 +
 +
 
=== 清除u-boot临时文件 ===
 
=== 清除u-boot临时文件 ===
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:myimx6linux3.14_build_5.2.3.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.3.1.png]]<br>
 +
 +
 
=== 配置u-boot ===
 
=== 配置u-boot ===
 
* 评估板及对应的 u-boot 编译配置:<br>
 
* 评估板及对应的 u-boot 编译配置:<br>
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
第151行: 第219行:
 
|i.MX6 Quad- 2G || Cortex-A9 || myimx6ek336-6q-2g_config
 
|i.MX6 Quad- 2G || Cortex-A9 || myimx6ek336-6q-2g_config
 
|-
 
|-
|rowspan=2|MY-IMX6-EK140  
+
|rowspan=4|MY-IMX6-EK140  
 
|i.MX 6UltraLite-256M || Cortex-A7 || myimx6ek140-6g_config
 
|i.MX 6UltraLite-256M || Cortex-A7 || myimx6ek140-6g_config
 
|-
 
|-
 
|i.MX 6UltraLite-512M || Cortex-A7 || myimx6ek140-6g-512m_config
 
|i.MX 6UltraLite-512M || Cortex-A7 || myimx6ek140-6g-512m_config
 +
|-
 +
|i.MX 6UltraLite Full - 256M|| Cortex-A7 || myimx6ek140p-6g_defconfig
 +
|-
 +
|i.MX 6UltraLite Full - 512M || Cortex-A7 || myimx6ek140p-6g-512m_defconfig
 
|}
 
|}
  
第161行: 第233行:
 
[[文件:myimx6linux3.14_build_5.2.4.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.4.1.png]]<br>
  
=== 执行编译 ===
+
=== 执行编译===
 
$ make <br>
 
$ make <br>
 
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br>
 
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br>
 
[[文件:myimx6linux3.14_build_5.2.5.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.5.1.png]]<br>
 +
 
* 编译完成<br>
 
* 编译完成<br>
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
 
[[文件:myimx6linux3.14_build_5.2.5.2.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.5.2.png]]<br>
 +
 +
 
== '''目标文件''' ==
 
== '''目标文件''' ==
 
* 编译文件<br>
 
* 编译文件<br>
第173行: 第248行:
 
$ ls <br>
 
$ ls <br>
 
[[文件:myimx6linux3.14_build_5.3.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.3.0.1.png]]<br>
 +
 
* 目标文件<br>
 
* 目标文件<br>
 
MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:<br>
 
MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:<br>
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!u-boot配置 || 目标文件
+
!u-boot配置<br>(u-boot configuration) || 目标文件<br>(target file)
 
|-
 
|-
 
|myimx6ek200-6qp_config || uboot-myimx6ek200-6qp.imx
 
|myimx6ek200-6qp_config || uboot-myimx6ek200-6qp.imx
第220行: 第296行:
 
|-
 
|-
 
|myimx6ek140-6g-512m_config || uboot-myimx6ek140-6g-512m.imx
 
|myimx6ek140-6g-512m_config || uboot-myimx6ek140-6g-512m.imx
 +
|-
 +
|myimx6ek140p-6g_defconfig || uboot-myimx6ek140p-6g.imx
 +
|-
 +
|myimx6ek140p-6g-512m_defconfig || uboot-myimx6ek140p-6g-512m.imx
 
|}
 
|}
  
第233行: 第313行:
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
=== 解压linux源码包 ===
+
 
 +
=== 解压linux源码包===
 
$ cd ~/my-imx6/02_source/<br>
 
$ cd ~/my-imx6/02_source/<br>
 
$ tar xf linux-3.14.52.tar.xz<br>
 
$ tar xf linux-3.14.52.tar.xz<br>
 
[[文件:myimx6linux3.14_build_6.1.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.1.2.1.png]]<br>
 +
 +
 
== '''内核编译配置''' ==
 
== '''内核编译配置''' ==
=== 检查交叉编译工具配置 ===
+
=== 使编译配置文件生效 ===
$ arm-poky-linux-gnueabi-gcc -v<br>
+
$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env<br>
如果执行命令后当前终端有输出“gcc version 4.9.2 (GCC)”,则表示交叉编译工具配置正常。<br>
+
[[文件:myimx6linux3.14_build_6.2.1.1.png]]<br>
否则需要执行下面的命令:<br>
+
 
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
 
  
=== 清除内核临时文件 ===
+
=== 清除内核临时文件===
 
* 进入linux源码目录<br>
 
* 进入linux源码目录<br>
 
$ cd ~/my-imx6/02_source/linux-3.14.52<br>
 
$ cd ~/my-imx6/02_source/linux-3.14.52<br>
 
[[文件:myimx6linux3.14_build_6.2.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.2.1.png]]<br>
 +
 
* 清除临时文件<br>
 
* 清除临时文件<br>
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:myimx6linux3.14_build_6.2.2.2.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.2.2.png]]<br>
 +
 +
 
=== 内核配置 ===
 
=== 内核配置 ===
 +
*内核配置文件
 +
{| class="wikitable"
 +
|-
 +
!评估板型号 || 配置文件
 +
|-
 +
|MY-IMX6-EK200 || rowspan=3|myimx6_defconfig
 +
|-
 +
|MY-IMX6-EK314
 +
|-
 +
|MY-IMX6-EK336
 +
|-
 +
|MY-IMX6-EK140 || myimx6ul_defconfig
 +
|}
 
$ make myimx6_defconfig <br>
 
$ make myimx6_defconfig <br>
 +
如果是编译 MY-IMX6-EK140 的内核,请使用 $ make myimx6ul_defconfig <br>
 +
这里以 myimx6_defconfig 为例。<br>
 
[[文件:myimx6linux3.14_build_6.2.3.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.3.1.png]]<br>
 +
 +
 
== '''编译内核''' ==
 
== '''编译内核''' ==
 
* 执行编译 <br>
 
* 执行编译 <br>
 
$ make zImage <br>
 
$ make zImage <br>
 
[[文件:Myimx6linux3.14_build_6.3.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.1.png]]<br>
 +
 
* 编译完成<br>
 
* 编译完成<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.2.png]]<br>
 +
 
* 目标文件 <br>
 
* 目标文件 <br>
 
arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br>
 
arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br>
 
$ ls arch/arm/boot/zImage -la <br>
 
$ ls arch/arm/boot/zImage -la <br>
 
[[文件:Myimx6linux3.14_build_6.3.0.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.3.png]]<br>
 +
 
注意:我们烧录及启动的内核文件名为“zImage-myimx6”,所以我们需要把zImage复制为zImage-myimx6。<br>
 
注意:我们烧录及启动的内核文件名为“zImage-myimx6”,所以我们需要把zImage复制为zImage-myimx6。<br>
 
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-31452/zImage-myimx6 <br>
 
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-31452/zImage-myimx6 <br>
 
[[文件:Myimx6linux3.14_build_6.3.0.4.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.4.png]]<br>
 +
 +
 
== '''编译设备树''' ==
 
== '''编译设备树''' ==
 
评估板型号规格与设备树文件对应关系见下表:<br>
 
评估板型号规格与设备树文件对应关系见下表:<br>
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板主型号
+
! 评估板主型号|| CPU类型-内存容量 || 对应的设备树文件
!CPU类型-内存容量
+
|-
!对应的设备树文件
+
|rowspan=7|MY-IMX6-EK200
 +
| i.MX 6QuadPlus - 1G || myimx6ek200-6qp.dtb
 
|-
 
|-
|rowspan=7|MY-IMX6-EK200
+
| i.MX 6QuadPlus - 2G || myimx6ek200-6qp-2g.dtb
|i.MX 6QuadPlus - 1G
 
|myimx6ek200-6qp.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 1G || myimx6ek200-6q.dtb
|i.MX 6QuadPlus - 2G
 
|myimx6ek200-6qp-2g.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 2G || myimx6ek200-6q-2g.dtb
|i.MX6 Quad - 1G
 
|myimx6ek200-6q.dtb
 
 
|-
 
|-
+
| i.MX6 DualLite - 1G || myimx6ek200-6u.dtb
|i.MX6 Quad - 2G
 
|myimx6ek200-6q-2g.dtb
 
 
|-
 
|-
+
| i.MX 6Solo - 512M || myimx6ek200-6s.dtb
|i.MX6 DualLite - 1G
 
|myimx6ek200-6u.dtb
 
 
|-
 
|-
+
| i.MX 6Solo - 1G || myimx6ek200-6s-1g.dtb
|i.MX 6Solo - 512M
 
|myimx6ek200-6s.dtb
 
 
|-
 
|-
+
|rowspan=5|MY-IMX6-EK314
|i.MX 6Solo - 1G
+
| i.MX 6QuadPlus - 1G || myimx6ek314-6qp.dtb
|myimx6ek200-6s-1g.dtb
 
 
|-
 
|-
|rowspan=5|MY-IMX6-EK314
+
| i.MX 6QuadPlus - 2G || myimx6ek314-6qp-2g.dtb
|i.MX 6QuadPlus - 1G
 
|myimx6ek314-6qp.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 1G || myimx6ek314-6q.dtb
|i.MX 6QuadPlus - 2G
 
|myimx6ek314-6qp-2g.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 2G || myimx6ek314-6q-2g.dtb
|i.MX6 Quad - 1G
 
|myimx6ek314-6q.dtb
 
 
|-
 
|-
+
| i.MX6 DualLite - 1G || myimx6ek314-6u.dtb
|i.MX6 Quad - 2G
 
|myimx6ek314-6q-2g.dtb
 
 
|-
 
|-
+
|rowspan=4|MY-IMX6-EK336
|i.MX6 DualLite - 1G
+
| i.MX 6QuadPlus - 1G || myimx6ek336-6qp.dtb
|myimx6ek314-6u.dtb
 
 
|-
 
|-
|rowspan=4|MY-IMX6-EKPOB
+
| i.MX 6QuadPlus - 2G || myimx6ek336-6qp-2g.dtb
|i.MX 6QuadPlus - 1G
 
|myimx6ekpob-6qp.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 1G || myimx6ek336-6q.dtb
|i.MX 6QuadPlus - 2G
 
|myimx6ekpob-6qp-2g.dtb
 
 
|-
 
|-
+
| i.MX6 Quad - 2G || myimx6ek336-6q-2g.dtb
|i.MX6 Quad - 1G
 
|myimx6ekpob-6q.dtb
 
 
|-
 
|-
+
|rowspan=6|MY-IMX6-EK140
|i.MX6 Quad - 2G
+
| i.MX 6UltraLite-256M || myimx6ek140-6g.dtb
|myimx6ekpob-6q-2g.dtb
 
 
|-
 
|-
|rowspan=2|MY-IMX6-EK140
+
| i.MX 6UltraLite-512M || myimx6ek140-6g-512m.dtb
|i.MX 6UltraLite-256M
 
|myimx6ek140-6g.dtb
 
 
|-
 
|-
+
| i.MX 6UltraLite Full - 256M (2eth) || myimx6ek140p-6g.dtb
|i.MX 6UltraLite-512M
+
|-
|myimx6ek140-6g-512m.dtb
+
| i.MX 6UltraLite Full - 256M (8uart)|| myimx6ek140p-6g-8uart.dtb
 +
|-
 +
| i.MX 6UltraLite Full - 512M (2eth) || myimx6ek140p-6g-512m.dtb
 +
|-
 +
| i.MX 6UltraLite Full - 512M (8uart) || myimx6ek140p-6g-512m-8uart.dtb
 
|}
 
|}
  
第351行: 第433行:
 
$ make myimx6ek200-6q.dtb<br>
 
$ make myimx6ek200-6q.dtb<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.1.png]]<br>
 +
 
*目标文件  <br>
 
*目标文件  <br>
 
使用ls命令可查看编译得到的目标设备树文件信息: <br>
 
使用ls命令可查看编译得到的目标设备树文件信息: <br>
 
$ ls arch/arm/boot/dts/myimx6ek*.dtb <br>
 
$ ls arch/arm/boot/dts/myimx6ek*.dtb <br>
 
[[文件:Myimx6linux3.14_build_6.4.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.2.png]]<br>
 +
 
复制设备树文件到镜像目录 <br>
 
复制设备树文件到镜像目录 <br>
 
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-31452/ <br>
 
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-31452/ <br>
第363行: 第447行:
 
$ make modules<br>
 
$ make modules<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.1.png]]<br>
 +
 
* 安装模块到指定目录<br>
 
* 安装模块到指定目录<br>
 
$ make modules_install INSTALL_MOD_PATH=./modules<br>
 
$ make modules_install INSTALL_MOD_PATH=./modules<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.2.png]]<br>
 +
 
* 打包模块文件<br>
 
* 打包模块文件<br>
 
$ cd modules<br>
 
$ cd modules<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.3.png]]<br>
 +
 
* 复制模块包到镜像目录<br>
 
* 复制模块包到镜像目录<br>
注意:这里把modules.tar.bz2复制为 kernel-modules.tar.bz2<br>
+
{| class="wikitable"
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-31452/kernel-modules.tar.bz2<br>
+
|-
[[文件:Myimx6linux3.14_build_6.5.0.4.png]]<br>
+
!评估板型号 || 目标模块包
= '''其他编译''' =
+
|-
----
+
|MY-IMX6-EK200 || rowspan=3|kernel-modules-myimx6.tar.bz2
== '''WIFI模块编译''' ==
+
|-
1)下载源码<br>
+
|MY-IMX6-EK314
在网盘中下载WIFI的源码包rtl8188EUS_linux_v4.3.0.9_15178.20150907.tar.xz,并将源码放到 ~/my-imx6/02_source目录。<br>
+
|-
2)解压源码<br>
+
|MY-IMX6-EK336
$ tar xf rtl8188EUS_linux_v4.3.0.9_15178.20150907.tar.xz<br>
+
|-
[[文件:Myimx6linux3.14_build_7.1.0.1.png]]<br>
+
|MY-IMX6-EK140 || kernel-modules-myimx6g.tar.bz2
3)编译<br>
+
|}
$ cd rtl8188EUS_linux_v4.3.0.9_15178.20150907/<br>
+
 
$ make<br>
+
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-31452/kernel-modules-myimx6.tar.bz2<br>
[[文件:Myimx6linux3.14_build_7.1.0.2.png]]<br>
+
注意:如果是编译内核时配置文件使用的是 myimx6_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6.tar.bz2;如果是编译内核时配置文件使用的是 myimx6ul_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6g.tar.bz2<br>
4)编译完成<br>
+
 
[[文件:Myimx6linux3.14_build_7.1.0.3.png]]<br>
+
 
5)将模块移动到内核的模块目录<br>
 
[[文件:Myimx6linux3.14_build_7.1.0.4.png]]<br>
 
6)重新打包模块<br>
 
$ cd ~/my-imx6/02_source/linux-3.14.52/modules/<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
 
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-31452/kernel-modules.tar.bz2<br>
 
[[文件:Myimx6linux3.14_build_7.1.0.5.png]]<br>
 
 
= '''应用程序编译''' =
 
= '''应用程序编译''' =
 
----
 
----
 
== '''Linux应用程序编译''' ==
 
== '''Linux应用程序编译''' ==
 +
 
=== 编写应用程序  ===
 
=== 编写应用程序  ===
 
* 创建应用程序的源码目录和Linux-3.14.52的可执行程序目录<br>
 
* 创建应用程序的源码目录和Linux-3.14.52的可执行程序目录<br>
 
$ mkdir ~/my-demo/source_code -p<br>
 
$ mkdir ~/my-demo/source_code -p<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.1.png]]<br>
 +
 
$ mkdir ~/my-demo/bin-l31452 -p<br>
 
$ mkdir ~/my-demo/bin-l31452 -p<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.2.png]]<br>
 +
 
* 编写源代码<br>
 
* 编写源代码<br>
 
$ cd ~/my-demo/source_code<br>
 
$ cd ~/my-demo/source_code<br>
 
$ vi hello.c<br>
 
$ vi hello.c<br>
 +
 
写入以下代码并保存 <br>
 
写入以下代码并保存 <br>
 
#include <stdio.h> <br>
 
#include <stdio.h> <br>
第418行: 第502行:
 
* 查看代码 <br>
 
* 查看代码 <br>
 
[[文件:Myimx6linux3.14_build_8.1.1.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.3.png]]<br>
 +
 
$ cat hello.c<br>
 
$ cat hello.c<br>
  
第424行: 第509行:
 
$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env<br>
 
$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.1.png]]<br>
 +
 
* 编译 <br>
 
* 编译 <br>
 
$ ${CROSS_COMPILE}gcc hello.c -o hello.out<br>
 
$ ${CROSS_COMPILE}gcc hello.c -o hello.out<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.2.png]]<br>
 
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br>
 
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br>
 +
 
* 目标文件 <br>
 
* 目标文件 <br>
 
$ file hello.out<br>
 
$ file hello.out<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.3.png]]<br>
 
可以看到目标文件 hello.out 的属性。<br>
 
可以看到目标文件 hello.out 的属性。<br>
 +
 +
 
=== 保存目标可执行文件 ===
 
=== 保存目标可执行文件 ===
 
$ mv hello.out ~/my-demo/bin-l31452/<br>
 
$ mv hello.out ~/my-demo/bin-l31452/<br>
 
[[文件:Myimx6linux3.14_build_8.1.3.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.3.1.png]]<br>
 +
  
 
== '''QT应用程序编译 ''' ==
 
== '''QT应用程序编译 ''' ==
=== 准备QT5程序代码 ===
+
=== 准备QT5程序代码 ===
 
提示:这里我们使用“Qt5_NMap_CarouselDemo_1.0.tgz”进行演示。 <br>
 
提示:这里我们使用“Qt5_NMap_CarouselDemo_1.0.tgz”进行演示。 <br>
 
1)将代码包复制到Linux开发主机 <br>
 
1)将代码包复制到Linux开发主机 <br>
 
将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”复制到“~/my-demo/source_code”。<br>
 
将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”复制到“~/my-demo/source_code”。<br>
 
这一步自己采取相应的操作完成。<br>
 
这一步自己采取相应的操作完成。<br>
 +
 
2)解压代码包 <br>
 
2)解压代码包 <br>
 
$ cd ~/my-demo/source_code<br>
 
$ cd ~/my-demo/source_code<br>
 
$ tar zxf Qt5_NMap_CarouselDemo_1.0.tgz<br>
 
$ tar zxf Qt5_NMap_CarouselDemo_1.0.tgz<br>
 
[[文件:Myimx6linux3.14_build_8.2.1.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.1.1.png]]<br>
 +
 +
 
=== 编译QT5程序  ===
 
=== 编译QT5程序  ===
 
提示:我们将使用命令行编译。<br>
 
提示:我们将使用命令行编译。<br>
1)打开一个新的字符终端 <br>
+
1)进入代码目录 <br>
说明:QT5程序的编译会设置一些环境变量,为了避免影响到其它终端,我们使用一个新的字符终端。这样也避免出现不必要的错误。<br>
 
2)进入代码目录 <br>
 
 
提示:我们前面将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”解压在“~/my-demo/source_code”。<br>
 
提示:我们前面将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”解压在“~/my-demo/source_code”。<br>
 
$ cd ~/my-demo/source_code/Qt5_NMap_CarouselDemo_1.0/<br>
 
$ cd ~/my-demo/source_code/Qt5_NMap_CarouselDemo_1.0/<br>
3)配置编译环境变量<br>
+
 
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi<br>
+
2)检查QMake<br>
[[文件:Myimx6linux3.14_build_8.2.2.1.png]]<br>
 
4)检查QMake<br>
 
 
$ qmake –v<br>
 
$ qmake –v<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.2.png]]<br>
5)生成Makefile文件<br>
+
如果执行命令后当前终端有输出“QMake version 3.0”,则表示交叉编译工具配置正常。
 +
否则需要执行下面的命令:<br>
 +
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi<br>
 +
 
 +
3)生成Makefile文件<br>
 
$ qmake<br>
 
$ qmake<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.3.png]]<br>
 
执行qmake后通过ls可以看到多了Makefile文件<br>
 
执行qmake后通过ls可以看到多了Makefile文件<br>
6)编译<br>
+
 
 +
4)编译<br>
 
$ make<br>
 
$ make<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.4.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.4.png]]<br>
7)目标文件<br>
+
 
 +
5)目标文件<br>
 
* 可执行文件<br>
 
* 可执行文件<br>
 
$ file Qt5_NMap_CarouselDemo<br>
 
$ file Qt5_NMap_CarouselDemo<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.5.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.5.png]]<br>
 +
 
* 资源文件<br>
 
* 资源文件<br>
 
QT5程序的运行需要对应的qml文件和content<br>
 
QT5程序的运行需要对应的qml文件和content<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.6.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.2.6.png]]<br>
 +
 +
 
=== 保存目标可执行文件 ===
 
=== 保存目标可执行文件 ===
 
由于QT5程序的运行需要对应的qml文件和content文件,这里我们为了操作的简洁,直接将整个目录复制到目标目录<br>
 
由于QT5程序的运行需要对应的qml文件和content文件,这里我们为了操作的简洁,直接将整个目录复制到目标目录<br>
 
$ cp ../Qt5_NMap_CarouselDemo_1.0 ~/my-demo/bin-l31452/ -a<br>
 
$ cp ../Qt5_NMap_CarouselDemo_1.0 ~/my-demo/bin-l31452/ -a<br>
 
[[文件:Myimx6linux3.14_build_8.2.3.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.2.3.1.png]]<br>
 +
 +
 
== '''应用程序打包''' ==
 
== '''应用程序打包''' ==
 
=== 说明 ===
 
=== 说明 ===
 
烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看《烧录手册》。<br>
 
烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看《烧录手册》。<br>
 +
 +
 
=== 打包应用程序 ===
 
=== 打包应用程序 ===
 
1)打包<br>
 
1)打包<br>
 
这里我们将整个my-demo目录打包。<br>
 
这里我们将整个my-demo目录打包。<br>
 
$ cd ~<br>
 
$ cd ~<br>
$ tar cJf my-demo.tar.bz2 my-demo<br>
+
$ tar cjf my-demo.tar.bz2 my-demo<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.1.png]]<br>
 +
 
2)复制应用程序包为目标烧录文件<br>
 
2)复制应用程序包为目标烧录文件<br>
 
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/<br>
 
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.2.png]]<br>
 +
 +
 
= '''目标烧录文件''' =
 
= '''目标烧录文件''' =
 
----
 
----
 
至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。<br>
 
至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。<br>
 
现在可以参照《烧录手册》烧录我们自己编译出来的image了。<br>
 
现在可以参照《烧录手册》烧录我们自己编译出来的image了。<br>
 +
 +
 
== '''在评估板上运行应用程序 ''' ==
 
== '''在评估板上运行应用程序 ''' ==
 
烧录系统之后,对评估板重新上电,登录系统后并执行以下命令。<br>
 
烧录系统之后,对评估板重新上电,登录系统后并执行以下命令。<br>
 
# /home/root/my-demo/bin-l31452/hello.out<br>
 
# /home/root/my-demo/bin-l31452/hello.out<br>
 
# export DISPLAY=:0 <br>
 
# export DISPLAY=:0 <br>
# /home/root/my-demo/bin-l31452/Qt5_NMap_CarouselDemo_1.0/Qt5_NMap_CarouselDemo<br>
+
# /home/root/my-demo/bin-l31452/Qt5_NMap_CarouselDemo_1.0/Qt5_NMap_CarouselDemo-platform eglfs<br>
 +
 
 +
 
 
= '''附:文件系统编译''' =
 
= '''附:文件系统编译''' =
 
注意及说明:<br>
 
注意及说明:<br>
 
1)原始编译的过程中的下载量会超过4G。(提示:可以使用我们下载好的一些文件,以减少下载量,节约时间,在7.4中会说到)。 <br>
 
1)原始编译的过程中的下载量会超过4G。(提示:可以使用我们下载好的一些文件,以减少下载量,节约时间,在7.4中会说到)。 <br>
 +
 
2)编译主机的网络连接最好使用能访问www.fackbook.com 的网络,不然可能会受到境内防火墙的限制而无法下载编译需要的软件包。 <br>
 
2)编译主机的网络连接最好使用能访问www.fackbook.com 的网络,不然可能会受到境内防火墙的限制而无法下载编译需要的软件包。 <br>
3)初次编译需要的时间根据网络状态及编译主机的配置需要2小时到无限时间(经粗略统计除去下载时间,在16核CPU、16G内存的主机上编译QT5系统用了大约100分钟。) <br>
+
 
 +
3)初次编译需要的时间根据网络状态及编译主机的配置需要2小时到无限时间(经粗略统计除去下载时间,在16核CPU、16G内存的主机上编译QT5系统用了大约100分钟)。 <br>
 +
 
 
客户请根据实际情况决定是否自行编译文件系统或使用我们提供的文件系统。如果我们提供的文件系统能够满足需求,建议不要自行编译,因为编译过程可能会出现很多错误。<br>
 
客户请根据实际情况决定是否自行编译文件系统或使用我们提供的文件系统。如果我们提供的文件系统能够满足需求,建议不要自行编译,因为编译过程可能会出现很多错误。<br>
 +
 +
 
== '''准备编译 ''' ==
 
== '''准备编译 ''' ==
=== 安装软件包 ===
+
=== 安装软件包===
 
说明,Yocto编译依赖一些软件包,所以需要在开发主机上进行安装。 <br>
 
说明,Yocto编译依赖一些软件包,所以需要在开发主机上进行安装。 <br>
 
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo \<br>
 
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo \<br>
 
gcc-multilib build-essential chrpath  socat <br>
 
gcc-multilib build-essential chrpath  socat <br>
 
[[文件:Myimx6linux3.14_build_10.1.1.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.1.1.1.png]]<br>
 +
 
$ sudo apt-get install libsdl1.2-dev xterm  sed cvs subversion \<br>
 
$ sudo apt-get install libsdl1.2-dev xterm  sed cvs subversion \<br>
 
coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc \<br>
 
coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc \<br>
第515行: 第630行:
 
autoconf automake groff curl lzop asciidoc <br>
 
autoconf automake groff curl lzop asciidoc <br>
 
[[文件:Myimx6linux3.14_build_10.1.1.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.1.1.2.png]]<br>
 +
 
$ sudo apt-get install uboot-mkimage <br>
 
$ sudo apt-get install uboot-mkimage <br>
 
[[文件:Myimx6linux3.14_build_10.1.1.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.1.1.3.png]]<br>
 +
 +
 
=== 准备源码 ===
 
=== 准备源码 ===
 
1)下载源码 <br>
 
1)下载源码 <br>
 
在网盘中下载 yocto__imx-3.14.52-1.1.0_ga.tar.xz<br>
 
在网盘中下载 yocto__imx-3.14.52-1.1.0_ga.tar.xz<br>
 +
 
2)创建工作目录 <br>
 
2)创建工作目录 <br>
 
$ mkdir ~/yocto<br>
 
$ mkdir ~/yocto<br>
 
[[文件:Myimx6linux3.14_build_10.1.2.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.1.2.1.png]]<br>
 +
 
3)将源码包复制到工作目录<br>
 
3)将源码包复制到工作目录<br>
 
复制“yocto__imx-3.14.52-1.1.0_ga.tar.xz”到“~/my-imx6/02_source”。<br>
 
复制“yocto__imx-3.14.52-1.1.0_ga.tar.xz”到“~/my-imx6/02_source”。<br>
 
这一步骤自己采取相应的方式进行 <br>
 
这一步骤自己采取相应的方式进行 <br>
 +
 
4) 解压源码包<br>
 
4) 解压源码包<br>
 
$ cd ~/yocto/ <br>
 
$ cd ~/yocto/ <br>
 
$ tar xf yocto__imx-3.14.52-1.1.0_ga.tar.xz<br>
 
$ tar xf yocto__imx-3.14.52-1.1.0_ga.tar.xz<br>
 
[[文件:Myimx6linux3.14_build_10.1.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.1.2.2.png]]<br>
 +
 +
 
=== 准备编译需要的软件包 ===
 
=== 准备编译需要的软件包 ===
 
提示1:如果自己网络状况好且能访问境外网站,可以跳过这一节内容。 <br>
 
提示1:如果自己网络状况好且能访问境外网站,可以跳过这一节内容。 <br>
第535行: 第658行:
 
提示3:限于网络上传速度的影响及软件包的更新,我们下载的软件包目录中可能不包括<br>
 
提示3:限于网络上传速度的影响及软件包的更新,我们下载的软件包目录中可能不包括<br>
 
编译需要的全部软件包,但是编译中缺少的软件包编译程序会在编译过程中自行下载。 <br>
 
编译需要的全部软件包,但是编译中缺少的软件包编译程序会在编译过程中自行下载。 <br>
 +
 
1)下载软件包 <br>
 
1)下载软件包 <br>
在网盘中下载downloads文件夹(目前该文件夹大小在6 ~ 8G)。 <br>
+
在网盘中下载downloads文件夹(位置:MYZR-通用资源/yocto/downloads。目前该文件夹大小在6 ~ 8G)。 <br>
 +
 
 
2)将软件包复制到BSP目录 <br>
 
2)将软件包复制到BSP目录 <br>
 
将downloads移动到 “~/yocto/imx-3.14.52-1.1.0_ga” 目录<br>
 
将downloads移动到 “~/yocto/imx-3.14.52-1.1.0_ga” 目录<br>
 
这一步自己采取相应的方法完成。 <br>
 
这一步自己采取相应的方法完成。 <br>
 +
 
== '''编译 ''' ==
 
== '''编译 ''' ==
 
=== 更新BSP ===
 
=== 更新BSP ===
 
$ cd ~/yocto/imx-3.14.52-1.1.0_ga/<br>
 
$ cd ~/yocto/imx-3.14.52-1.1.0_ga/<br>
 
[[文件:Myimx6linux3.14_build_10.2.1.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.1.1.png]]<br>
 +
 
$ ./bin/repo sync<br>
 
$ ./bin/repo sync<br>
 
[[文件:Myimx6linux3.14_build_10.2.1.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.1.2.png]]<br>
=== 编译配置 ===
+
 
 +
 
 +
=== 编译配置===
 
$ DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b build-x11<br>
 
$ DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b build-x11<br>
 
[[文件:Myimx6linux3.14_build_10.2.2.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.2.1.png]]<br>
 +
 
执行命令后终端会接收到输出的信息,一直按“空格”,在最后的对话中输入y <br>
 
执行命令后终端会接收到输出的信息,一直按“空格”,在最后的对话中输入y <br>
 
[[文件:Myimx6linux3.14_build_10.2.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.2.2.png]]<br>
 +
 
示例:Do you accept the EULA you just read? (y/n) y<br>
 
示例:Do you accept the EULA you just read? (y/n) y<br>
 +
 +
 
=== 编译QT5文件系统 ===
 
=== 编译QT5文件系统 ===
 
1)执行编译命令<br>
 
1)执行编译命令<br>
 
$ bitbake fsl-image-qt5<br>
 
$ bitbake fsl-image-qt5<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.1.png]]<br>
 +
 
提示:整个编译过程除去下载时间,在16核CPU、16G内存的主机上需要1小时左右。 <br>
 
提示:整个编译过程除去下载时间,在16核CPU、16G内存的主机上需要1小时左右。 <br>
 +
 
2)目标文件 <br>
 
2)目标文件 <br>
 
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2<br>
 
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.2.png]]<br>
 +
 
3)复制目标文件<br>
 
3)复制目标文件<br>
 
我们烧录的QT5系统文件名为“distro-fsl-image-qt5.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image-qt5.tar.bz2”。<br>
 
我们烧录的QT5系统文件名为“distro-fsl-image-qt5.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image-qt5.tar.bz2”。<br>
 
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image-qt5.tar.bz2<br>
 
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image-qt5.tar.bz2<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.3.3.png]]<br>
 +
 +
 
=== 编译Linux文件系统 ===
 
=== 编译Linux文件系统 ===
 
1)执行编译命令<br>
 
1)执行编译命令<br>
 
$ bitbake fsl-image-machine-test<br>
 
$ bitbake fsl-image-machine-test<br>
 +
 
2)目标文件 <br>
 
2)目标文件 <br>
 
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2<br>
 
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2<br>
 
[[文件:Myimx6linux3.14_build_10.2.4.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.4.1.png]]<br>
 +
 
3)复制目标文件<br>
 
3)复制目标文件<br>
 
我们烧录的QT5系统文件名为“distro-fsl-image.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image.tar.bz2”。<br>
 
我们烧录的QT5系统文件名为“distro-fsl-image.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image.tar.bz2”。<br>
 
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image.tar.bz2<br>
 
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image.tar.bz2<br>
 
[[文件:Myimx6linux3.14_build_10.2.4.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.4.2.png]]<br>
 +
 +
 
=== 编译QT5的交叉编译工具 ===
 
=== 编译QT5的交叉编译工具 ===
 
如果不需要自定义QT5交叉编译工具,则跳过本小节。<br>
 
如果不需要自定义QT5交叉编译工具,则跳过本小节。<br>
 +
 
1)执行编译命令<br>
 
1)执行编译命令<br>
 
$ bitbake meta-toolchain-qt5<br>
 
$ bitbake meta-toolchain-qt5<br>
 +
 
2)目标文件<br>
 
2)目标文件<br>
 
在“./tmp/deploy/sdk/”目录下可以找到我们编译生成的目标文件。<br>
 
在“./tmp/deploy/sdk/”目录下可以找到我们编译生成的目标文件。<br>
 
[[文件:Myimx6linux3.14_build_10.2.5.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_10.2.5.1.png]]<br>
 +
 
3)保存目标文件<br>
 
3)保存目标文件<br>
 
将编译得到的“fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh”复制到“~/my-imx6/03_tools/”<br>
 
将编译得到的“fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh”复制到“~/my-imx6/03_tools/”<br>
 +
 
4)安装QT5交叉编译工具<br>
 
4)安装QT5交叉编译工具<br>
 
如果需要使用自己编译的QT5交叉编译工具,需要先删除已经安装的QT5交叉编译工具。并参照前面“安装配置交叉编译工具链”中的“安装QT5交叉编译工具”进行安装。<br>
 
如果需要使用自己编译的QT5交叉编译工具,需要先删除已经安装的QT5交叉编译工具。并参照前面“安装配置交叉编译工具链”中的“安装QT5交叉编译工具”进行安装。<br>
 +
 +
</div>

2018年9月10日 (一) 17:24的最新版本

目录

文档说明


系统环境说明

  • 编译主机CPU架构:64位
  • 编译主机系统:Linux
  • Linux发行版:Ubuntu
  • Ubuntu版本类型:服务器版
  • Ubuntu版本号:12.04.5
  • Ubuntu系统类型:x86-64

  注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。


操作说明

1)文档中以“$”开头的行,其后是Linux命令。

2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。

3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。

4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。

5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。

6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。


截图说明

为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。


图片中的Linux命令

在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。

重要信息说明

为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。


具体参见 《MYZR虚拟机系统指导》

准备源码及相关文件


源码文件

评估板对应的Linux版本及对应的源码文件见下表:

评估板型号 u-boot源码文件 linux源码文件
MY-IMX6-EK200 u-boot-2015.04.tar.xz linux-3.14.52.tar.xz
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140


交叉编译工具文件

Linux程序交叉编译工具:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz

Linux交叉编译工具配置文件:gcc-linaro-arm-linux-gnueabihf-492-env

QT5程序交叉编译工具:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh


创建工作目录

1)源码目录
$ mkdir ~/my-imx6/02_source –p
Myimx6linux3.14 build 2.3.0.1.png

2)工具目录
$ mkdir ~/my-imx6/03_tools –p
Myimx6linux3.14 build 2.3.0.2.png

3)镜像目录
$ mkdir ~/my-imx6/04_image –p
Myimx6linux3.14 build 2.3.0.3.png
$ mkdir ~/my-imx6/04_image/image-linux-31452 –p
Myimx6linux3.14 build 2.3.0.4.png

4)应用程序目录
$ mkdir ~/my-demo
Myimx6linux3.14 build 2.3.0.5.png


安装交叉编译工具链


安装Linux交叉编译工具链

1)进入交叉编译工具链目录
$ cd ~/my-imx6/03_tools/

2)复制Linux交叉编译工具到目录
将gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。

3)解压Linux交叉编译工具
$ tar xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
Myimx6linux3.14 build 4.1.0.1.png

4)复制交叉编译工具配置文件
将gcc-linaro-arm-linux-gnueabihf-492-env复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。

5)检查安装
$ source gcc-linaro-arm-linux-gnueabihf-492-env
$ ${CROSS_COMPILE}gcc –v
Myimx6linux3.14 build 4.1.0.2.png


安装QT5交叉编译工具(install QT5 cross compiler tool)

1)进入交叉编译工具链目录
$ cd ~/my-imx6/03_tools/
Myimx6linux3.14 build 4.2.0.1.png

2)执行安装命令
$ sh fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh

3)选择安装路径
执行安装命令后会出现如下提示信息:
Enter target directory for SDK (default: /opt/fsl-imx-x11/3.14.52-1.1.0):
这时按“回车(Enter)”键,我们保持默认的安装路径。

4)确认安装路径
之后,会提示如下信息:
You are about to install the SDK to "/opt/fsl-imx-x11/3.14.52-1.1.0". Proceed[Y/n]? 这时输入“Y”并按“回车(Enter)”键表示确认。
Myimx6linux3.14 build 4.2.0.2.png

5)等待安装完成
提示:安装过程大概需要几分钟的时间。

6) 检查安装
查看交叉编译工具链的版本信息以验证交叉编译工具链安装正常。
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
$ qmake -v
执行命令后会也出现类似如下的信息:
Myimx6linux3.14 build 4.2.0.3.png


U-Boot编译


准备编译

复制源码包到开发主机中

将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。
这一步自己采取相应的方式完成。


解压u-boot源码包

$ cd ~/my-imx6/02_source/
$ tar xf u-boot-2015.04.tar.xz
Myimx6linux3.14 build 5.1.2.1.png


编译

使编译配置文件生效

$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env
Myimx6linux3.14 build 5.2.1.1.png


进入u-boot源码目录

$ cd ~/my-imx6/02_source/u-boot-2015.04
Myimx6linux3.14 build 5.2.2.1.png


清除u-boot临时文件

$ make distclean
Myimx6linux3.14 build 5.2.3.1.png


配置u-boot

  • 评估板及对应的 u-boot 编译配置:
评估板主型号 CPU类型-内存容量 处理器架构 对应的u-boot配置
MY-IMX6-EK200 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek200-6qp_config
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek200-6qp-2g_config
i.MX6 Quad - 1G Cortex-A9 myimx6ek200-6q_config
i.MX6 Quad - 2G Cortex-A9 myimx6ek200-6q-2g_config
i.MX6 DualLite - 1G Cortex-A9 myimx6ek200-6u_config
i.MX 6Solo - 512M Cortex-A9 myimx6ek200-6s_config
i.MX 6Solo - 1G Cortex-A9 myimx6ek200-6s-1g_config
MY-IMX6-EK314 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek200-6qp_config
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek200-6qp-2g_config
i.MX6 Quad- 1G Cortex-A9 myimx6ek314-6q_config
i.MX6 Quad- 2G Cortex-A9 myimx6ek314-6q-2g_config
i.MX6 DualLite - 1G Cortex-A9 myimx6ek314-6u_config
MY-IMX6-EK336 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek336-6qp_config
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek336-6qp-2g_config
i.MX6 Quad- 1G Cortex-A9 myimx6ek336-6q_config
i.MX6 Quad- 2G Cortex-A9 myimx6ek336-6q-2g_config
MY-IMX6-EK140 i.MX 6UltraLite-256M Cortex-A7 myimx6ek140-6g_config
i.MX 6UltraLite-512M Cortex-A7 myimx6ek140-6g-512m_config
i.MX 6UltraLite Full - 256M Cortex-A7 myimx6ek140p-6g_defconfig
i.MX 6UltraLite Full - 512M Cortex-A7 myimx6ek140p-6g-512m_defconfig
  • MYIMX6EK200-6Q-1G配置示例:

$ make myimx6ek200-6q_config
Myimx6linux3.14 build 5.2.4.1.png

执行编译

$ make
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。
Myimx6linux3.14 build 5.2.5.1.png

  • 编译完成

提示:u-boot编译过程大概需要一、两分钟时间。
Myimx6linux3.14 build 5.2.5.2.png


目标文件

  • 编译文件

编译完成后通过ls命令即可看到编译得到的文件u-boot.imx
$ ls
Myimx6linux3.14 build 5.3.0.1.png

  • 目标文件

MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:

u-boot配置
(u-boot configuration)
目标文件
(target file)
myimx6ek200-6qp_config uboot-myimx6ek200-6qp.imx
myimx6ek200-6qp-2g_config uboot-myimx6ek200-6qp-2g.imx
myimx6ek200-6q_config uboot-myimx6ek200-6q.imx
myimx6ek200-6q-2g_config uboot-myimx6ek200-6q-2g.imx
myimx6ek200-6u_config uboot-myimx6ek200-6u.imx
myimx6ek200-6s_config uboot-myimx6ek200-6s.imx
myimx6ek200-6s-1g_config uboot-myimx6ek200-6s-1g.imx
myimx6ek314-6qp_config uboot-myimx6ek314-6qp.imx
myimx6ek314-6qp-2g_config uboot-myimx6ek314-6qp-2g.imx
myimx6ek314-6q_config uboot-myimx6ek314-6q.imx
myimx6ek314-6q-2g_config uboot-myimx6ek314-6q-2g.imx
myimx6ek314-6u_config uboot-myimx6ek314-6u.imx
myimx6ek336-6qp_config uboot-myimx6ek336-6qp.imx
myimx6ek336-6qp-2g_config uboot-myimx6ek336-6qp-2g.imx
myimx6ek336-6q_config uboot-myimx6ek336-6q.imx
myimx6ek336-6q-2g_config uboot-myimx6ek336-6q-2g.imx
myimx6ek140-6g_config uboot-myimx6ek140-6g.imx
myimx6ek140-6g-512m_config uboot-myimx6ek140-6g-512m.imx
myimx6ek140p-6g_defconfig uboot-myimx6ek140p-6g.imx
myimx6ek140p-6g-512m_defconfig uboot-myimx6ek140p-6g-512m.imx

我们需要将编译得到的u-boot.imx复制为我们的目标文件名。
这里以MY-IMX6-EK200-6Q为例(把配置myimx6ek200-6q_config编译生成的u-boot.imx复制为目标文件):
$ cp u-boot.imx ~/my-imx6/04_image/image-linux-31452/uboot-myimx6ek200-6q.imx
Myimx6linux3.14 build 5.3.0.2.png

编译内核


准备编译

复制源码包到开发主机中

将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。
这一步自己采取相应的方式完成。

解压linux源码包

$ cd ~/my-imx6/02_source/
$ tar xf linux-3.14.52.tar.xz
Myimx6linux3.14 build 6.1.2.1.png


内核编译配置

使编译配置文件生效

$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env
Myimx6linux3.14 build 6.2.1.1.png


清除内核临时文件

  • 进入linux源码目录

$ cd ~/my-imx6/02_source/linux-3.14.52
Myimx6linux3.14 build 6.2.2.1.png

  • 清除临时文件

$ make distclean
Myimx6linux3.14 build 6.2.2.2.png


内核配置

  • 内核配置文件
评估板型号 配置文件
MY-IMX6-EK200 myimx6_defconfig
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140 myimx6ul_defconfig

$ make myimx6_defconfig
如果是编译 MY-IMX6-EK140 的内核,请使用 $ make myimx6ul_defconfig
这里以 myimx6_defconfig 为例。
Myimx6linux3.14 build 6.2.3.1.png


编译内核

  • 执行编译

$ make zImage
Myimx6linux3.14 build 6.3.0.1.png

  • 编译完成

Myimx6linux3.14 build 6.3.0.2.png

  • 目标文件

arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。
$ ls arch/arm/boot/zImage -la
Myimx6linux3.14 build 6.3.0.3.png

注意:我们烧录及启动的内核文件名为“zImage-myimx6”,所以我们需要把zImage复制为zImage-myimx6。
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-31452/zImage-myimx6
Myimx6linux3.14 build 6.3.0.4.png


编译设备树

评估板型号规格与设备树文件对应关系见下表:

评估板主型号 CPU类型-内存容量 对应的设备树文件
MY-IMX6-EK200 i.MX 6QuadPlus - 1G myimx6ek200-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek200-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek200-6q.dtb
i.MX6 Quad - 2G myimx6ek200-6q-2g.dtb
i.MX6 DualLite - 1G myimx6ek200-6u.dtb
i.MX 6Solo - 512M myimx6ek200-6s.dtb
i.MX 6Solo - 1G myimx6ek200-6s-1g.dtb
MY-IMX6-EK314 i.MX 6QuadPlus - 1G myimx6ek314-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek314-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek314-6q.dtb
i.MX6 Quad - 2G myimx6ek314-6q-2g.dtb
i.MX6 DualLite - 1G myimx6ek314-6u.dtb
MY-IMX6-EK336 i.MX 6QuadPlus - 1G myimx6ek336-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek336-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek336-6q.dtb
i.MX6 Quad - 2G myimx6ek336-6q-2g.dtb
MY-IMX6-EK140 i.MX 6UltraLite-256M myimx6ek140-6g.dtb
i.MX 6UltraLite-512M myimx6ek140-6g-512m.dtb
i.MX 6UltraLite Full - 256M (2eth) myimx6ek140p-6g.dtb
i.MX 6UltraLite Full - 256M (8uart) myimx6ek140p-6g-8uart.dtb
i.MX 6UltraLite Full - 512M (2eth) myimx6ek140p-6g-512m.dtb
i.MX 6UltraLite Full - 512M (8uart) myimx6ek140p-6g-512m-8uart.dtb
  • 以MY-IMX6-EK200-6Q-1G为例

$ make myimx6ek200-6q.dtb
Myimx6linux3.14 build 6.4.0.1.png

  • 目标文件

使用ls命令可查看编译得到的目标设备树文件信息:
$ ls arch/arm/boot/dts/myimx6ek*.dtb
Myimx6linux3.14 build 6.4.0.2.png

复制设备树文件到镜像目录
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-31452/
Myimx6linux3.14 build 6.4.0.3.png

编译模块

  • 编译模块命令

$ make modules
Myimx6linux3.14 build 6.5.0.1.png

  • 安装模块到指定目录

$ make modules_install INSTALL_MOD_PATH=./modules
Myimx6linux3.14 build 6.5.0.2.png

  • 打包模块文件

$ cd modules
$ tar cjf ../modules.tar.bz2 *
Myimx6linux3.14 build 6.5.0.3.png

  • 复制模块包到镜像目录
评估板型号 目标模块包
MY-IMX6-EK200 kernel-modules-myimx6.tar.bz2
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140 kernel-modules-myimx6g.tar.bz2

$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-31452/kernel-modules-myimx6.tar.bz2
注意:如果是编译内核时配置文件使用的是 myimx6_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6.tar.bz2;如果是编译内核时配置文件使用的是 myimx6ul_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6g.tar.bz2


应用程序编译


Linux应用程序编译

编写应用程序

  • 创建应用程序的源码目录和Linux-3.14.52的可执行程序目录

$ mkdir ~/my-demo/source_code -p
Myimx6linux3.14 build 8.1.1.1.png

$ mkdir ~/my-demo/bin-l31452 -p
Myimx6linux3.14 build 8.1.1.2.png

  • 编写源代码

$ cd ~/my-demo/source_code
$ vi hello.c

写入以下代码并保存
#include <stdio.h>

int main(int argc, char **argv)
{
  printf("Hello, MYZR!\n");

  return;
}

  • 查看代码

Myimx6linux3.14 build 8.1.1.3.png

$ cat hello.c

编译应用程序

  • 配置环境变量

$ source ~/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-492-env
Myimx6linux3.14 build 8.1.2.1.png

  • 编译

$ ${CROSS_COMPILE}gcc hello.c -o hello.out
Myimx6linux3.14 build 8.1.2.2.png
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。

  • 目标文件

$ file hello.out
Myimx6linux3.14 build 8.1.2.3.png
可以看到目标文件 hello.out 的属性。


保存目标可执行文件

$ mv hello.out ~/my-demo/bin-l31452/
Myimx6linux3.14 build 8.1.3.1.png


QT应用程序编译

准备QT5程序代码

提示:这里我们使用“Qt5_NMap_CarouselDemo_1.0.tgz”进行演示。
1)将代码包复制到Linux开发主机
将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”复制到“~/my-demo/source_code”。
这一步自己采取相应的操作完成。

2)解压代码包
$ cd ~/my-demo/source_code
$ tar zxf Qt5_NMap_CarouselDemo_1.0.tgz
Myimx6linux3.14 build 8.2.1.1.png


编译QT5程序

提示:我们将使用命令行编译。
1)进入代码目录
提示:我们前面将代码包“Qt5_NMap_CarouselDemo_1.0.tgz”解压在“~/my-demo/source_code”。
$ cd ~/my-demo/source_code/Qt5_NMap_CarouselDemo_1.0/

2)检查QMake
$ qmake –v
Myimx6linux3.14 build 8.2.2.2.png
如果执行命令后当前终端有输出“QMake version 3.0”,则表示交叉编译工具配置正常。 否则需要执行下面的命令:
$ source /opt/fsl-imx-x11/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

3)生成Makefile文件
$ qmake
Myimx6linux3.14 build 8.2.2.3.png
执行qmake后通过ls可以看到多了Makefile文件

4)编译
$ make
Myimx6linux3.14 build 8.2.2.4.png

5)目标文件

  • 可执行文件

$ file Qt5_NMap_CarouselDemo
Myimx6linux3.14 build 8.2.2.5.png

  • 资源文件

QT5程序的运行需要对应的qml文件和content
Myimx6linux3.14 build 8.2.2.6.png


保存目标可执行文件

由于QT5程序的运行需要对应的qml文件和content文件,这里我们为了操作的简洁,直接将整个目录复制到目标目录
$ cp ../Qt5_NMap_CarouselDemo_1.0 ~/my-demo/bin-l31452/ -a
Myimx6linux3.14 build 8.2.3.1.png


应用程序打包

说明

烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看《烧录手册》。


打包应用程序

1)打包
这里我们将整个my-demo目录打包。
$ cd ~
$ tar cjf my-demo.tar.bz2 my-demo
Myimx6linux3.14 build 8.3.2.1.png

2)复制应用程序包为目标烧录文件
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/
Myimx6linux3.14 build 8.3.2.2.png


目标烧录文件


至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。
现在可以参照《烧录手册》烧录我们自己编译出来的image了。


在评估板上运行应用程序

烧录系统之后,对评估板重新上电,登录系统后并执行以下命令。

  1. /home/root/my-demo/bin-l31452/hello.out
  2. export DISPLAY=:0
  3. /home/root/my-demo/bin-l31452/Qt5_NMap_CarouselDemo_1.0/Qt5_NMap_CarouselDemo-platform eglfs


附:文件系统编译

注意及说明:
1)原始编译的过程中的下载量会超过4G。(提示:可以使用我们下载好的一些文件,以减少下载量,节约时间,在7.4中会说到)。

2)编译主机的网络连接最好使用能访问www.fackbook.com 的网络,不然可能会受到境内防火墙的限制而无法下载编译需要的软件包。

3)初次编译需要的时间根据网络状态及编译主机的配置需要2小时到无限时间(经粗略统计除去下载时间,在16核CPU、16G内存的主机上编译QT5系统用了大约100分钟)。

客户请根据实际情况决定是否自行编译文件系统或使用我们提供的文件系统。如果我们提供的文件系统能够满足需求,建议不要自行编译,因为编译过程可能会出现很多错误。


准备编译

安装软件包

说明,Yocto编译依赖一些软件包,所以需要在开发主机上进行安装。
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo \
gcc-multilib build-essential chrpath socat
Myimx6linux3.14 build 10.1.1.1.png

$ sudo apt-get install libsdl1.2-dev xterm sed cvs subversion \
coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc \
g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial \
autoconf automake groff curl lzop asciidoc
Myimx6linux3.14 build 10.1.1.2.png

$ sudo apt-get install uboot-mkimage
Myimx6linux3.14 build 10.1.1.3.png


准备源码

1)下载源码
在网盘中下载 yocto__imx-3.14.52-1.1.0_ga.tar.xz

2)创建工作目录
$ mkdir ~/yocto
Myimx6linux3.14 build 10.1.2.1.png

3)将源码包复制到工作目录
复制“yocto__imx-3.14.52-1.1.0_ga.tar.xz”到“~/my-imx6/02_source”。
这一步骤自己采取相应的方式进行

4) 解压源码包
$ cd ~/yocto/
$ tar xf yocto__imx-3.14.52-1.1.0_ga.tar.xz
Myimx6linux3.14 build 10.1.2.2.png


准备编译需要的软件包

提示1:如果自己网络状况好且能访问境外网站,可以跳过这一节内容。
提示2:如果是使用我们下载好的一些包,请继续往下。
提示3:限于网络上传速度的影响及软件包的更新,我们下载的软件包目录中可能不包括
编译需要的全部软件包,但是编译中缺少的软件包编译程序会在编译过程中自行下载。

1)下载软件包
在网盘中下载downloads文件夹(位置:MYZR-通用资源/yocto/downloads。目前该文件夹大小在6 ~ 8G)。

2)将软件包复制到BSP目录
将downloads移动到 “~/yocto/imx-3.14.52-1.1.0_ga” 目录
这一步自己采取相应的方法完成。

编译

更新BSP

$ cd ~/yocto/imx-3.14.52-1.1.0_ga/
Myimx6linux3.14 build 10.2.1.1.png

$ ./bin/repo sync
Myimx6linux3.14 build 10.2.1.2.png


编译配置

$ DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b build-x11
Myimx6linux3.14 build 10.2.2.1.png

执行命令后终端会接收到输出的信息,一直按“空格”,在最后的对话中输入y
Myimx6linux3.14 build 10.2.2.2.png

示例:Do you accept the EULA you just read? (y/n) y


编译QT5文件系统

1)执行编译命令
$ bitbake fsl-image-qt5
Myimx6linux3.14 build 10.2.3.1.png

提示:整个编译过程除去下载时间,在16核CPU、16G内存的主机上需要1小时左右。

2)目标文件
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2
Myimx6linux3.14 build 10.2.3.2.png

3)复制目标文件
我们烧录的QT5系统文件名为“distro-fsl-image-qt5.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image-qt5.tar.bz2”。
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image-qt5.tar.bz2
Myimx6linux3.14 build 10.2.3.3.png


编译Linux文件系统

1)执行编译命令
$ bitbake fsl-image-machine-test

2)目标文件
$ ls ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2
Myimx6linux3.14 build 10.2.4.1.png

3)复制目标文件
我们烧录的QT5系统文件名为“distro-fsl-image.tar.bz2”,所以需要将编译的文件系统复制为“distro-fsl-image.tar.bz2”。
$ cp ./tmp/deploy/images/imx6qsabresd/fsl-image-machine-test-imx6qsabresd.tar.bz2 ~/my-imx6/04_image/image-linux-31452/distro-fsl-image.tar.bz2
Myimx6linux3.14 build 10.2.4.2.png


编译QT5的交叉编译工具

如果不需要自定义QT5交叉编译工具,则跳过本小节。

1)执行编译命令
$ bitbake meta-toolchain-qt5

2)目标文件
在“./tmp/deploy/sdk/”目录下可以找到我们编译生成的目标文件。
Myimx6linux3.14 build 10.2.5.1.png

3)保存目标文件
将编译得到的“fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-3.14.52-1.1.0.sh”复制到“~/my-imx6/03_tools/”

4)安装QT5交叉编译工具
如果需要使用自己编译的QT5交叉编译工具,需要先删除已经安装的QT5交叉编译工具。并参照前面“安装配置交叉编译工具链”中的“安装QT5交叉编译工具”进行安装。