Linux|嵌入式 Linux 的基础知识介绍

Linux|嵌入式 Linux 的基础知识介绍



Linux|嵌入式 Linux 的基础知识介绍



Linux|嵌入式 Linux 的基础知识介绍

嵌入式Linux是Linux内核的改编版 , 用于嵌入式系统 。 嵌入式Linux最流行的例子是Android 操作系统 。
但是 , 需要大量硬件资源来支持嵌入式 Linux , 特别是如果它将部署在实时机器对机器(M2M) 通信、机器人控制或复杂计时应用等用例中时. 这些资源至少包括支持以太网和其他基本接口的嵌入式硬件平台(板卡或片上系统) , 以及用于容纳操作系统、库、文件系统、应用程序、引导加载程序、等等 。

桌面 Linux 与嵌入式Linux
嵌入式 Linux 是开源的、可修改的、用C 编写的 。 而桌面Linux或任何其他操作系统一样 , 嵌入式Linux 的作用是从底层处理器中抽象出用户和应用程序 , 内存和其他硬件组件;为各种功能分配和交付系统资源;同时管理多个任务和应用程序等等 。

尽管如此 , 如果您现在还没有注意到 , 嵌入式 Linux 和传统桌面Linux 之间存在许多显着差异 。 这些包括例如直接从闪存而不是硬盘启动的能力 。
下面提供了一张图表 , 比较了嵌入式 Linux 和桌面Linux 之间的一些主要差异 。

嵌入式 Linux:交叉编译器、库和引导加载程序
由于嵌入式 Linux 是为特定应用程序设计的 , 因此在开始进行需要开源操作系统的系统设计时 , 工程师必须使用一些特定的开发工具 。 以下当然不是一个详尽的列表 , 但一个好的起点是使用正确的库、强大的交叉编译器和与Linux 内核配对的高效引导加载程序 。
交叉编译器
对于不熟悉的人来说 , 交叉编译器是一种编译器 , 它执行编写的代码 , 以便在编译器所在的机器之外的其他机器上运行 。 例如 , 在您的 PC 或笔记本电脑上运行的交叉编译器能够生成为Android 智能手机等嵌入式系统编写的代码 。

嵌入式 Linux 系统需要交叉编译器 , 因为这些设备通常没有在本地编译代码所需的资源 , 因此必须在其他地方编译然后交付给目标 。
对于提供大小优化、支持控制处理的特性等功能的交叉编译器 , 有多种选择 。 但是这里列出了一些最常见的交叉编译器:Buildroot、Crosstool-NG、Yocto 。
C 库
C 库提供内核和应用程序之间的接口 , 因此必须是交叉编译过程的一部分 。 嵌入式Linux 系统中的任何程序 , 无论是用python、java 还是其他语言编写的 , 都必须在运行时调用C 库才能通过Linux 内核访问硬件资源 。

下面是一些在嵌入式 Linux 系统中使用的流行C 库 。
glibc– 标准的GNU C 库功能丰富 , 但代价是占用大量内存 。 它也没有任何配置选项 。
uClibc– “u”表示uClibc 是一个小型的微控制器C 库 , 用于嵌入式系统 。
musl– musl 也很小 , 在RAM 和存储量有限的系统中是一个不错的选择 。
eglibc– eglibc 与glibc 相同 , 但做了一些修改 , 使其更适合在嵌入式设备中使用 , 例如支持配置 。
特定于应用程序的库
嵌入式 Linux 内核的功能有限 , 因此需要特定的库 。 下面列出了一些受欢迎的 。
libgpiod–如今 , 标准命令行并不是与Linux 设备文件交互的唯一方式 。 libgpiod 用于与Linux 设备中的GPIO 硬件交互 。