树莓派3B+的uboot启动内核

本文详述了树莓派3B+使用U-Boot替代官方系统,从BootLoader到Linux内核的启动流程。涵盖U-Boot与Linux内核的编译、配置、启动参数设置,以及通过TFTP、NFS实现远程内核加载与根文件系统挂载的过程。

前言

  入手一个树莓派Raspberry 3B+后准备拿来当学习嵌入式Linux及深度学习边缘计算的板子,从BootLoader到Linux内核再到深度学习推理框架。本文主要是让树莓派启动Linux内核后开启一个命令行窗口,旨在了解系统启动过程。不用树莓派官方提供图形界面系统。中间走了很多坑,让我们一步步来捋一捋。
在这里插入图片描述

树莓派的启动流程分析

  • 启动流程[1]
    1. First stage bootloader
      树莓派上电后,SoC 中的 bootloader 首先被执行,其作用是挂载 SD 卡上的 FAT32 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM 中,用户无法修改。
    2. Second stage bootloader (bootcode.bin)
      这个阶段的 bootloader 会从 SD 卡上检索 GPU 固件,将固件写入 GPU,随后启动 GPU。
    3. GPU firmware (start.elf)
      本阶段中,GPU 启动后会检索附加配置文件(config.txt、fixup.dat),根据其内容设置 CPU 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU。
    4. User code (kernel8.img)
      通常情况下,CPU 启动后便开始执行 kernel8.img 中的指令,初始化操作系统内核,在某些情况下,也可以被 U-BOOT 代替,由 U-BOOT 来加载内核。在树莓派 1 代中,User code 部分被保存在 kernel.img 文件中,2 代中,该文件更名为 kernel7.img,3 代中,该文件更名为 kernel8.img
    5. 官方的启动流程介绍链接
  • firmware文件介绍
    SD卡里的boot文件可以在这里下载到官方最新的链接,包含如下文件:
文件 作用
overlays 存放设备树,必须有
bcm2710-rpi-3-b-plus.dtb 设备树文件,根据树莓派型号留一个对应dtb文件的即可
bootcode.bin 第二阶段的bootloader,必须存在
fixup.dat 官方介绍链接,GPU的Videocore固件。
start.elf 和fixup是成对使用的,用来GPU的内存
kernel.img 系统会先后搜寻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和之前版本的。
config.txt 如上面所说,该文件是启动过程第三阶段用来读取参数的。https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md
cmdline.txt 是树莓派原生系统启动时传给内核的参数,我们用uboot其实用不着这个

关于start.elf、fixup.dat文件的x、cd、db后缀的解释,大概是指定GPU使能功能和分配不同内存情况的。链接

start_x is the full firmware that includes camera and software codecs
It is enabled when start_x=1 is in config.txt
start_cd is the cutdown firmware that has no support for firmware hardware blocks like codecs and 3d
It is enabled when gpu_mem=16 is in config.txt

  • 小结
    开机后最先执行存
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值