- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .
8年前关闭。
嵌入式系统中引导加载程序和启动代码的基本意义是什么?有什么不同?
这些放在哪里??以及从上电复位到应用程序启动的流程概览。一般考虑任何平台。
最佳答案
所有处理器都有一些特定于处理器的启动方式。通常处理器地址空间中有一些地址,例如 0xFFFF0000,处理器读取该内存的位置。它找到的值用作编码地址并在该地址开始执行代码。
芯片或电路板设计人员的硬件要做的是确保闪存或某种其他形式的非 volatile 存储器 (ROM) 映射到该地址空间,以便处理器的引导代码和该地址到该特殊位置的引导代码地址,当打开电源并释放复位时,处理器将在那里读取(RAM 是 volatile 的,关闭电源,您将丢失数据,重新打开电源,您将获得一些随机数据,直到RAM 是用别的东西写的)。
因此,处理器运行的第一个代码通常称为引导加载程序,有些人可能会争论,加载程序这个词的后半部分意味着该代码既可以“引导”操作系统或任何要运行的应用程序,也可以作为第二个函数为开发人员提供“加载程序”功能。如果您曾经使用过 U-Boot甚至 GRUB或许多其他引导加载程序,您可能会理解,如果您不接触任何东西,它将启动默认的任何东西,嵌入式应用程序或操作系统,等等。
但是,如果您中断启动过程,并且中断该过程非常特定于平台和软件,则有时您必须按下按钮或将两个引脚短接在一起,或者在串行/UART 上发送转义符或其他一些字符。端口等,然后它进入加载器模式,您可以在其中更改它的引导内容和/或引导加载程序从闪存/ROM 加载默认程序,例如它可能让您使用 XMODEM或 ZMODEM或以太网端口和协议(protocol)将测试程序加载到 RAM 中,然后让您运行该程序而不是默认程序。
有些人将引导软件称为引导加载程序,即使它不允许您中断进程并加载一些备用程序,因为无论如何引导代码可能会将应用程序从非 volatile 存储器“加载”到 RAM 中。
并非所有引导加载程序都需要将应用程序从非 volatile 存储器(闪存/ROM、硬盘、CD-ROM 等)复制到 RAM。某些系统和某些应用程序从闪存/ROM 运行。以 PC 为例:PC 中真正的引导加载程序是 BIOS,它是一个存在于闪存/ROM 中并从其运行的程序。对于带有 DRAM 的系统就像PC一样,无论如何你都必须调出DRAM系统。配置硬件以使 DRAM 工作需要大量代码,有时您可以在 PC 启动时在显示器上看到一些状态。如果您有 SRAM在您的系统中,它可能还需要一些初始化,但通常不像 DRAM 那样复杂,而且通常它会立即启动并准备好使用,只需很少或无需配置,不同的处理器和不同的系统是......不同的。
所以处理器没有复位,以某种方式硬编码在处理器硬件中。它找到了引导代码的入口点并开始执行该代码。该代码通常需要启动并运行外围设备和 RAM,然后运行主应用程序。或者至少在启动该应用程序之前需要尽可能多的硬件。
在嵌入式系统中加载 Linux 可以像启动 RAM 一样简单,然后将内核从 ROM 复制到 RAM,可能准备一些寄存器并可能填充内核查看的一些内存位置,可能是内存大小和备用命令行例如,然后分支到内核的开头。您不必在某些系统上复制内核;你可以分支到它所在的 ROM。然后 Linux 将启动系统的其余部分。在 PC 上,BIOS 做了很多事情,比如调出视频、DRAM、枚举 PCI (e) 总线外设,启动硬盘或其他类似文件系统的设备,然后使用用户在 BIOS 硬盘或类似外设(USB 拇指驱动器或 CD-ROM 等)中定义的。文件系统的开头将包含一些如何根据 BIOS 代码规则引导操作系统的内容。这可能是另一个引导加载程序(GRUB、U-Boot 等),它最终将内核或操作系统启动代码复制到 RAM,然后分支到它...
术语引导加载程序和启动代码可以互换使用。有些人可能会挑剔它们的不同或细微差别,但这通常与复杂性有关,像 U-Boot 这样的引导加载程序具有以太网驱动程序和文件系统驱动程序等。在某种程度上,它是一个操作系统自我,无论哪种方式 U-Boot 都非常复杂。
例如,微 Controller 的启动代码可能很简单,只需几行代码、设置堆栈指针并跳转到 main。启动代码/引导加载程序可以是介于两者之间的任何复杂程度。如前所述,一些嵌入式系统从 ROM 启动并运行它们的应用程序,因此不需要复制和运行。其他人需要复制并运行主应用程序。
有时会涉及硬件或其他一些方案。例如,可能有很多 FPGA基于解决方案,硬件在上电时从 ROM 读取内容并复制它。然后当处理器或其他逻辑被释放时,您的程序或其他数据神奇地存在于 RAM 中,随时可以使用。即使当电源关闭时,它也位于您通常不会触摸的 ROM 中。 Raspberry Pi还有另一个解决方案。该芯片有两个处理器,一个是ARM,另一个是GPU ,图形处理器,完全不同的指令集,专为数学运算等设计。在某种形式中,芯片(可能是芯片上的 ROM)中有一个小的引导加载程序,足以启动和读取 SD 卡。这是 GPU BTW; ARM 处于复位状态。然后 GPU 从 SD 卡读取它的第一个引导加载程序文件,将其复制到 RAM 并运行它。
该引导加载程序执行更多操作,例如启动 DRAM,然后将更复杂的第二(第三?)阶段引导加载程序从 SD 卡复制到 DRAM,然后运行它。该代码可能包含用于为系统执行屏幕/显示功能的 GPU 应用程序。它还,一旦视频和一切准备就绪,再次读取 SD 卡并将 ARM 应用程序从 SD 卡复制到 DRAM,填充 RAM 中的一些项目(异常表中的引导向量(内核的分支))以及 Linux 内核引导代码所需的已知位置的其他一些项目。然后它在 ARM 上释放复位。此时 ARM 唤醒了它的应用程序,即内核,神奇地在 RAM 中......
关于embedded - 嵌入式系统中的引导加载程序和启动代码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15696258/
ASIDE:是的,这可以被认为是一个主观问题,但我希望从回答的统计数据中得出结论。 有各种各样的计算设备。它们的物理尺寸、计算能力和电力各不相同。我想知道嵌入式开发人员认为什么是使系统“嵌入式”的决定
当我听到这个时,我总是想到移动设备。但为什么硬件“嵌入”在那里?整个设备不就是硬件吗?为什么个人电脑没有嵌入式硬件系统? 最佳答案 在当今世界,嵌入式仅指具有以下一项或多项特征的系统: 单一用途(即,
我想测试嵌入式 PowerBI 所以我下载了 the sample app能够发布 pbix 文件并嵌入它。 所以我创建了最简单的 PowerBI 文件,可以使用 Azure SQL 制作,使用 Di
我需要问几个关于词嵌入的问题......可能是基本的。 当我们转换一个词的 one-hot 向量时,例如 king [0 0 0 1 0]嵌入向量 E = [0.2, 0.4, 0.2, 0.2] .
我想知道如何将 CEF 添加到我的 Yocto 项目中。此时,我还没有对项目进行任何修改。它由我们的电路板制造商提供。该板有一个ARM 9。 最佳答案 直接在 CEF 论坛上问这个问题是个好主意,可能
实体是否可以访问其 Embedded 对象的 Embedded?例如: @Embeddable public class Address { @Embedded protected A
我有一个类似于这个的 Morphia 架构: @Entity class BlogEntry { @Embedded List comments } @Embedded class B
我的 pom.xml 中有以下插件配置: com.day.jcr.vault maven-vault-plugi
直到现在,我仍然对 Openembedded-core 和 meta-openembedded 中的食谱感到困惑。很多时候,很难将食谱放在正确的目录中。它们真的很相似,但在食谱的内容上似乎如此不同。
我正在尝试使用此处找到的 Tensorflow 运行单词教程的矢量表示: http://www.tensorflow.org/tutorials/word2vec/index.md 第一个脚本 wor
谁能帮我解释一下 power BI premium 和 power BI Embedded 之间的区别? 最佳答案 Power BI Embedded 容量(也称为 SKU)是 billed hour
我在执行一个 MongoDB 请求时遇到了一些麻烦。我在 Node.js 上下文中使用 MongoDB 3.2 和 Mongoose。这是文档: { _id: ObjectId('12345'),
Xcode 常规选项卡中的“嵌入式二进制文件”和构建阶段选项卡中的“嵌入式框架”有什么区别? General 选项卡中的“Linked Frameworks”和 Build Phrases 选项卡中的
我正在尝试执行 maven install在 pom 上,显示的结果是: Grave: SEC5054: Certificate has expired 此结果会在测试执行开始后立即出现。 我一直在搜
我正在研究 ppc32 和 ppc64 架构来为我的编译器实现一个新的后端,但是我对一个函数的序言有疑问,我已经阅读了几个关于 PowerPC 的 IBM 文档,但是我读到的关于堆栈的信息很少.一个程
我大部分时间都在使用 Atmel Studio 等工具和 IDE 开发微 Controller ,并抽象出幕后发生的事情。 假设在这种情况下,我们直接从闪存执行代码,这在嵌入式系统中可能是这种情况。
我刚刚发现我在(Cortex M0)上编写代码的ARM不支持未对齐的内存访问。 现在,在我的代码中,我使用了很多打包结构,并且从未收到任何警告或硬故障,所以当Cortex不允许不对齐访问时,Corte
我正在研究 Uboot bootstrap 。我有一些关于 Bootloader 的功能和它要处理的应用程序的基本问题: Q1:据我所知,引导加载程序用于将应用程序下载到内存中。在互联网上,我还发现引
我想了解基本的RISC架构。经过一些研发,我想使用MIPS架构。但是,我没有获得有关带有MIPS处理器的嵌入式开发板的良好信息。 如果有人可以提出好的董事会建议,将会有很大的帮助。 问候, 拉姆吉 最
考虑我们正在为裸机 MCU 编写固件,即没有操作系统。有人告诉我不可能(非法?)将参数传递给中断处理函数? 我无法准确理解为什么会这样?这有什么问题? 附注。是否可以在某些 RTOS-es、嵌入式 L
我是一名优秀的程序员,十分优秀!