由于上学原因,我最近没有编码,但我决定再次开始从事OS开发工作.最近我听说EFI作为BIOS的替代品.我想为使用EFI而不是BIOS的平台开发操作系统.我无法确定从哪里开始.谁能指出我正确的方向?也许解释一下EFI对OS开发的意义,也许可以告诉我可以使用哪些测试环境(最好是虚拟的).坦率地说,我真的不确定EFI到底是什么.我也应该花时间研究ARM组装吗?我知道x86汇编,但我觉得这也已经过时了.我真的迷路了,我很想听听你的意见.
谢谢
我正在构建 EFI 驱动程序,因此无法使用 stdlib,因此没有 memset。我也在 ExitBootServices 之后运行,所以没有 edk2 CopyMem。这是我的功能:
void Set_Memory(VOID* Dest, UINTN Len, CHAR8 Val)
{
for (int i = 0; i < Len; ++i)
{
((UINT8*)Dest)[i] = Val;
}
}
Run Code Online (Sandbox Code Playgroud)
当进行优化编译时,我得到了LNK2001 unresolved external symbol memset. 据推测,MSVC 编译器正在用Set_Memory对memset. 我也无法定义我自己的memset,因为我得到了错误C2169 'memset': intrinsic function, cannot be defined。如何在不失去其他优化的情况下防止这种情况发生?
我正在使用与UEFI驱动程序相关的代码,我遇到了这个:
/* EFI headers define EFI_HANDLE as a void pointer, which renders type
* checking somewhat useless. Work around this bizarre sabotage
* attempt by redefining EFI_HANDLE as a pointer to an anonymous
* structure.
*/
#define EFI_HANDLE STUPID_EFI_HANDLE
#include <ipxe/efi/Uefi/UefiBaseType.h>
#undef EFI_HANDLE
typedef struct {} *EFI_HANDLE;
Run Code Online (Sandbox Code Playgroud)
完整的源代码在此路径 http://dox.ipxe.org/include_2ipxe_2efi_2efi_8h_source.html
这是我第一次遇到匿名结构,我无法弄清楚重新定义void *指向匿名结构的指针的逻辑."古怪的破坏尝试"暗示什么样的黑客攻击?
我正在研究UEFI这个术语时的引导加载程序.我可以理解一些关于UEFI的事情.但是,在什么模式下(Real,Protected,Long),UEFI的系统启动了吗?如果正常的引导加载程序无法使用UEFI,那么在处理UEFI时,引导加载程序的替代方案是什么?我是否需要任何其他编程来创建一个,而不是组装?
我有想法在操作系统旁边运行一个小服务,但我不确定它是否可行.我试着通过阅读一些文档来解决这个问题,但没有达到目标,所以这就是我的问题.
我读到了UEFI运行时服务.
是否可以在固件中安装一个小模块,该模块在所使用的操作系统旁边运行,并将有关设备位置的信息发送到互联网上的地址?
据我所知,我会说,一旦UEFI将控制权移交给OS内核,就不应该在后台运行一些东西.
为了澄清我的意图,我想在我的笔记本电脑上有类似的东西.有Prey项目,但它安装在操作系统内.我正在使用没有自动登录的Linux发行版.如果有人会窃取它,他们可能只会安装Windows.
我对PC固件编程很感兴趣,我只是在研究UEFI规范.令我惊讶的是,它似乎是嵌入固件的整个操作系统的规范.您甚至可以编写UEFI"应用程序",它们直接使用UEFI引导服务运行,而不存在任何其他操作系统.
我找到了博客文章,展示了如何创建"Hello,world!" 可以在UEFI预引导环境中运行的应用程序.这很有趣,同时也很奇怪.我将在常规操作系统上运行我的"Hello,world"程序,谢谢.
UEFI应用程序实际上有哪些用例?花哨的启动配置屏幕?任何"真正的"商用PC固件是否使用UEFI应用程序来实现除引导加载程序和引导配置实用程序之外的任何其他功能?
我是UEFI应用程序开发的新手.
我的要求是,
我需要从我的UEFI应用程序(app.efi)源代码运行UEFI shell命令.需要有关如何做到这一点的指导.
例,
cpUEFI shell中的命令用于将文件从一个路径复制到另一个路径.我想在我的application(app.efi)源代码中以编程方式执行此操作.
编辑:我正在寻找类似于system("command");Linux中的功能.
怎么做到这一点?
我对使用 LinuxBoot 作为 Coreboot 的有效负载的用例感到困惑。
我了解到LinuxBoot 可以完全替代UEFI 的DXE 和BDS 阶段,然后可以直接加载引导程序(比如GRUB)甚至Linux 内核。
现在,我还了解到 LinuxBoot 可以用作 Coreboot 的有效负载。
如果 LinuxBoot 可以做从平台初始化到加载内核的所有事情,那为什么有人还要把 Coreboot 放在序列中呢?简单地说,为什么存在使用 LinuxBoot 作为 Coreboot 的有效载荷的用例?Coreboot 将扮演什么角色?
英特尔 PTT(英特尔平台信任技术)和 TPM 芯片在功能上是否相同?
如果我的主板带有支持 PTT 的 Intel 处理器,我是否会拥有与硬连线 TPM 芯片相同的功能,例如支持裤子等?
您如何发现特定的英特尔处理器是否支持 PTT?