代码编织梦想

每个Linux系统都有许多主要组件。其中一个组件(引导加载程序)从技术上讲是Linux之外的,常常不被谈论。其余组件都是共同打造整个Linux系统的所有软件元素。这些组件是:

引导加载程序

内核

根文件系统

服务

应用程序/程序

引导加载程序

计算机通电、执行一些初始设置后,它会加载引导加载程序到内存中并运行该代码。引导加载程序的主要工作是找到操作系统的二进制程序,将该二进制程序加载到内存中,然后运行操作系统。本文指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程序可用。无论选择哪个init程序,该程序都会启动系统发挥用途的所有必需的服务和应用程序。这套服务包括设置网络、挂载额外文件系统和创建图形环境等。

在Linux下,服务只是在后台运行的程序。传统上,Linux人士将这些服务称为守护程序,不过如今我很少看到这个术语。

应用程序/程序

init程序还负责启动常规程序。这些程序确实与用户交互。嵌入式系统常常只有几个用户程序,有时就只有一个。在嵌入式系统中,这组程序使设备能够执行应该做的事情,例如显示地图和航点、收听麦克风或显示录制电视节目的列表,用途无限。

摘要

因此总之,嵌入式计算机启动时,Linux系统将执行以下步骤:

跳入到引导加载程序

跳入到内核

挂载根文件系统

加载并运行init

加载并运行后台服务(或守护程序)

加载并运行应用程序

这每一个步骤都调用系统中所需的组件。

来源:浅谈Linux系统的几大组件! - 21ic电子网

浅谈android系统架构及其应用开发特色_bryce李小白的博客-爱代码爱编程

android系统架构 为了让你能更好的地理解android系统是怎样工作的,我们先来看一下它的系统架构。Android大致可以分为四层架构: Linux内核层,系统运行库层,应用框架层和应用层。 1. Lin

浅谈 linux下的零拷贝机制_校长我错了的博客-爱代码爱编程

转自:https://www.jianshu.com/p/e76e3580e356 什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。   零拷贝给我们带来的好处: 减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱

浅谈 UNIX、Linux、ios、android 他们之间的关系-爱代码爱编程

Unix, 简化形成了Linux,Linux则是Android的内核,而苹果则是使用unix系统作为ios和macos的内核。 几个系统出现的时间 UNIX系统的诞生 1969年,贝尔实验室的研究员肯•汤普森,编写了一款计算机游戏Space Travel,先后在多个系统上运行,然而效果不理想,所以决定自己开发操作系统,就这样UNIX诞生

浅谈Linux内存管理那些事儿-爱代码爱编程

linux相关视频解析: 5个方面分析linux内核架构,让你对内核不再陌生手把手带你实现一个Linux内核文件系统 1 前言 内存管理是Linux内核中非常重要的部分,今天和大家一起学习一下。 当我们要学习一个新知识点时,比较好的过程是先理解出现这个技术点的 背景原因,同期其他解决方案,新技术点解决了什么问题以及它存在哪些不足和改进之处,这样整个

为什么编译linux内核,编译Linux内核—浅谈EABI和OABI-爱代码爱编程

http://blog.csdn.net/ce123/article/details/6925375 引言 初学嵌入式linux开发的时候大家都用的工具链版本多是3.4.5或3.4.2,名字为arm-linux-gcc或arm-softfloat- linux-gnu-gcc,可突然有一天发现这几个版本的编译器无法编译最新的内核了,并且发现人们都

Linux程序组件,浅谈Linux系统的几大组件!-爱代码爱编程

每个Linux系统都有许多主要组件。其中一个组件(引导加载程序)从技术上讲是Linux之外的,常常不被谈论。其余组件都是共同打造整个Linux系统的所有软件元素。这些组件是: 引导加载程序 内核 根文件系统 服务 应用程序/程序 引导加载程序 计算机通电、执行一些初始设置后,它会加载引导加载程序到内存中并运行该代码。引导加载程序的主要

linux系统分区和挂载浅谈,Linux系统分区和挂载浅谈-爱代码爱编程

好久没有写BLOG了,之前出差了2个月,都没怎么看书,也没有太多时间写。回来后一个月人也有点放松。现在开始还是得继续努力啊。不废话了,下面就介绍下Linux系统的分区和挂载 一 Linux的安装 Linux的安装是比较简单的,整个过程和安装XP差不多。首先BIOS中设置从光驱启动,(不知道怎么设置?那你还是先装虚拟机玩玩吧!)会要你选安装模式,直接

linux代码签名,浅谈Linux容器和镜像签名(示例代码)-爱代码爱编程

导读 从根本上说,几乎所有的主要软件,即使是开源软件,都是在基于镜像的容器技术出现之前设计的。这意味着把软件放到容器中相当于是一次平台移植。这也意味着一些程序可以很容易就迁移,而另一些就更困难。 我大约在三年半前开展基于镜像的容器相关工作。到目前为止,我已经容器化了大量应用。我了解到什么是现实情况,什么是迷信。今天,我想简要介绍一下 Linux 容

linux单臂路由,浅谈利用Linux系统实现VLAN间的单臂路由及安全网关的功能-爱代码爱编程

1基本网络示意图1.1交换机上创建3个VLAN(1)VLAN20为管理VLAN,用于交换机的远程管理;(2)VLAN30包含eth1eth10号端口,属于A部门;(3)VLAN40包含eth11eth20号端口,属于B部门。1.2交换机上配置Trunk端口交换机24号端口的端口类型配置为Trunk端口,Trunk端口能够转发不同VLAN的数据。1.3各

红帽Linux性能调优工程师,浅谈linux性能调优之十二:红帽优化策略Tuned-爱代码爱编程

红帽推出的一个动态调优方案,用户可以在不同的时间段内采用不同的调优方案。由于以服务进程形式存在,就可以很方便的和crontab结合!Tuned 是监控并收集各个系统组件用量数据的守护进程,并可使用那些信息根据需要动态调整系统设置。它可以对 CPU 和网络使用的更改作出反应,并调整设置以提高活动设备的性能或者降低不活跃设备的电源消耗。 伴随它的工具 k

浅谈Linux零拷贝-爱代码爱编程

转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习知识的网站 本文探讨Linux中 主要的几种零拷贝技术 以及零拷贝技术 适用的场景 。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入: 01 引文 在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端

浅谈Linux-爱代码爱编程

关于Linux Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件

浅谈linux中的零拷贝技术_极致linux内核的博客-爱代码爱编程

本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入: 引文 在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成: while((n =

linux 中如何使用 id 命令_奋斗的工程师的博客-爱代码爱编程

Linux 中如何使用 id 命令 我从cnaaa.com购买了服务器。 在 Linux 中,id 命令用于显示用户的真实有效的用户ID和组ID。 本文我们通过一些例子来介绍一下如何使用 id 命令。 Linux 中

linux外壳程序编程 shell编程 引号详解_睡觉特早头发特多的博客-爱代码爱编程

shell是命令语言、命令解释程序及程序设计语言的统称; shell是一个命令语言解释器,它拥有自己内建的shell命令; Shell(Bash)单引号、双引号和反引号用法详解; 尽量使用 $(命令) 的方式来引用命令的输出,而不要使用反引号。 前言 1.shell变量的定义及其使用 2.位置参数和环境变量 3.shell中的特殊字符 目

python 代码 c 执行_xiaoma_bk的博客-爱代码爱编程

python C python 路径 当我们导入一个模块时:import xxx ,默认情况下python解释器会搜索当前目录、已安装的内置模块和第三方模块。 临时添加路径 sys.path 返回的是一个列表,该路

centos7 kibana-7.16.3部署_小冰-helloworld的博客-爱代码爱编程

tar -zxvf kibana-7.16.3-linux-x86_64.tar.gz mv kibana-7.16.3-linux-x86_64 kibana-7.16.3 #可以用创建es的账户 useradd es chown -R es:es /opt/kibana-7.16.3 su es #配置文件 kibana.yml server.po

grafana api---这个api令我发愁!_酒千殇的博客-爱代码爱编程

文章目录 序言Create API tokensFolder HTTP APIDashboard HTTP APIIdentifier (id) 和 unique identifier (uid)的区别 Aler