移植官方SDK进行开发

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移植官方SDK进行开发相关的知识,希望对你有一定的参考价值。

我们在前面C 语言实现LED 的例程中,寄存器的地址我们都是通过芯片参考手册获取到的,然后通过宏定义的方式来使用的,由于led 的例程我们只用到了几个寄存器,如果我们的工程涉及到很多的功能,比如串口操作,LCD 显示等等,这就要求我们挨个的去参考手册找出对应的寄存器,然后在定义出来,最后在程序里面使用,这样会极大的增加我们的工作量。为了解决这个问题,NXP 官方为i.MX6ULL 编写了SDK 包,在SD 包里面NXP 已经编写好了寄存器定义文件,我们可以直接移植SDK 包里面的文件来使用。本章我们来学习下如何使用SDK 包里面的文件,方便我们的开发。

官方SDK 简介

为了方便大家的开发使用,NXP 针对I.MX6ULL 编写了一个SDK 包,这个SDK 包提供了Windows 和Linux两个版本,分别针对Windows 系统和Linux 系统。因为我们是在Windows 下使用Source Insight 来编写代码的,所以我们使用的是Windows 的版本。Windows 版本的SDK 里面的例程提供了IAR 的工程版本,估计有人会问:既然提供了IAR 的SDK,我们为什么不直接用IAR 来完成裸机实验,偏偏用复杂的GCC 交叉编译?

因为我们要从简单的裸机开始掌握Linux 下的GCC 开发步骤,包括UBuntu 系统的使用,Makefile 的编写等等。如果为了图省事而使用IAR 开发裸机,那么后续我们在学习Uboot 移植,Linux 内核移植和Linux 驱动开发的时候,因为开发环境都不熟悉,就会感觉很难上手。而且并不是所有的芯片厂商都会为自己的CPU编写裸机的SDK,如果我们去NXP 官网看一下,可以发现只有i.MX6ULL 这一款芯片有裸机的SDK,其它的Cortex-A 及以上支持Linux 系统的cpu 都没有SDK。所以可以看出i.MX6ULL 的定位是高端的单片机

本教程的目的是教大家学习Linux 嵌入式开发的,所以我们尽可能的降低入门难度,这也是为什么选择i.MX6ULL 的一个原因,因为他提供了裸机SDK,对于大家上手会感到很容易。好了,下面我们开始本章的学习吧,首先去NXP 的官网下载SDK 包,下载界面如图所示:
在这里插入图片描述
我们下载WIN 版本的SDK(SDK2.2_iMX6ULL_WIN),我们已经下载下来,放到开发板的:“i.MX6UL终结者光盘资料\\01_开发及烧写工具\\4.I.MX6ULL SDK 包\\SDK_2.2_MCIM6ULL_RFP_Win.exe”目录下了。我们双击“SDK_2.2_MCIM6ULL_RFP_Win.exe”安装程序,开始安装SDK 到Windows 系统下,安装的过程中需要设置安装目录,安装完成后的SDK 目录结构如图所示:
在这里插入图片描述
本教程我们不讲解SDK 如何开发,我们只是使用SDK 里面的几个文件,所以我们就不去详细的讲解SDK了,感兴趣的朋友可以自己去看一下,所有的例程都在boards 文件夹里面。我们需要用到的文件一共有三个,如下:
fsl_common.h //SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\drivers\\fsl_common.h
fsl_iomuxc.h //SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\drivers\\fsl_iomuxc.h
MCIMX6Y2.h //SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\MCIMX6YH2.h
我们准备好这三个文件,后面移植的时候要用到(我们也整理好放到光盘资料的“i.MX6UL 终结者光盘资料\\01_开发及烧写工具\\4.I.MX6ULL SDK 包\\SDK 中的三个文件”目录下了)。

SDK程序编写

我们在Ubuntu 系统下建立文件夹“3_led_sdk”,然后将fsl_common.h、fsl_iomuxc.h 和MCIMX6Y2.h这三个文件拷贝到“3_led_sdk”文件夹下面,这个三个文件需要做下删减修改,否则编译会报错,由于三个文件里面的代码都比较大,我这里就不详细的列出修改后的内容了。大家可以参考我们提供的裸机例程来修改这三个文件,修改完成后的工程目录如图所示:
在这里插入图片描述
然后我们在工程目录下创建“cc.h”头文件,里面存放SDK 文件用到的数据类型,在“cc.h”里面输入 下面的代码:

1 #ifndef __CC_H
2 #define __CC_H
3
4
5 /*
6 * 自定义一些数据类型供库文件使用
7 */
8 #define __I volatile
9 #define __O volatile
10 #define __IO volatile
11
12 typedef signed char int8_t;
13 typedef signed short int int16_t;
14 typedef signed int int32_t;
15 typedef unsigned char uint8_t;
16 typedef unsigned short int uint16_t;
17 typedef unsigned int uint32_t;
18 typedef unsigned long long uint64_t;
19 typedef signed char s8;
20 typedef signed short int s16;
21 typedef signed int s32;
22 typedef signed long long int s64;
23 typedef unsigned char u8;
24 typedef unsigned short int u16;
25 typedef unsigned int u32;
26 typedef unsigned long long int u64;
27
28
29 #endif

该文件主要是定义了很多数据类型。然后新建start.S 和main.c 两个文件,其中的start.S 文件和上一章的内容一样,直接复制过来就可以,创建完成后的工程目录如图所示:
在这里插入图片描述
然后在main.c 文件中输入下面的代码:

以上是关于移植官方SDK进行开发的主要内容,如果未能解决你的问题,请参考以下文章

如何使用片段反向移植?

I.MX6ULL 官方SDK移植

I.MX6ULL 官方SDK移植

I.MX6ULL 官方SDK移植

ARM(IMX6U)裸机官方SDK移植

ARM裸机开发:I.MX6U官方SDK包使用