裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如本教程使用的 I.MX6U,跟STM32 一样,裸机开发是直接操作 CPU 的寄存器。 Linux 驱动开发最终也是操作的寄存器,但是在操作寄存器之前要先编写一个符合 Linux 驱动的框架。同样一个点灯驱动,裸机可能只需要十几行代码,但是 Linux 下的驱动就需要几十行代码。大部分 Linux 驱动初学者都是从 STM32 转过来的, Linux 驱动开发和 STM32 开发区别很大,比如 Linux 没有 MDK、 IAR 这样的集成开发环境,需要我们自己在 Ubuntu 下搭建交叉编译环境。直接上手 Linux 驱动开发可能会因为和 STM32 巨大的开发差异而打击学习信心。裸机开发是连接 Cortex-M(如 STM32)单片机和 Cortex-A(如 I.MX6U)处理器的桥梁MDK、 IAR 这种集成开发环境没有告诉你的“干货”。
要进行裸机开发肯定要先搭建好开发环境,我们在开始学习 STM32 的时候肯定需要安装一堆的软件,比如 MDK、 IAR、串口调试助手等等,这个就是 STM32 的开发环境搭建。同样的,要想在 Ubuntu 下进行 Cortex-A(I.MX6U)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。开发环境需要下载的软件可以去正点原子官网看视频下载,在这里,我只教大家如何安装交叉编译工具。
ARM 裸机、 Uboot 移植、 Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,在linux进行 C 语言开发,里面使用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在
要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架
构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1、它肯定是一个 GCC 编译器。
2、这个 GCC 编译器是运行在 X86 架构的 PC 上的。
3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯
片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架
构“交叉”起来了。
交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器, Linaro 一间非营利性质的开放
源代码软件工程公司, Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器),
关于 Linaro 详细的介绍可以到 Linaro 官网查阅。 Linaro GCC 编译器下载地址如下:
交叉编译器下载地址
交叉编译器的具体安装教程可以参考正点原子的视频进行配置。
Ubuntu 自带的 GCC 编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihfgcc ”的含义如下:
1、 arm 表示这是编译 arm 架构代码的编译器。
2、 linux 表示运行在 linux 环境下。
3、 gnueabihf 表示嵌入式二进制接口。
4、 gcc 表示是 gcc 工具。
要学嵌入式 RTOS肯定需要一个硬件平台,也就俗称的开发板,我使用的是 I.MX6U-ALPHA开发板。 ALPHA 是全功能开发板,这款是以 NXP 的 I.MX6ULL 为核心的 Cortex-A7 开发平台,板载资源丰富本章我们就先来详细了解一下未来将会陪伴我们很长一段时间的朋友—— I.MX6ULLALPHA开发平台。
正点原子 I.MX6U-ALPHA 开发板底板板载资源如下:
◆ 1 个核心板接口,支持 I.MX6UL/6ULL 等核心板
◆ 1 个电源指示灯(蓝色)
◆ 1 个状态指示灯(红色)
◆ 1 个六轴(陀螺仪+加速度)传感器芯片,ICM20608
◆ 1 个高性能音频编解码芯片, WM8960
◆ 1 路 CAN 接口,采用 TJA1050 芯片
◆ 1 路 485 接口,采用 SP3485 芯片
◆ 1 路 RS232 串口(母)接口,采用 SP3232 芯片
◆ 1 个 ATK 模块接口,支持正点原子WIFI/GPS/MPU6050/手势识别等模块
◆ 1 个光环境传感器(光照、距离、红外三合一)
◆ 1 个摄像头模块接口
◆ 1 个 OLED 模块接口
◆ 1 个 USB 串口,可用于代码调试
◆ 1 个 USB SLAVE(OTG)接口,用于 USB 从机通信
◆ 1 个 USB HOST(OTG)接口,用于 USB 主机通信
◆ 1 个有源蜂鸣器
◆ 1 个 RS232/RS485 选择接口
◆ 1 个串口选择接口
◆ 1 个 TF 卡接口(在板子背面)
◆ 2 个 10M/100M 以太网接口(RJ45)
◆ 1 个录音头(MIC/咪头)
◆ 1 路立体声音频输出接口
◆ 1 路立体声录音输入接口
◆ 1 个小扬声器(在板子背面)
◆ 2 个扬声器外接接口,左右声道。
◆ 1 组 5V 电源供应/接入口
◆ 1 组 3.3V 电源供应/接入口
◆ 1 个直流电源输入接口(输入电压范围: DC6~18V)
◆ 1 个启动模式选择配置接口
◆ 1 个 RTC 后备电池座,并带电池
◆ 1 个复位按钮,可用于复位 MPU 和 LCD
◆ 1 个功能按钮
◆ 1 个电源开关,控制整个板的电源
◆ 1 个 Mini PCIE 4G 模块接口
◆ 1 个 Nano SIM 卡接口
◆ 1 个 SDIO WIFI 接口
正点原子 I.MX6ULL EMMC 版核心板板载资源如下:
◆ CPU: MCIMX6Y2CVM08AB(工业级), 800MHz(实际 792MHz),BGA289
◆ 外扩 DDR3L: NT5CC256M16EP-EK, 512MB 字节,商业级。
◆ EMMC: KLM8G1GET,这是一个 8GB 的 EMMC 芯片。
◆ 两个 2*30 的防反插 BTB 座,共引出 120 PIN
这是核心板的 CPU,型号为 MCIMX6Y2CVM08AB, MCIMX6Y2CVM08AB 主频为
800MHz(实际 792MHz)。该芯片采用 Coretx-A7 内核,自带 32KB 的 L1 指令 Cache、 32KB 的
L1 数据 Cache、 128KB 的 L2Cache、集成 NEON 和 SIMDv2、支持硬件浮点(FPU)计算单元,
浮点计算架构为 VFPv4-D32、 1 个 RGB LCD 接口、 2 个 CAN 接口、 2 个 10M/100M 网络接口、
2 个 USB OTG 接口(USB2.0)、 2 路 ADC、 8 个串口、 3 个 SAI、 4 个定时器、 8 路 PWM、 4 路
I2C 接口、 4 路 SPI 接口、一路 CSI 摄像头接口、 2 个 USDHC 接口,支持 4 位 SD 卡,最高可
以支持 UHS-I SDR 104 模式,支持 1/4/8 位的 EMMC,最高可达 HS200 模式、一个外部存储接
口、支持 16 位的 LPDDR2-800、 DDR3-800 和 DDR3L-800、支持 8 位的 MLC/SLC NAND Flash,
支持 2KB、 4KB 和 8KB 页大小,以及 124 个通用 IO 口等
现在只是介绍了ALPHA开发板的资源,并没有对IMX6ULL这块芯片进行介绍,看完IMX6ULL参考手册后就会发现,IMX6ULL的外设种类不多(相比于STM32),IMX6ULL更专注于处理数据,适用于高性能的领域,不像STM32那样,专注于控制。这是因为嵌入式 Linux 和单片机的开发方式以及应用场合不
同。
单片机学名叫做 Microcontroller,也就是微控制器,主要用于控制相关的应用,因此单片机
的外设都比较多,比如很多路的 IIC、 SPI、 UART、定时器等等。
嵌入式 Linux 开发主要注重于
高端应用场合,比如音视频处理、网络处理等等。比如一个机器人,高性能处理器加 Linux 系
统(或者其他系统)作为机器人的大脑,主要负责接收各个传感器采集的数据然后对原始数据进
行处理,得到下一步执行指令,这个往往需要很高的性能。当处理完成得到下一步要做的动作
之后大脑就会将数据发给控制机器人各个关节电机的驱动控制器,这些驱动控制器一般都是单片机做的。
我们不要专注于某一个外围设备的驱动,也不要把大量的时间画在裸机的开发上,学裸机是了解ALPHA开发板的资源,目的是为了学习操作系统(RTOS),专注的是高性能的领域。
ALPHA启动模式总共就四种:
本篇博文主要介绍了ALPHA开发板的硬件资源,之后的文章会进一步的介绍开发板相关的资源。看完这篇文章后,开发环境已经搭建好了。
一时语塞。。。。。