- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我来自使用Java,C#,C ++,Javascript的程序员背景
我给自己买了一台Raspberry Pi(Model 1 A,没有以太网),并玩了一段时间。我使用了Raspbian和Arch Linux ARM(因为据说它很小并且可以自定义)。不幸的是,我没有按需要配置它们。
我正在尝试构建一个外观漂亮(嵌入式)的系统,其唯一目标是快速启动(引导)Raspberry Pi并自动启动将用C#(Mono),C ++(Qt),Java(Java Runtime)编写的测试应用程序或JavaScript / HTML中的内容。
由于我无法摆脱所有日志消息(摆脱了大部分日志),tty登录屏幕,尝试连接到网络的尝试(尽管Model 1 A根本没有以太网),引导很丑陋,花费了很长时间(在某些情况下为+1分钟)。
似乎我必须构建一个最低限度的嵌入式linux,但是我对嵌入式linux元素以及它们如何组合的理论缺乏了解。
我的问题:在树莓派上包含mono,qt,java运行时的嵌入式Linux的理论上需要哪些部分?
到目前为止,我知道以下部分:
硬件(树莓派1 A型)+ SD卡
sd卡包含2个分区,1个引导分区(fat32),1个数据分区(ext4)
引导加载程序
linux内核(可以针对raspi的需求进行优化)
但是那又怎样呢?我的研究因“不需要发行”而迷路了。内核和启动应用程序之间缺少哪些部分?
最佳答案
嵌入式Linux系统由许多不同的部分组成,这些部分相互协作以实现使事情高效运行的相同目标。
理想情况下,它与常规的GNU / Linux系统没有太大区别,但让我们详细了解通用嵌入式系统的构建块。
对于以下解释,我假设为体系结构ARM。以下内容可能因实现而略有不同,但通常是商业嵌入式系统的通用路径。
GNU / Linux嵌入式系统的块
硬件
片上系统
SoC是所有处理发生的地方,它是整个系统的主要处理单元,也是唯一具有“智能”的地方。它负责使用其他硬件并运行您的软件。
它由各种不同的子块组成:
核心+缓存+ MMU-“真实”处理器,例如ARM Cortex-A9。这是选择SoC时要注意的主要事情。
可以通过例如SIMD协处理器,例如NEON。
内部RAM-通常很小。在引导顺序的第一阶段中使用。
各种“外围设备”-通过某种互连连接
架构/总线到核心。这些范围可以从简单的ADC到3D图形加速器。此类IP内核的示例包括:USB,PCI-E,SGX等。
低功耗/实时协处理器-一些系统提供一个或多个协处理器,以帮助主内核执行实时任务(例如工业通信总线)或处理低功耗状态。它/他们的体系结构可能是(或不是)Core的相对体系。
外部RAM
SoC在系统引导后和引导程序本身期间使用它存储临时数据。通常是嵌入式系统在常规操作期间使用的内存。
非易失性内存-可选
可能存在或可能不存在。您的情况就是您提到的SD卡。在其他情况下,可能是NAND,NOR或SPI Dataflash存储器(或它们的任意组合)。
如果存在,它通常是SoC将从中读取的常规数据源,并且通常存储系统工作所需的所有SW组件。
在某些应用程序中可能不是必需/有用的。
外围设备
与上述内容不严格相关的任何内容。
可能是MAC ID EEPROM,某些继电器,网络摄像头或您可能想象的任何东西。
软件
首先,我们介绍了所谓的引导链,它是在您启动SoC并告诉它开始运行后立即发生的事情。在下面的列表中,引导链是点1到点4的后续调用。
除了特定/特殊的实现,它或多或少总是相同的:
引导ROM代码-SoC中包含的一小块内存(通常被掩盖,即出厂时已打样)。 SoC上电时要做的第一件事就是执行其中的代码。
通常根据外部配置引脚,此代码将决定所谓的“启动策略”或“启动顺序”,即在何处(以什么顺序)查找要执行的其他代码。合适的介质是不同的:USB存储设备,USB主机,SD卡,NAND,NOR,SPI数据闪存,以太网,UART等。
如果以上都不包含有效的内容,则Boot ROM通常会发出SoC的软复位,依此类推。
介质中的代码当然不是在原地执行的:将其复制到内部RAM中然后执行。
[下面的两个包含在我们称为引导加载程序的介质中]
第一阶段的引导程序-它刚刚被引导ROM复制到
SoC的内部RAM。必须足够小以适合该内存
(通常远低于100kB)。这是必需的,因为没有Boot ROM
足够大,不知道SoC是哪种外部RAM
附加到。具有初始化的主要重要功能
外部RAM和SoC的外部存储器接口以及
其他可能感兴趣的外设(例如禁用看门狗
计时器)。完成后,它将下一阶段复制到外部RAM,然后
执行它。根据上下文,可以称为MLO,SPL或
其他。
第二阶段自举程序-“主”自举程序。比第一个阶段更大(可能是x10),完成了第一个阶段的初始化
相关外围设备(例如,以太网,其他存储介质,LCD
显示)。允许采用更复杂的逻辑来下一步
和提供-根据复杂程度-高水平
设施(文件系统/卷处理,数据
复制移动解释,LCD输出,交互式控制台,故障保护
政策)。大多数时候,将Linux内核(及相关)加载到
来自某种介质的内存,并将相关信息传递给该介质(例如
如果未嵌入,则对于较新的内核,将放置DTB物理地址
在r2寄存器中-内核然后读取该寄存器并
检索DTB)
Linux内核-操作系统的核心。取决于
硬件平台可能是主线(“正式”)版本,也可能不是。
通常由内置或可加载完成(从外部
源-是否免费)模块。根据硬编码配置和DT初始化使整个系统正常工作所需的所有硬件-启用MMU,编排整个系统并排他地访问硬件。根据启动参数
(cmdline-通常在上一阶段通过)和/或编译
选项,内核会尝试挂载根文件系统。来自
rootfs,它将尝试加载init(即/ sbin / init-其中/是
刚刚安装的rootfs)。
init和rootfs-init是要运行的第一个非内核任务,并且
具有PID1。它实际上激发了您使用计算机所需的一切
系统。在生产嵌入式系统中,它也开始
应用。在这样的系统中,要么是BusyBox要么是定制的
应用。
有关rootfs和发行版的更多信息
Rootfs包含所有不是内核的GNU / Linux系统(除了/ lib / modules和其他位)。
它包含所有管理外围设备的应用程序,例如以太网,WiFi或外部UMTS调制解调器。
包含系统的交互式部分,包含用户界面,以及在启动GNU / Linux系统时看到的所有其他内容-是否嵌入。
“发行版”只是用户空间(非内核)程序和库的一个特定集合(通常),这些程序和库已被验证可以彼此良好地工作,并由特定的人群合在一起。
桌面发行版通常还附带定制的内核和自举程序。例如Fedora,Ubuntu,Debian等。
从术语的一般意义上讲,没有什么可以阻止您创建自己的发行版,这就是每次定制嵌入式系统投入生产时都会发生的事情:实际上,通过Yocto或Buildroot(或手动)之类的工具,您可以决定适合系统目的的非常特殊的软件集合(因此发行,发行)。
概括起来并准确回答您的问题,您正在寻找的缺失部分是init和安装rootfs的过程:内核安装-通过其驱动程序和传递/内置参数-给定的体积本身也可以使用-渲染/ partition(您提到的ext4数据分区)到“ /”安装点。
在此卷/分区中,有一个/ sbin / init可执行文件,内核将执行该文件。
这是我们的GNU / Linux用户空间系统的“大爆炸”:一切可见的地方。根据配置脚本(通常位于/etc/init.d下),您提到的“应用程序”可以由init自动运行,也可以由用户通过终端/ ssh /自动运行,无论init是否使您可以使用。
关于raspberry-pi - 嵌入式Linux的理论要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33236375/
简单的单词自动完成功能仅显示与已输入字符相匹配的单词列表。但是我想根据单词出现的概率对自动完成列表中的单词进行排序,这取决于之前输入的单词,依赖于文本语料库的统计模型。为此我需要什么算法和数据结构?你
今天再来说下网站推广的五种基本方式。可能今天的文章比较宏观,按民间的说法就是比较“虚”,所以不愿看此类文章的同志请慎重。个人认为,要想把推广工作做好,不能只懂得务实,以为成天闷头干活就成了;一定要对
引言 众所周知,数据流分析是实现污点分析的一种常用技术 数据流分析分为过程内的数据流分析与过程间的数据流分析。前者是对一个方法体内的数据流分析,主要是基于CFG分析,不涉及方法调用;后者是基于不同
本文分享自华为云社区《大模型LLM之分布式训练》,作者: 码上开花_Lancer。 随着语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训
本文分享自华为云社区《五大基础算法--动态规划法》,作者: 大金(内蒙的)。 一、基本概念 动态规划法,和分治法极其相似。区别就是,在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来
**摘要:**介绍了Angular中依赖注入是如何查找依赖,如何配置提供商,如何用限定和过滤作用的装饰器拿到想要的实例,进一步通过N个案例分析如何结合依赖注入的知识点来解决开发编程中会遇到的问题。 本
使用 xUnit 2.4.1,我正在寻找一种方法让它在动态跳过集成测试时执行我的扭曲命令。 我知道 xUnit 不是为集成测试而设计的,但我无意将 xUnit 用于某些测试,不是-xUnit 用于其他
我遇到了这个问题; “无损压缩算法声称可以保证使某些文件变小而没有文件变大。 这是; a) Impossible b) Possible but may run for an indeterminat
指向结构的指针如此频繁,以至于有一个特殊的运算符:->。以下表达式是等效的: (*x).y x->y 将这个运算符简单地定义为这样的预处理器宏是否公平: #define (x)-> (*(x).)
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 11 年前关闭。 Improve this
我正在使用各种 jquery 插件,包括延迟加载、scrollTo、图像效果以及从阅读本网站上的人们的帖子中收集的各种片段。现在,所有这些效果都从页脚处发出,并且出现了滞后现象。效果就像是,犹豫,或神
我已经搜索了 1 个小时来了解(并获得可行的来源)调整大小在 CSS(媒体)中发生时如何触发以及由哪个组件触发。 我想要的是它在浏览器中的工作方式,调整窗口大小时它的作用。不是代码。 这样做的目的是创
我有一个问题,我不想实现。我只是想在我的推理中得到一点帮助。 我想确定两个对象是否重叠(它们的 x 和 y 坐标,以及它们的高度和宽度都存储在一个 vector 中),然后,如果重叠,则将它们从当前
我的问题实际上与代码无关,我知道如何反转字符串。 这是一个非常常见的面试问题,所以我想澄清一下我认为正确的解决方案是什么。 所以前提开始了,你在字符串的末尾有一个计数器,然后在开头有一个。然后交换它们
我正在尝试在 Android 上编写一个 GPS 跟踪(类似于慢跑应用程序),但 GPS 位置抖动问题使它变得丑陋。当精度为 FINE 且精度在 5 米以内时,位置每秒抖动 1-n 米。您如何从合法运
这个问题在这里已经有了答案: Why does adding 0.1 multiple times remain lossless? (3 个答案) 关闭 8 年前。 以下表达式返回 false(例
问答系统(Question Answering System,QA) 是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获
NLP问答任务 相似度和规则匹配,都是早期的方法,现在主流的方法,都是基于生成的方法 结构化数据问答,有两种形式,一种是知识图谱形式、一种是关系型数据库形式。 主要应用在企业中,减少销售的
什么是任务型对话: 任务型:用于帮助用户完成某领域的特定任务,例如订餐、查天气、订票等 闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴 问答
常见的对话系统 个人助手 •Apple Siri, Amazon Alexa, Baidu Xiaodu 客户服务•餐厅预定、商品咨询、债务催收 休闲娱乐 •Micr
我是一名优秀的程序员,十分优秀!