Skip to main content

嵌入式Linux 技术体系

嵌入式Linux开发

学习一个技术时,首先要搞清楚是什么,因此本文首先对嵌入式linux开发内容是什么做一个梳理。
嵌入式Linux开发可大体分为三个维度:

info
  • 系统移植
  • 驱动开发
  • 应用开发

基本内容知识结构如下图所表示,接下来将对其作更详细的总结:

系统移植

系统移植部分主要内容是在自己的开发板上将Linux系统跑起来,主要有三大件

info
  • BootLoader
  • Linux Kernel
  • RootFs

Linux启动流程

Linux的启动流程如下图所示:

BootLoader

info
  • BootLoader像一个秘书,他负责老板开会前的各项准备,所有的工作是为老板服务

Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader 程序。这段 bootloader 程序会先初始化DDR 等外设,然后将 Linux 内核从 flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核,bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的 bootloader 软件可以使用,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最为广泛。

连接开发板串口,打开MobaXterm工具,可看到如下信息:

Uboot本质上是一段裸机程序,带有Sheel可以通过串口终端进行交互,并且前人已经写好许多功能,在此基础上适配自己的开发板使我们要做的工作。(与在STM32上RT-Thread上所使用的Finsh相差不多,串口终端)

Uboot有许多版本,Uboot官方SourceCode < U-Boot < DENX是最原始的版本,其次芯片厂商(如NXP)会为自己的芯片维护一个版本

移植的话一般基于芯片厂商所维护的版本,会减少一些工作量。

Linux Kernel

info

Linux内核是Linux操作系统最关键部分,他负责提供操作系统底层功能,如进程/线程调度、内存管理、驱动管理等等。

移植好 U-Boot 以后再移植 Linux 内核,

RootFs

移植完 Linux 内核以后Linux 还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以 U-Boot、Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统。在本篇我们就来讲解 U-Boot、Linux Kernel 和rootfs 的移植,与其说是“移植”,倒不如说是“适配”,因为大部分的移植工作都由 NXP 完成了,我们这里所谓的“移植”主要是使其能够在 I.MX6U-ALPHA 开发板上跑起来。

驱动开发

caution

未完待续...

应用开发

caution

未完待续...

开发板简介

核心板

image-20220423231903524

正点原子 I.MX6ULL EMMC 版核心板板载资源如下:

  • CPU:MCIMX6Y2CVM08AB(工业级),800MHz(实际 792MHz),BGA289

  • 外扩 DDR3L:NT5CC256M16EP-EK,512MB 字节,商业级。

  • EMMC:KLM8G1GET,这是一个 8GB 的 EMMC 芯片。

  • 两个 2*30 的防反插 BTB 座,共引出 120 PIN

CPU: MCIMX6Y2CVM08AB

image-20220423231510490

核心板的 CPU型号为 MCIMX6Y2CVM08AB,主频为800MHz(实际 792MHz)。此部分原理图主要是 I.MX6U 的部分 IO 原理图,比如 SNVS_TAMPER0~9、JTAG 外设 IO、USDHC1 外设 IO、UART 外设 IO、USB 外设 IO 等。

该芯片采用 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 口等。

DDR3L: NT5CC256M16EP

image-20220424001250227

图中,U5 就是 DDR3L 芯片,根据配置的不同,一共有两种型号,分别为:NT5CC256M16EP-EK(512MB)和 NT5CC128M16JR-EK(256MB)。该芯片挂在 I.MX6U 的 MMDC 接口上。

EMMC: KLM8G1GET

image-20220424001223501

核心板上板载的存储芯片EMMC 版本使用 8GB 的 EMMC,型号为 KLM8G1GET。EMMC 也是存储 Flash,相比 NAND Flash,EMMC 使用简单(和 SD 类似)、速度快、容量高。目前 EMMC 已经逐渐的取代了 NAND Flash,尤其是在手机、平板领域。

扩展板

开发板是正点原子I.MX6U-MINI-ALPHA,芯片为NXP I.MX6U,架构为ARM-V7。采用了核心板加底板的设计,如下图所示。

image-20220423231744626

正点原子 I.MX6U-Mini 开发板底板板主要载资源如下:

  • 1 路 CAN 接口,采用 TJA1050 芯片。
  • 1 路 485 接口,采用 SP3485 芯片。
  • 1 个 USB 串口,可用于代码调试。
  • 1 个 USB HOST 接口,用于 USB 主机通信。
  • 1 个有源蜂鸣器 。
  • 1 个 RS232/RS485 选择接口。
  • 1 个 TF 卡接口。
  • 1 个 10M/100M 以太网接口(RJ45)