当前位置:网站首页>树莓派的启动流程
树莓派的启动流程
2022-07-29 07:02:00 【嵌入式悦翔园】
一、背景分析
在进一步研究学习 linux 嵌入开发之前,先来了解一下树莓派的启动过程。
树莓派具有一款博通的 BCM2835 系统芯片, 当启动时,CPU 会处于复位状态,由 GPU 核心负责启动系统。
主要研究如下过程:树莓派上电 --> bootloader --> linux 内核
关于Linux启动的详细过程,请看—>Linux启动过程详解
二、过程记录
1) 树莓派上电启动
树莓派上电后,SoC 中的 第一启动程序 首先被执行,其作用是挂载 SD 卡上的 FAT32 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM 中,用户无法进行修改。
4B 在芯片内部增加了一块 EEPROM 来规避风险(由于 4B 硬件升级,导致启动过程较为复杂,如果将代码都写到 ROM 中,会增加复杂度以及引入可能的 BUG ),4B 上电运行 SPI 连接的 EEPROM 中的 bootloader 代码。
2) 树莓派执行 bootloader
在这个阶段,树莓派会加载 SD 卡上的 bootcode.bin(bootloader) 文件作为第二阶段的启动程序。bootloader会启动GPU并加载第三阶段的启动器start.elf。
需要注意,4B 上不使用 bootcode.bin,因为它已由板载 EEPROM 中的启动代码替换。
3) 树莓派启动内核
start.elf 读取存放系统配置的文件 config.txt,根据其内容设置 CPU 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU;
CPU 启动后,加载内核进行启动。
系统会先搜寻 config.txt 中参数 kernel=xxx 指定的文件作为接下来接受系统控制权的对象,树莓派默认该文件是 linux 内核,我们可以替换为用 uboot 作为新一个 bootloader 然后之后再去启动 linux 内核。
如果 config.txt 里没指定 kernel 参数,则默认是先后搜寻 kernel8.img、kernel8-32.img、kernel7.img、kernel.img,分别对应 ARMv8-aarch64、ARMv8-aarch32、ARMv7 和之前版本的。
树莓派启动注意事项
SD 卡里的 boot 需要包含如下文件:
- overlays:存放设备树,必须有
- bcm2711-rpi-4-b:设备树文件
- bootcode.bin:第二阶段的bootloader,必须存在(4B除外)
- fixup*.dat :链接器文件,与 start*.elf 文件匹配
- start*.elf :GPU基本固件,第三阶段启动器
- kernel.img :linux内核镜像,也可以为uboot,然后再进一步启动内核
- config.txt :该文件是启动过程第三阶段用来读取参数的。
- cmdline.txt :是树莓派原生系统启动时传给内核的参数
边栏推荐
- logback日志级别简介说明
- Round avatar of user list and follow small blocks
- Paper reading (62):pointer networks
- [100 cases of unity practice] the single choice multiple choice judgment questions of unity universal question answering system are all common
- ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
- Redis基础篇
- 2-统一返回类DTO对象
- Homebrew brew update 长时间没反应(或卡在 Updating Homebrew...)
- Homebrew brew update doesn't respond for a long time (or stuck in updating homebrew...)
- It's enough for MySQL to have this article (disgusting and crazy typing 37k words, just for Bo Jun's praise!!!)
猜你喜欢

1 - background project construction

2-unified return class dto object

WPF simple login page completion case
Scala higher order (IX): pattern matching in Scala

Some learning and understanding of vintage analysis

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例
Scala 高阶(十):Scala中的异常处理

CAN&CANFD综合测试分析软件LKMaster与PCAN-Explorer 6分析软件的优势对比

【OpenGL】着色器(Shader)的使用

It's enough for MySQL to have this article (disgusting and crazy typing 37k words, just for Bo Jun's praise!!!)
随机推荐
fillder使用
Job 7.28 file IO and standard IO
0 9 布隆过滤器(Bloom Filter)
Operator3 - design an operator
1 - background project construction
2-统一返回类DTO对象
QT专题:基础部件(按钮类,布局类,输出类,输入类,容器类)
反射reflect
Vite3.0 has been released, can you still roll it (list of new features)
如何使用gs_expansion扩展节点
Does Flink support sqlserver databases? Get the changes of SQLSERVER database
【OpenGL】着色器(Shader)的使用
Kubernetes (五) ---------部署 Kubernetes Dashboard
Gin parameter validation
如何与斯堪尼亚SCANIA建立EDI连接?
npm install报错npm ERR Could not resolve dependency npm ERR peer
Full process flow of CMOS chip manufacturing
Homebrew brew update doesn't respond for a long time (or stuck in updating homebrew...)
logback简介及引入方法
路由中的生命周期钩子 - activated与deactivated