学习野火i.MX Linux 开发实战指南

嵌入式Linux运行所需的组件

  • 1.Uboot
  • 2 .Kernel
    • 2.1 Linux内核
    • 2.2 Linux系统的组成
  • 3.dtb
  • 4.根文件系统

本博客内容参考、摘抄自野火i.MX Linux 开发实战指南,为野火开源精神,开发板的优良做工点赞!(更加详细的内容可以微信关注“野火电子”公众号,免费获取stm32,i.mxrt1052,RTOS,嵌入式Linux等相关资料(无套路))

学习野火i.MX Linux 开发实战指南_第1张图片

1.Uboot

全称 Universal boot loader,是遵循GPL条款的开源项目,U-BOOT发展至今,已经支持很多的操作系统,除了Linux,还支持NetBSD,VxWorks,Android等嵌入式操作系统的引导

如概述中所说,U-Boot主要是用来启动操作系统内核,它分为两个阶段,也就是boot+loader.下面的这个表格阐述了这两个阶段的具体内容

阶段 完成的工作内容
boot阶段 启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态
loader阶段 将操作系统的内核文件加载至内存,之后跳转到内核所在的地址运行

当一个开发板上电的时候,即使是执行非常简单的程序,都需要进行很多的初始化操作,例如初始化时钟,初始化存储控制器,将代码拷贝到运行内存中等操作,大多数处理器上电初始化的时候都会有默认的指令执行的位置,如ARM架构的处理器会从0x00000000地址开始读取第一条指令。
一般来说,Bootloader必须提供上电时的初始化代码,在系统上电时初始化相关的环境后,bootloader需要引导完整的操作系统。然后将控制器交给操作系统。
在开发的时候,我们可能需要利用一些命令操作bootloader,让bootloader完成一些事情,我们可以称这种模式为下载模式,比如从内存中的ELF镜像启动,从内存中启动应用程序镜像,当然,下载模式是对于开发人员在有意义,对于用户则不需要这些操作,直接可以启动操作系统运行,这种直接启动的操作系统的模式成为启动模式。正如我们所说,U-BOOT的功能十分强大,可以同时支持下载模式和启动模式,并且可以切换模式。它可以配置成在系统上电的N秒(N秒可以任意设置)内由操作人员选择是否进入下载模式,在这个模式下,bootloader将不会继续启动操作系统内核,而是由开发者去指定bootloader的工作,比如通过串口下载操作系统镜像,通过网络启动镜像等操作。学习野火i.MX Linux 开发实战指南_第2张图片学习野火i.MX Linux 开发实战指南_第3张图片
上面的两张图均为野火Linux开发板上电运行的串口打印信息,第一张图片是进入了下载模式,而第二张图片是正常的启动模式。

2 .Kernel

2.1 Linux内核

Kernel就是Linux内核,Linux采用宏内核架构,即Linux大部分功能都会在内核中实现。例如进程管理、内存管理、设备管理、文件管理以及网络管理等功能。

2.2 Linux系统的组成

Linux系统主要由5部分组成,分别为:进程管理子系统,内存管理子系统,文件子系统、网络子系统、设备子系统,如下图所示:
学习野火i.MX Linux 开发实战指南_第4张图片从上图中看出,整个系统内核由5个部分组成,并且由系统层调用(系统调用)

3.dtb

在 2011 年之前,ARM Linux 中存在大量描述芯片平台以及板级差异的垃圾代码,它
们位于 kernel/arch/arm/plat-xxx 目录和 kernel/arch/arm/mach-xxx 目录下,用代码描述硬件,如注册 platform 设备,声明设备的 resource 等,但这些代码对于 Linux 内核来说都是垃圾,因此 Linux 创始人 Linus Torvalds 在 2011 年 3 月份向 Linux 社区发送一封邮件,他提出ARM 架构平台应该参考其他平台如 PowerPC 的设备树机(Device Tree)制描述硬件,这样子在 Linux 内核中就不再需要进行大量的冗余编码,许多硬件及芯片平台的细节可以通过设备树传递给 Linux 内核。

其实设备树是一种描述硬件的数据结构,它把这些硬件设备的信息,用一个非 C 语言
的脚本语言来描述,而这个脚本文件,就是传说中的 Device Tree(设备树),设备树包括设备树源码(Device Tree Source,DTS)文件、设备树编译工具(Device Tree Compiler,DTC)与二进制格式设备树(Device Tree Blob,DTB)。DTS 包含的头文件格式为 DTSI,DTS 文件是一种人类可以看懂的编码格式,由节点(Node)和属性(Property)组成,节点中又可能会包含子节点,而属性则是可以简单理解为成对出现的名称与值.
因为 Uboot 和 Linux 不能直接识别 DTS 文件,它们只能识别二进制文件,所以需要把
DTS 文件编译成 DTB 文件,而 DTC 就是将设备树源码文件(.dts / .dtsi)编译成二进制格式设备树文件(.dtb)的编译工具,它位于 Linux 内核源码的 scripts/dtc 目录下,在 Linux配置中使能了设备树情况下,内核会自动编译对应的设备树,当然用户也可以单独编译设备树。
DTB 可以被内核与 BootLoader 识别解析,通常在制作 NAND Flash、SD Card 启动镜像时,通常会为 DTB 文件留下一部分存储区域以存储 DTB,在 BootLoader 启动内核时,会先读取 DTB 到内存。
学习野火i.MX Linux 开发实战指南_第5张图片
Linux 的设备树中,可描述的硬件信息包括以下几类:

  1. CPU 的数量和类别
  2. 存基地址和大小
  3. 总线和桥
  4. 外设连接
  5. 中断控制器和中断使用情况
  6. GPIO 控制器和 GPIO 使用情况
  7. Clock 控制器和 Clock 使用情况

4.根文件系统

根文件系统的英文名称叫做rootfs,这个是Linux在初始化阶段加载的第一个文件系统,根文件系统包括根目录和真实文件系统,根文件系统得名之所以在前面加上一个“根”,是因为他是加载其他文件系统的根,如果没有这个根的话,其他的文件系统也就没有办法加载。

以上就是学习野火i.mx6ull开发板教程的一部分内容,详细的知识可以关注微信公众号“野火电子”获取完整的资料。

你可能感兴趣的:(学习野火i.MX Linux 开发实战指南)