gpt4 book ai didi

raspberry-pi - 嵌入式Linux的理论要求

转载 作者:行者123 更新时间:2023-12-04 05:13:16 28 4
gpt4 key购买 nike

我来自使用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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com