MY-IMX6 Linux-3.14 编译手册
目录 [隐藏]
1 文档说明
1.1 系统环境说明
1.2 操作说明
1.3 截图说明
1.4 图片中的Linux命令
1.5 重要信息说明
2 准备源码及相关文件
2.1 源码文件
2.2 交叉编译工具文件
2.3 创建工作目录
3 安装交叉编译工具链
3.1 安装Linux交叉编译工具链
3.2 安装QT5交叉编译工具(install QT5 cross compiler tool)
4 U-Boot编译
4.1 准备编译
4.1.1 复制源码包到开发主机中
4.1.2 解压u-boot源码包
4.2 编译
4.2.1 使编译配置文件生效
4.2.2 进入u-boot源码目录
4.2.3 清除u-boot临时文件
4.2.4 配置u-boot
4.2.5 执行编译
4.3 目标文件
5 编译内核
5.1 准备编译
5.1.1 复制源码包到开发主机中
5.1.2 解压linux源码包
5.2 内核编译配置
5.2.1 使编译配置文件生效
5.2.2 清除内核临时文件
5.2.3 内核配置
5.3 编译内核
5.4 编译设备树
5.5 编译模块
6 应用程序编译
6.1 Linux应用程序编译
6.1.1 编写应用程序
6.1.2 编译应用程序
6.1.3 保存目标可执行文件
6.2 QT应用程序编译
6.2.1 准备QT5程序代码
6.2.2 编译QT5程序
6.2.3 保存目标可执行文件
6.3 应用程序打包
6.3.1 说明
6.3.2 打包应用程序
7 目标烧录文件
7.1 在评估板上运行应用程序
8 附:文件系统编译
8.1 准备编译
8.1.1 安装软件包
8.1.2 准备源码
8.1.3 准备编译需要的软件包
8.2 编译
8.2.1 更新BSP
8.2.2 编译配置
8.2.3 编译QT5文件系统
8.2.4 编译Linux文件系统
8.2.5 编译QT5的交叉编译工具
文档说明
系统环境说明
编译主机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了。
在评估板上运行应用程序
烧录系统之后,对评估板重新上电,登录系统后并执行以下命令。
/home/root/my-demo/bin-l31452/hello.out
export DISPLAY=:0
/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交叉编译工具”进行安装。 |