【.com速译】本文概述了Linux系统的几个主要组件,并描述了这些组件之间的关系。文章解释术语并描述看似基本的细节。每个Linux系统都有许多主要组件。其中一个组件(引导加载程序)在技术上不属于Linux,因此通常不会被提及。其余组件是共同构建整个Linux系统的所有软件元素。这些组件是:BootloaderKernelRootFilesystemServicesApplications/ProgramsBootloader在计算机开机并执行一些初始设置后,它将引导加载程序加载到内存中并运行该代码。引导加载程序的主要工作是找到操作系统二进制文件,将该二进制文件加载到内存中,然后运行操作系统。本文指的是Linux内核。引导加载程序至此完成,内存中的所有代码和数据通常会被操作系统覆盖。在重置或重新启动计算机之前,引导加载程序不会再次运行。嵌入式系统中的引导加载程序不同于典型的笔记本电脑、台式机或服务器计算机。典型的PC通常加载到所谓的BIOS,然后运行一个名为Grub的引导加载程序。嵌入式Linux系统采用Das-UBoot或U-Boot引导。内核一旦引导加载程序将Linux内核加载到内存中并开始运行,内核将开始运行其启动代码。这段启动代码将初始化硬件、初始化系统关键数据结构、初始化调度程序、初始化所有硬件驱动程序、初始化文件系统驱动程序、挂载第一个文件系统、启动第一个程序等等。Linux内核的主要工作是启动应用程序并提供这些应用程序(或Linux中通常称为的程序)之间的协调。Linux内核并不知道所有应该运行的程序。所以Linux内核只启动一个程序,让该程序启动它需要的所有其他程序。第一个程序称为init程序,有时简称为“init”。请注意,第一个程序不需要放在名为“init”的文件中,但通常会放在此处。如果内核找不到init程序,内核的目的就不复存在,它就会崩溃。嵌入式系统的Linux内核之间的主要区别在于它们是为在不同的CPU架构上运行而构建的。否则,内核的行为与典型的PC一致,这是它的优势之一。文件系统在Linux中,内核将程序单独加载到内存中,并且内核要求将这些程序存储在某种组织成文件和目录的介质上。这种文件和目录的组织方式称为文件系统。与许多操作系统一样,Linux在媒体上有一个文件系统(数据实际上存储在存储媒体上)和文件系统驱动程序——知道如何解释和更新媒体上的文件系统数据的代码。在Linux中,这种介质通常是硬盘。但是,嵌入式系统往往没有硬盘,所以介质可能是其他硬件设备,比如SD卡、闪存,甚至内存。与Windows不同,Linux文件系统与目录相关联,而不是与驱动器号相关联。文件系统可以与任何目录相关联,甚至可以与路径中向下几层的目录相关联。这种将文件系统与目录相关联的过程称为“挂载”。Linux以一个名为/(斜线)的空目录开始。在Linux引导期间,最顶层的文件系统与该目录相关联(即挂载到),并且该文件系统的所有内容都出现在/下。这个最顶层的文件系统称为根文件系统。Linux系统需要以某种方式部署根文件系统。因此,这个文件系统是特殊的,不能只是一些目录和文件的随意组合。更多目录如bin和sbin来自这个地方。这里的要点是Linux寻找驻留在文件系统中的第一个程序(init程序)。需要提前创建根文件系统,然后挂载到“/”,内核才能启动init程序。由于嵌入式系统有不同的硬件限制,Linux嵌入式系统通常使用特殊的文件系统格式,而不是台式机或笔记本电脑上使用的典型EXT3、EXT4、btrfs或xfs。当服务内核查找、加载并运行init程序时,该程序负责启动系统的其余部分。此时,内核不再处于活动状态,并继续协调所有正在运行的程序之间共享硬件的任务。有许多不同的初始化程序可用。无论您选择哪个init程序,该程序都会启动系统运行所需的所有服务和应用程序。这组服务包括设置网络、安装额外的文件系统、创建图形环境等等。在Linux下,服务只是在后台运行的程序。Linux人员传统上将这些服务称为守护进程,尽管这些天我很少看到这个术语。应用程序/程序初始化程序还负责启动常规程序。这些程序确实与用户交互。嵌入式系统往往只有几个用户程序,有时甚至只有一个。在嵌入式系统中,这组程序使设备能够执行它应该执行的操作,例如显示地图和航路点、收听麦克风或显示录制的电视节目列表,列表不胜枚举。总结所以综上所述,当嵌入式计算机启动时,Linux系统执行以下步骤:跳转到引导加载程序跳转到内核挂载根文件系统加载并运行init加载并运行后台服务(或守护进程)加载并运行应用程序每个步骤程序调用系统中所需的组件。原标题:嵌入式Linux系统的主要组成部分,作者:JohnBonesio
