- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近开始学习嵌入式系统和嵌入式Linux。我知道在嵌入式系统中,操作系统存储在Flash或ROM上。当它打开时,引导加载程序将操作系统加载到主内存中,对于 Raspberry Pi,该“闪存或 ROM”是一张 SD 卡。
所以,我正在寻找 Raspberry Pi,因为我想开始练习,但我对“启动”Raspberry Pi 的概念感到困惑。我的问题是 Raspberry Pi 使用什么引导加载程序以及它是如何工作的? (即,哪些进程发生在内核之前?head.o
?main.c
?(启动内核))
最佳答案
这个过程已经被描述得很详细了,你在网上找到它应该没有问题。
树莓派包含一个 GPU 和一个 ARM 处理器,两个独立的处理器。 GPU 首先出现,我假设由片上 ROM 或硬件驱动,读取 SD 卡以查找第一个启动文件 bootcode.bin。就我们而言,该 GPU 引导加载程序没有记录,它将芯片提升到一定程度,然后加载 start.elf 另一个 GPU 程序。该 GPU 程序完成启动芯片(ddr init)并最终加载 kernel.img,这是 ARM 应用程序(不是arm引导加载程序,而是Linux中的应用程序),它将直接加载到RAM中,并执行普通引导加载程序的操作准备arm启动linux(一般来说几乎没什么),然后arm启动。
传统的引导加载程序是指您只有一个处理器,并且该处理器也将运行应用程序/操作系统。像 redboot 和 uboot 这样的名称,但这些操作系统本身已经变得过于复杂。启动Linux只需要很少的时间,在RAM中放入一些ATAG并设置几个寄存器,就是这样(当然,在你启动了系统/RAM等之后,这不需要太多代码,但是是delecate/困难的)例如 ddr 的代码),较新的 linux 有更多的东西需要设置,但不是太多。
树莓派启动的优雅之处在于它的简单性以及可移动非 volatile 存储(SD卡)的功能,它带你回到引导加载程序之前的时代,在那里你可以弹出ROM并删除它们,它有一些痛苦,但有一些方法可以解决这个问题。现在可能有第三方复杂的(uboot 等)引导加载程序可用。拥有可移动闪存意味着您不需要复杂的引导加载程序,您不必担心损坏的应用程序会使系统变砖,您可以通过简单地删除闪存并更改它来恢复。引导加载程序已经从避免移除介质发展到避免在编程或使用板上注定有焊接部件的 socket 后必须拆焊闪存和重新焊接。
现在的 kernel.img(曾经加载到 0x00000000)加载到 0x8000。这就是您需要知道的全部内容,它是您将与引导加载程序一起使用的普通内核镜像。然后,您可以编写任何您想要的裸机或其他程序/应用程序,只要将其链接到地址 0x8000 作为二进制文件的开头和起点即可。如果你想使用异常,你需要以某种方式编写异常表(有多种方法可以做到这一点)。另一种方法是使用传统模式设置,您可以使用可选文件 config.txt 进行配置,并将 kernel.img 加载到 0x0000,就像早期的 rpi 一样。就我个人而言,我选择现在默认的 0x8000,其他裸机人员则采取另一条路径...
我有一个非常简单的 xmodem 引导加载程序和一个设置 jtag 引脚的引导加载程序,以便您可以使用 jtag(这两种情况都是为了避免在开发应用程序时使 sd 卡跳动数百到数千次)。还有其他一些,有些更复杂,甚至可能有 USB 来支持网络工作。
关于arm - Raspberry Pi 引导加载程序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317623/
我有一个运行 Raspbian 的 Raspberry Pi 1。我尝试在 Raspberry Pi 3 上运行 SD 卡,但它没有启动。 我已经阅读了有关升级 Raspberry Pi 2 安装以在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我目前正在尝试RadiusNetworks发布的Raspberry Pi iBeacon教程,网址为 http://developer.radiusnetworks.com/2013/10/09/ho
我的公司使用 Raspberry Pi 3 作为产品中的嵌入式 Controller 。用户不会优雅地关闭它,他们只是扳动一个开关。为避免损坏,/boot 和/root 文件系统是只读的。这似乎是防弹
如何使用 Raspberry Pi 作为 b/w USB Tethered 手机和路由器的桥接器,使用“以太网电缆 b/w Raspberry Pi 和路由器”和“USB 电缆 b/w 手机和 Ras
我关注了一个名为Creating an Electron Application for the Raspberry Pi的博客,内容涉及使用Buster OS在Raspberry Pi中启动Elec
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有一个树莓派,并且已经从 raspbmc.com 加载了最新的独立版本。在使用 XBMC 时,我看到 CPU 使用率始终在 90% 以上。查看 XBMC wiki 和常见问题解答后,脏区域似乎是减少
我现在正在做一个小项目。我希望 python 脚本在登录到 GUI 后自动运行。 我按照这里的步骤操作:https://www.raspberrypi.org/forums/view ... 91&t
我正在使用 Android Things 在 Raspberry Pi 上构建应用程序并且我有 7 inch touch screen ,但屏幕永远不会关闭。 是否可以像 Android 手机一样设置
我正在执行一组事件以确保 Redis 在一组嵌入式系统(包括 Raspberry PI)中运行良好。为了修复执行未对齐内存访问的 Redis 的某些代码路径(由于 Redis 3.2 中引入的更改),
我正在尝试使用 Tanuki Java Service Wrapper。 我使用的硬件是带有 Raspbian wheezy 发行版的 Raspberry Pi。 (见 http://www.rasp
我希望构建一个以全屏模式在 Raspberry Pi 上运行的应用程序。我已经尝试过 JavaFX 和基于 Swing 的应用程序,但性能非常糟糕。 在我开始使用 SDL( http://www.li
我的项目在/home/pi/app中 以npm start开头 启动操作系统后如何启动应用程序? ****西类牙文 Mi proyecto esta zh/home/pi/app Arranca la
我正在尝试安装 Kappelt gBridge在 Raspberry Pi 3 B 型上,使用本指南:https://doc.gbridge.io/selfHosted/hostItYourself.
我正在使用我的 Pi 作为文件服务器,最近当我登录时,我看到一条错误消息,指出 libarmmem.so(无法打开共享对象文件),尽管有一些建议运行 apt-get update + 升级它并没有带来
我正在尝试使用 Raspberry# 库通过 Raspberry PI 上的 GPIO 引脚(打开和关闭)执行基本任务。根据 github 上的示例:https://github.com/raspbe
如标题所述,我在将一些用户空间中断代码从另一个 armv7 嵌入式 linux 平台移植到 Raspberry Pi 2 Model B 时遇到问题。 我知道 wiringPi 库(并让它以这种方式工
我正在尝试为 Raspberry Pi B+ 交叉编译 Tensorflow-Lite。为此,我正在关注 these instructions来自官方网站,它们是: git clone https:/
我正在尝试使用 PulseAudio RTP 将音频从 Linux Mint 桌面流式传输到运行 LibreELEC (Kodi) 的 RaspberryPi 3B。我可以使用 RTP 多播成功地流式
我是一名优秀的程序员,十分优秀!