IMX6ULL学习笔记(11)——获取和编译官方SDK

Posted Leung_ManWah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IMX6ULL学习笔记(11)——获取和编译官方SDK相关的知识,希望对你有一定的参考价值。

一、简介

SDK(Software Development Kit) 是 NXP 针对其官方评估板的软件开发包,可以在 NXP 的官网下载得到。SDK 中包含了固件库和各种程序范例。这个 SDK 包提供了 Windows 和 Linux 两种版本,分别针对主机系统是 Windows 和 Linux。

二、获取SDK

官网下载:i.MX 6ULL单核处理器,配备Arm® Cortex®-A7内核

百度网盘:https://pan.baidu.com/s/17Esz2aigWejm8MQ4wtv8-w?pwd=51ub 提取码:51ub

三、SDK工程结构

安装完成以后的SDK如图所示:

3.1 boards:示例程序

SDK的boards目录包含了NXP官方评估版MCIMX6ULL-EVK的各种示例程序。

  • demo_apps:
    包含了一些应用范例,如串口打印“hello world”、使用lwip协议栈进行网络通讯等内容。
  • driver_examples:
    包含了i.mx6主要片上外设的使用范例。
  • project_template:
    包含了官方示例使用的一些必备文件,这些文件主要是针对官方评估板做了一些引脚定义、时钟配置等功能。
  • rtos_examples:
    包含了使用FreeRTOS实时操作系统的应用范例。
  • usb_examples:
    包含了各种USB程序示例,具体如下所示。USB设备种类繁多且驱动复杂, 参考官方的这些示例能快速建立自己需要的USB应用。

3.2 CMSIS:包含CMSIS标准相关的文件

在2.2版本的SDK中,CMSIS只有一个GCC相关头文件。

3.3 CORTEXA:Cortex相关头文件

SDK目录下的CORTEXA文件夹包含了Cortex-A核适配IAR、GCC的头文件。

3.4 devices:i.MX固件库

SDK中的devices目录包含的内容就是外设驱动固件库,该目录下的MCIMX6Y2文件夹即是针对开发板板载芯片对应的固件库。

  • MCIMX6Y2\\drivers目录:
    drivers目录是固件库的主体,有时我们把这些文件称为外设驱动库。这些文件都使用fsl_xxx.c/h的命名格式,其中xxx是对应的片上 外设名字,如ADC、GPIO、UART、I2C等外设,大部分外设包含一个C源文件和头文件。

    • 这些文件都使用fsl_xxx.c/h的命名格式,其中xxx是对应的片上外设名字,如ADC、GPIO、UART、I2C等外设,大部分外设包含一个C源文件和头文件。

    • 当使用到某个外设时,我们会把此处对应的外设驱动源文 件添加到工程中,加入编译,对于没有源文件的IOMUXC外设,则直接使用“#include”包含其头文件fsl_iomuxc.h

    • 特别地,其中的fsl_common.cfsl_common.h中的common不是i.MX6芯片的某个外设名字,它表示绝大多数工程都会需要这些“共同”的内容,所以一般工程都会添加这个fsl_common.c文件,并且可以通过fsl_common.h文件包含前面介绍的fsl_device_regi sters.h头文件,达到最终包含具有大量寄存器定义的MCIMX6Y2.h核心头文件的目的。

  • MCIMX6Y2\\gcc、iar目录:
    在不同的编译平台下,使用汇编语言编写的启动文件、各种版本的分散加载文件的语法稍有区别,所以固件库把这些内容放在独立的文件夹。gcc和iar文件夹分别对应ARM-GCC和IAR开发环境,这些文件夹内的文件功能是一样的。

  • MCIMX6Y2\\utilities目录:
    utilities是实用工具集的意思,此目录下包含了开发常用的一些调试工具,如串口输出、运行日志,通常我们都会把这些文件加到工程以方便开发。

  • fsl_device_registers.h:
    根据CPU型号包含相应的头文件,在开发环境的全局宏定义中应根据CPU指定芯片型号。

  • MCIMX6Y2.h:
    主要是包含i.MX6芯片的各种寄存器定义和中断编号定义,是非常重要,非常基础的一个头文件。 所以在前面fsl_device_registers.h文件中就根据CPU型号把添加这个文件。

  • MCIMX6Y2_features.h:
    主要定义了一些关于i.MX6芯片特性的内容,定义了本芯片有多少个IIS外设或UART外设。在前面的fsl_device_registers.h的内容中也包含了本文件。

  • MCIMX6Y2.xml:
    NXP的开发环境需要的一些记录信息,此处不作介绍。

  • system_MCIMX6Y2.c/h:
    system_MCIMX6Y2包含一个源文件和头文件。其中头文件system_MCIMX6Y2.h中主要包含时钟定义以及源文件相应函数的声明,而源文件system_MCIMX6Y2.c中则主要包含系统初始化和配置系统时钟的函数。

3.5 docs:部分说明文档

这目录下主要是《Getting Started with MCUXpresso SDK for i.MX 6ULL Derivatives》文件比较有用,它介绍了使用官方评估板时的基础使用步骤。

文件夹 lwiprtosusb、分别保存对应的说明文档。文件夹MCUXpresso SDK API Reference Manual_MCIMX6Y2保存有.html格式的SDK API接口函数说明文档。

3.6 middleware:中间件

主要包含一些中间层软件,即这些软件常为应用层提供一些协议、架构上的支撑,它的主要部分又与芯片底层的硬件外设驱动(前面drivers目录中的文件)联系不甚紧密,是不同芯片之间通用的一些构件。

  • fatfs:
    这是一个嵌入式常用的文件系统,有了文件系统后能更好地管理存储器以及使用通用的文件形式来访问存储器。
  • lwip:
    这是嵌入式常用网络TCP/IP协议栈,使用协议栈可以方便地接入网络。
  • sdmmc:
    它是遵照SDIO协议编写的集成识别、读写SD存储卡功能的驱动。
  • usb:
    包含了遵照USB协议编写的基本驱动,在它之上可方便地编写USB应用程序。

3.7 rtos:实时操作系统

包含了FreeRTOS实时操作系统的源代码,位于“boards\\evkmcimx6ull\\rtos_examples”目录的FreeRTOS例程会使用到这里的源码。

3.8 tools:开发工具

  • cmake_toolchain_files:
    提供cmake工具,用于生成ARM GCC编译器需要的Makefile文件。
  • imgutil:
    提供图片压缩工具。
  • mfgtools/mfgtools-with-rootfs:
    提供MFG批量下载工具。

3.9 其它

在SDK的根目录下还包含了几个.xml、.txt、.htm以及.bat文件。

.xml和txt文件它们主要是包含SDK第三方构件的一些版权、出处说明以及EVK-MCIMX6UL生成的一些说明信息

keilkill.bat批处理文件用于清理编译程序生成的中间文件。

四、搭建Linux开发环境

4.1 安装CMake工具

执行以下命令:

sudo apt-get install cmake

4.2 安装交叉编译工具

执行以下命令:

sudo apt-get install gcc-arm-none-eabi

添加临时环境变量,执行以下命令:

export ARMGCC_DIR=/usr

注:使用以上命令添加的环境变量只在当前终端上有效,如果虚拟机重启或者重新打开了终端需要再次执行添加环境变量命令。 该环境变量只有在编译官方SDK时才用得到,需要时动态添加即可。

4.3 安装Linux版本SDK

SDK_2.2_MCIM6ULL_RFP_Linux.run 拷贝到Linux下,存放位置自定。然后运行.run文件生成SDK,若无法运行可尝试修改.run文件的权限chmod 777 SDK_2.2_MCIM6ULL_RFP_Linux.run

./SDK_2.2_MCIM6ULL_RFP_Linux.run

运行后会弹出图形化的界面,不过鼠标无法对界面上的选项进行操作,只能通过键盘上的方向键选择。


我们通过“上下”方向键选择生成的SDK文件保存位置。“左右”方 向键选择“Select”或“Abort Installation”。需要说明的是上图中选项1表示生成的SDK保存在你当前登录的用户文件夹下,不同用户路径不同。

五、编译SDK

打开SDK源码目录任意一个工程,可以看到每个工程有两个版本如下所示:

由于我们要在Linux下编译、下载,所以我们需要选择ARM GCC版本工程。打开“armgcc”文件夹如下所示。

  • 脚本文件:
    可以看到arngcc文件夹下包含很多build_xx脚本,这些脚本用于在Linux环境下编译生成.bin可执行文件, 所以我们需要一个ARM GCC交叉编译器
  • CMake相关文件:
    CMakeList.txt用于生成编译过程中需要的Makefile,所以我们还需要一个CMake工具
  • 链接器脚本相关文件:
    .ld结尾的文件是链接器脚本相关文件,根据运行的脚本不同,脚本会自动调用相应的链接文件。

打开 SDK_2.2_MCIM6ULL/boards/evkmcimx6ull/demo_apps/hello_world/armgcc 工程,运行build_ddr_release.sh脚本,命令如下:

./build_ddr_release.sh

build_ddr_release.sh用于生成.bin文件,运行成功后会在当前文件夹下生成ddr_release文件夹, 在文件夹中存在一个sdk20-app.bin文件,将sdk20-app.bin放到SD卡程序并不能直接运行, 根据存储设备不同还要在sdk20-app.bin添加相应的头部信息然后才能在开发板上运行

注意:
运行build_ddr_release.sh常见错误:

错误原因是没有添加ARMGCC_DIR环境变量,根据之前讲解添加环境变量命令“export ARMGCC_DIR=/usr”只在当前端口有效,所以在当前端口再次执行命令。

export ARMGCC_DIR=/usr

添加环境变量即可(不建议将环境变量添加到系统环境变量中,因为该环境变量只有编译官方SDK程序才用的到, 后面章节主要是自己写程序,若编译还是错误,在运行 ./build_ddr_release.sh 前先运行 ./clean.sh 清除之前编译的内容)。


• 由 Leung 写于 2022 年 10 月 24 日

• 参考:2. 编译下载官方SDK程序到开发板

以上是关于IMX6ULL学习笔记(11)——获取和编译官方SDK的主要内容,如果未能解决你的问题,请参考以下文章

IMX6ULL学习笔记——获取和编译Linux内核

IMX6ULL学习笔记——获取和编译Linux内核

IMX6ULL学习笔记——获取和编译Linux内核

IMX6ULL学习笔记——获取和编译U-Boot

IMX6ULL学习笔记——获取和编译U-Boot

IMX6ULL学习笔记——获取和编译U-Boot