re: 《UEFI原理与编程》勘误[未登录] djx_zh 2015-12-22 10:27
非常感谢。
祝新年快乐
re: UEFI实战(1)[未登录] djx_zh 2015-10-21 21:59
@马天横
Nt32Pkg只支持-a IA32
re: 《UEFI原理与编程》勘误 djx_zh 2015-09-21 10:12
@刘栋
非常感谢。仲秋快乐。
re: 《UEFI原理与编程》勘误 djx_zh 2015-09-16 09:40
@bearabby
查看原帖 Linux环境下如何编译、运行模拟器
1. edksetup.sh
2. EmulatorPkg/build.sh -a IA32
3. EmulatorPkg/build.sh -a IA32 run
第二步执行完毕后,会在Build/EmultatorPkg/Debug_GCC44/IA32/目录下生成Host文件。
第三步相当于cd Build/EmultatorPkg/Debug_GCC44/IA32/;./Host
@winux
是自己写的。两个有同样FILE_GUID的文件会被认为是同一个文件。通常不会通过GUID在系统全局范围内查找文件,所以文件GUID冲突通常不会造成困扰。
Protocol的GUID一定不能冲突。
re: 《UEFI原理与编程》勘误 djx_zh 2015-08-16 09:42
@winux
UnixPkg已经被EmulatorPkg取代了
@wwy900624
Nt32不支持USB鼠标,至少我没有在Nt32下成功使用过鼠标。
在OVMF或者DUET下USB鼠标是可以的。
re: UEFI 实战(4) protocol djx_zh 2015-06-01 04:38
@周彬彬
对。本文中的方法依赖于 DISK_IO_PRIVATE_DATA的实现,而这个实现没有一个标准,故不能保证向前兼容。这不是一个安全的方法,只是一个快速的方法。安全的方法还是调用OpenPrototocol或LocateProtocol。
@jeanhoo
源代码在MdeModulePkg/Bus/Usb/UsbMouseDxe/
编译MedModulePkg后,应该可以得到UsbMouseDxe.efi
在Shell里 load UsbMouseDxe.efi加载这个驱动
@王帅
Conf/Target文件里的TOOL_CHAIN_TAG你设置的是什么?
通常failded to execute commond是由于你设置的TOOL_CHAIN_TAG在Conf/tools_def.txt中没有找到。
re: 《UEFI原理与编程》勘误[未登录] djx_zh 2015-03-17 23:27
@kurtqiao
多谢更正。^_^
1、模拟器中没有加载鼠标驱动,所有不支持。
你可以用QUMU虚拟机,加载USB鼠标驱动后就可以了。
2、刷机需谨慎啊。用QEMU虚拟机可以很方便的使用.fd固件
3、目前EDK2对Form的支持比较弱,仍然是类文本格式界面。我个人觉得可能会很快出现比较好用的图形界面库。所以没有在书中介绍Form。如果你真的很想学习Form,可以参考Nt32Pkg里面EDK2自带的示例
re: UEFI实战(5) driver djx_zh 2014-09-26 09:08
勘误:
设置 Last Valid Index(LVI)寄存器 (PCM OUT: MBBAR + 15h (POLVI))。LVI是BDL中最后一个准备好缓冲区的buffer descriptor的下标。
把UEFI驱动(必须遵循UEFI驱动规范)烧到rom里,系统会自动加载这个驱动
抱歉了,各位,书还在改稿中。
计划赶不上变化啊,原来以为一两个月就能改好的,现在看来还要至少再两月才能改完。
关闭优化选项,然后就应该可以了
[BuildOptions]
MSFT:DEBUG_*_IA32_CC_FLAGS = /Od
@kllei
exit /b errorcode
这条命令会设置lasterror。
多谢关注。 如果一切顺利的话,新书将于4月份发行。到时将有ffdecoder, ffplayer, CppPkg, GuiPkg 等源码随书发行。
re: 搬家 djx_zh 2013-11-17 23:16
抱歉,www.photovas.com 服务器坏掉了
re: UEFI实战(1)[未登录] djx_zh 2013-11-17 23:12
@Jerry
UEFI 完成硬件初始化后,会遍历GPT硬盘中的FAT分区,从FAT分区找到efi/boot/bootia32.efi 或efi/boot/bootx64.efi, 操作系统的启动由bootx64.efi或bootia32.efi完成。
MBR硬盘启动代码以二进制形式放在活动分区指定的地方。GPT硬盘的启动代码是完整的应用程序,存放在启动分区即FAT分区的efi/boot目录下
@xmuchgw
你要使用AppPkg,当使用LibC时。
@snowman1101
在你application的.inf文件的[LibraryClasses] 下面加入SmbiosDxe
@becky
可能是源代码的问题,我也遇到过main.efi不能运行的情况。 如果你只是学习UEFI, svn co
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 可以下载到所有的源代码。 这样build出来的main.efi 是可以正常运行的。
FILE_GUID 没有特殊意义,编程中不会用到。 你任意生成一个GUID就可以了,你上网搜一下有很多GUID生成器
试一下在你.inf文件的编译选项里加/Zc:wchar_t-
re: UEFI 实战(4) protocol djx_zh 2012-10-05 08:37
代码中少了一句
EFI_PARTITION_TABLE_HEADER* gptHeader = (EFI_PARTITION_TABLE_HEADER*
)gpHeaderBuf;
在你.inf文件的[Protocols]下面加上
gEfiDevicePathToTextProtocolGuid
@SunShine
对。
你自己的.inf 中[LibraryClasses] 有 UefiShellCEntryLib, build看到后会去.dsc中找UefiShellCEntryLib 对应的.inf文件,并编译这个lib。 “|” 前是Lib的名字,后面是Lib的.inf路径。
@SunShine
在.dsc 中的 [LibraryClasses]加入
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
@Amin
你是说编译ffdecoder很辛苦吗? ffdecoder的编译比较麻烦,需要修改EDK2的源码和ffmpeg源码。除非你很有兴趣去学习EDK2, 否则没必要去编译ffdecoder.
ffplayer编译非常简单。
X64的.efi文件已经发给你了。
@Amin
X64的仍有些技术问题没有解决。解码速度已经足够了,但是GraphOutputProtocol的显示速度太慢。 你可以留个email给我,我发给你。
@刘炜
是的。
MdeModulePkg\Universal\Disk\DiskIoDxe\DiskIo.h:36
typedef struct {
UINTN Signature;
EFI_DISK_IO_PROTOCOL DiskIo;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
} DISK_IO_PRIVATE_DATA
@ningle
开发UEFI application的主流还是C。 如果application规模十分庞大,用C++开发效率会高些。
@刘炜
uefi不能识别fat以为的文件系统,要想识别ext,只能自己去修改/编译ext的源码
@刘炜
是全局变量, 定义在MdePkg/Include/Library/UefiBootServicesTableLib.h
初始化在 MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.c
加上这个#include 试试
#include "Library/UefiBootServicesTableLib.h"
@ningle
EFI_COMPONENT_NAME_PROTOCOL 和EFI_COMPONENT_NAME2_PROTOCOL 一般放在CompontName.c中
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gAudioComponentName = {
AudioComponentNameGetDriverName,
AudioComponentNameGetControllerName,
"eng"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gAudioComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) AudioComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) AudioComponentNameGetControllerName,
"en"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mAudioDriverNameTable[] = {
{
"eng;en",
(CHAR16 *)L"Generic AC97 Driver"
},
{
NULL,
NULL
}
};
EFI_STATUS
EFIAPI
AudioComponentNameGetDriverName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
)
{
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
mAudioDriverNameTable,
DriverName,
(BOOLEAN)(This == &gAudioComponentName)
);
}
EFI_STATUS
EFIAPI
AudioComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
return EFI_UNSUPPORTED;
}
@ningle
在.dsc文件末尾添加
!include StdLib/StdLib.inf
具体可参考AppPkg/AppPkg.dsc
re: UEFI实战(1) djx_zh 2012-03-12 07:20
@ningle
谢谢关注。这几部分还没写,我尽快写吧。如果看到写的有不准确的地方,也请告诉我啊。
re: UEFI实战(1) djx_zh 2011-12-06 00:00
UEFI会为每一个分区创建一个controller, 也会为每个硬盘创建一个controller. 通过安装到controller上的DiskIo protocol可以读写每一个扇区。
每个controller上有DevicePath protocol, 你可以通过DevicePath判断该controller是一个扇区,还是一个硬盘。扇区的DevicePath的的最后一个有效Node是HD(SPEC 9.3.6.1)。
当你获得了GPT硬盘的DiskIo之后,可以利用DiskIo读第一个扇区(第0个是MBR或者Protective MBR)得到GPT header,第2~33分区存放的是EFI_PARTITION_ENTRY。 GPT用到的数据结构在MdePkg/Include/Uefi/UefiGpt.h中,GPT的格式可以参考UEFI SPEC 第5章。
可以用VS实现。
re: 一篇介绍字符串匹配的综述 djx_zh 2010-12-14 05:20
@石新飞
如有问题,欢迎讨论。
re: KMP 算法并非字符串查找的优化 djx_zh 2010-07-06 15:10
glibc中用SSE4.2指令集优化的KMP算法,号称最快可以比c的strstr函数加速10倍。
re: thread wrapper djx_zh 2010-06-09 19:08
@梅发坤
Cool, 这样就清晰多了,还容易调试。
re: thread wrapper djx_zh 2010-06-08 15:35
@陈梓瀚(vczh)
对,模板比宏好用。
re: thread wrapper djx_zh 2010-06-08 13:59
@天堂的隔壁
多谢赐教。 是搞的挺复杂的。但可以把这套复杂的东西放到头文件里,用户不用关心。 用户只要调用slaunchX就可以了, 不过这种简单的线程好像不大实用。
@windyrobin
我重新上载了rar文件,现在可以下了。