gpt4 book ai didi

linux-kernel - 在内核模式下在 Linux 上读取/写入 EFI 变量

转载 作者:行者123 更新时间:2023-12-02 03:40:15 25 4
gpt4 key购买 nike

我在 Linux UEFI 上工作。我想通过我的驱动程序代码访问 efi 变量。目前我正在寻找像 efi.get_variable() 这样的 linux/efi.h API。但我不知道如何从我的驱动程序代码中调用这些 API。

    struct efi  efi1;
efi_init();
efi_char16_t *name = (efi_char16_t *)"Boot001";
efi_guid_t *vendor = (efi_guid_t *)"8be4df61-93ca-11d2-aa0d-00e098032b8c";
u32 *attr = (u32 *)0x7;
unsigned long data_size = 1024;
void *data = NULL;

printk("\n Showing efi info \n");
stat = efi1.get_variable(name,vendor,attr,&data_size,data);

使用这段代码,我得到了数据的 NULL 值。那你能建议我该怎么做吗?或任何修改?

最佳答案

尝试将代码重写为如下内容(注意,它未经测试):

efi_char16_t name[] = L"Boot0001";
efi_guid_t guid = EFI_GLOBAL_VARIABLE_GUID;
u32 attr;
unsigned long data_size = 0;
u8 *data = NULL;
efi_status_t status;

/* Get real size of UEFI variable */
status = efi.get_variable(name,&guid,&attr,&data_size,data);
if (status == EFI_BUFFER_TOO_SMALL) {
/* Allocate data buffer of data_size bytes */
data = (u8*)vmalloc(data_size);
if (!data) {
/* Your handling here */
}

/* Get variable contents into buffer */
status = efi.get_variable(name,&guid,&attr,&data_size,data);
if (status != EFI_SUCCESS) {
/* Your handling here */
}
else {
/* Variable is now in data */
}
}
else if (status == EFI_NOT_FOUND) {
/* There is no Boot0001 variable. Try Boot0000 maybe? */
}
else {
/* Your handling here */
}

关于linux-kernel - 在内核模式下在 Linux 上读取/写入 EFI 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com