编译/引导EDK2 树莓派4

news2024/11/25 18:42:05

格蠹的幽兰代码本(RK3588)支持UEFI启动,在阅读RK3588代码的时候发现EDK2也对树莓派系列进行了支持。经过一番尝试,借助幽兰,我也在树莓派上bringup EFI bios(只能引导到Bios setup界面,不知道如何安装OS),在此记录SOP。

PS: 理论上在x86机器上也能生成适用于树莓派的引导文件,但是搭建cross-toolchain实在麻烦。正好幽兰代码本(内核版本:5.10.110-rockchip-rk3588)有完整的编译环境,更重要的是,其编译速度极快,那就拿幽兰本作为编译环境了~

Step1.科学上网,从github(https://github.com/pftf/RPi4)克隆树莓派4的代码:

geduer@ulan:~/Desktop/tianocore/RPi4$ pwd
/home/geduer/Desktop/tianocore/RPi4 #<-- RPi4代码位置

git config --global https.proxy "http://127.0.0.1:17890"
git clone https://github.com/pftf/RPi4.git --recurse #一定要带--recurse参数,用于clone edk/edk-platform等目录
git reset --hard 650cbcdcb76c91e9eff528a8cd64c27efa452b30 #使用RPi4 v1.38 2024/08/28这次提交

Step2.编译树莓派:

#下列命令序列参见edk-platforms的README部分

export WORKSPACE=/home/geduer/Desktop/tianocore/RPi4
cd $WORKSPACE
export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi
. edk2/edksetup.sh
make -C edk2/BaseTools
build -a AARCH64 -t GCC -p Platform/RaspberryPi/RPi4/RPi4.dsc

默认生成Debug版Bios,位于$(WORKSPACE)/Build/RPi4/DEBUG_GCC/FV/RPI_EFI.fd

如果需要生成Release版Bios,可向上述命令追加-b RELEASE参数

build -a AARCH64 -t GCC -p Platform/RaspberryPi/RPi4/RPi4.dsc -b RELEASE

Step3.制作引导SD卡:

这一步用到SDFormatter格式化SD卡及Raspberry Pi Imager烧录RPi4 eeprom固件。

以下是烧录RPI4 eeprom sd的步骤:

点击“Choose Device”--选择"Raspberry Pi4";

点击“选择操作系统”--选择“Use custom”--选择从RPi4 eeprom下载的固件;

最后点击"选择SD卡和"Next“,准备烧录固件.

Step4.更新RPi4 UEFI固件:

RPi4的作者会不定期release RPi4 EFI固件, 从中下载的固件包含下列内容:

将他们复制到Step 3制作的SD卡中,同时替换在幽兰本上编译生成的RPI_EFI.fd。一切就绪后即可引导UEFI版本的树莓派,如下图:

Step5.抓串口日志:

作为Bioser,以上当然不是仅好玩,是为了了解Arm处理器和EDK2的结合(其实是没机会摸高通处理器...)。这时就需要抓串口日志了。RPi4的GPIO原理图如下:

抓运行日志,只要接Gpp06和Gpp08(Gnd/Txd)即可, 实物连接图如下:

最后来一段熟悉的EFI日志输出(居然没有Pei Phase):

Step6.What's next?

试试源码级调试

To be continue.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.Label Studio 介绍

Label Studio 介绍 文章目录 Label Studio 介绍前言一、安装介绍二、Run with Docker Compose1、WSL2安装2、Docker Desktop安装3、Label Studio安装&#xff08;第二种方法 Run with Docker Compose &#xff09; 三、Install for local development1.下载源码2.安装poetry3.安…

YOLO11改进 | 注意力机制 | 用于增强小目标感受野的RFEM

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 近年来&#xff0c;基于深度学习的人脸检…

【计算机网络】计算机网络相关术语

文章目录 NAT概述NAT的基本概念NAT的工作原理1. **基本NAT&#xff08;静态NAT&#xff09;**2. **动态NAT**3. **NAPT&#xff08;网络地址端口转换&#xff0c;也称为PAT&#xff09;** 底层实现原理1. **数据包处理**2. **转换表**3. **超时机制** NAT的优点NAT的缺点总结 P…

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …

linux 下 verilog 简明开发环境附简单实例

author: hjjdebug date: 2024年 10月 12日 星期六 10:34:13 CST descripton: linux 下 verilog 简明开发环境附简单实例 甲: 安装软件 1. sudo apt install iverilog 该包verilog 源代码的编译器iverilog&#xff0c;其输出是可执行的仿真文件格式vvp格式 它可以检查源代码中…

ubuntu20.4环境下gcc-aarch64交叉编译器的安装

交叉编译器&#xff08;Linux环境&#xff09;arm gcc 8.3一共有5个版本&#xff0c;常用的有4个版本&#xff08;另外一个为大端linux版本&#xff09;&#xff0c;分别是32bit裸机版本&#xff08;arm-eabi&#xff09;、64bit裸机版本&#xff08;aarch64-elf&#xff09;、…

4. 单例模式线程安全问题--是否加锁

单例模式线程安全问题--是否加锁 是否加锁问题指什么&#xff1f;解决多线程并发来带的问题继承MonoBehaviour的单例模式不继承MonoBehaviour的单例模式 总结 是否加锁问题指什么&#xff1f; 如果程序当中存在多线程&#xff0c;我们需要考虑当多个线程同时访问同一个内存空间…

【Java】面向UDP接口的网络编程

【Java】面向UDP接口的网络编程 一. 基本通信模型二. APIDatagramSocketDatagramPacket 三. 回显服务器/客户端示例服务器客户端总结 一. 基本通信模型 UDP协议是面向数据报的&#xff0c;因此此处要构建数据报(Datagram)在进行发送。 二. API DatagramSocket DatagramSocke…

Ubuntu 24.04 在 BPI-F3 上通过 SD 卡安装并从 NVME 运行

github 代码&#xff1a; https://github.com/rcman/BPI-F3 Ubuntu 24.04 现在正在我的 BPI-F3 上运行。很快会为 YouTube 制作一个视频。 这应该适用于任何版本的 Linux&#xff0c;仅在 Ubuntu 24.04 上测试过 入门 下载 Bianbu映像并使用您最喜欢的工具将其映像到微型 SD 卡…

进程 vs 线程:你需要知道的关键区别

“大树根深&#xff0c;才能迎风而立。” 进程&#xff1a;计算机中正在执行的程序的实例&#xff0c;它是操作系统进行资源分配的基本单位。 通过写特殊代码&#xff0c;把多个 CPU 核心都能利用起来&#xff0c;这样的代码就称为“并发编程”。 虽然多进程能够解决问题&…

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…

CUDA(C)磁态蒙特卡洛和传输矩阵多GPU并行计算分析

&#x1f3af;要点 使用英伟达GPU、大都会和并行回火算法模拟蒙特卡洛。使用兰佐斯算法计算传输矩阵特征值。使用 Suzuki-Trotter 公式归一化量子无序系统。算法模型特征&#xff1a;多CUDA线程&#xff0c;多GPU和多任务式并行计算。 &#x1f341;磁态分析角度 Python和MA…

BUUCTF-[2019红帽杯]easyRE(Reverse逆向)

第一步 查壳 如图&#xff0c;无壳&#xff0c;ELF文件 第二步 IDA 64位IDA&#xff0c;无法直定位到主函数F5&#xff0c;所以使用&#xff0c;查找关键字符串定位主函数大法ShiftF12 发现这些关键字符串&#xff0c;双击上图蓝色字符串&#xff0c; 然后交叉引用CtrlX跟踪 …

硬件-示波器-巧用触发功能捕捉不连续的信号波形

文章目录 一&#xff1a;使用示波器的信号触发功能二&#xff1a;介绍示波器触发模式界面2.1 触发模式的AUTO档2.2 触发模式的Normal档&#xff08;普通档&#xff09;2.3 触发模式的single档&#xff08;单次触发档&#xff09; 三&#xff1a;在多通道的情况下&#xff0c;选…

电鳗带来灵感,防潮电源诞生,全打印技术的魅力

大家好&#xff01;今天来了解一项受电鳗启发的防潮完全可打印电源的研究——《A moisture-enabled fully printable power source inspired by electric eels》发表于《PNAS》。随着可穿戴电子设备的发展&#xff0c;对安全、一次性且具成本效益的电源需求大增。传统电池存在不…

react native 与 react.js 的区别

React.js ReactJS是一个 JavaScript 库&#xff0c;支持前端 Web 和在服务器上运行&#xff0c;用于构建用户界面和 Web 应用程序。 它主要重点是Web 开发&#xff0c;遵循可重用组件的概念。 React 的虚拟 DOM 比传统的完全刷新模型更快&#xff0c;因为虚拟 DOM 只刷新页面的…

透过《当音乐停止之后》,理解2008年次贷危机:债务、流动性与资本的无声博弈

金融市场就像是整个经济体的循环系统&#xff0c;现代经济体依赖各种授信机制输送营养到整个系统&#xff0c;维持经济的正常运转。书中揭示了2008年次贷危机的背景&#xff0c;以及量化宽松&#xff08;QE&#xff09;政策的作用。通过作者的讲述&#xff0c;我们真正了解2008…

前端继承:原理、实现方式与应用场景

目录 一、定义 二、语法和实现方式 1.原型链继承 2.构造函数继承 3.组合继承 4.ES6类继承 三、使用方式 四、优点 五、缺点 六、适用场景 一、定义 前端继承是指在面向对象编程中&#xff0c;一个对象可以继承另一个对象的属性和方法。在前端领域&#xff0c;通常是指…

HC32F460KETA PETB JATA 工业 自动化 电机

HC32F460 系列是基于 ARM Cortex-M4 32-bit RISC CPU&#xff0c;最高工作频率 200MHz 的高性能 MCU。Cortex-M4 内核集成了浮点运算单元&#xff08;FPU&#xff09;和 DSP&#xff0c;实现单精度浮点算术运算&#xff0c;支持 所有 ARM 单精度数据处理指令和数据类型&#xf…

【精选】基于javaweb的流浪动物领养系统(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…