re: 《UEFI原理與編程》勘誤[未登錄] djx_zh 2015-12-22 10:27
非常感謝。
祝新年快樂
祝新年快樂
re: UEFI實戰(1)[未登錄] djx_zh 2015-10-21 21:59
@馬天橫
Nt32Pkg只支持-a IA32
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
查看原帖 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
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2015-08-25 21:50
@winux
是自己寫的。兩個有同樣FILE_GUID的文件會被認為是同一個文件。通常不會通過GUID在系統全局范圍內查找文件,所以文件GUID沖突通常不會造成困擾。
Protocol的GUID一定不能沖突。
是自己寫的。兩個有同樣FILE_GUID的文件會被認為是同一個文件。通常不會通過GUID在系統全局范圍內查找文件,所以文件GUID沖突通常不會造成困擾。
Protocol的GUID一定不能沖突。
re: 《UEFI原理與編程》勘誤 djx_zh 2015-08-16 09:42
@winux
UnixPkg已經被EmulatorPkg取代了
UnixPkg已經被EmulatorPkg取代了
re: 補充《UEFI原理與編程》中關于Edk2的調試 djx_zh 2015-07-14 11:25
@wwy900624
Nt32不支持USB鼠標,至少我沒有在Nt32下成功使用過鼠標。
在OVMF或者DUET下USB鼠標是可以的。
Nt32不支持USB鼠標,至少我沒有在Nt32下成功使用過鼠標。
在OVMF或者DUET下USB鼠標是可以的。
re: UEFI 實戰(4) protocol 之利用Protocol提供視頻解碼服務[未登錄] djx_zh 2015-06-02 22:23
re: UEFI 實戰(4) protocol djx_zh 2015-06-01 04:38
@周彬彬
對。本文中的方法依賴于 DISK_IO_PRIVATE_DATA的實現,而這個實現沒有一個標準,故不能保證向前兼容。這不是一個安全的方法,只是一個快速的方法。安全的方法還是調用OpenPrototocol或LocateProtocol。
對。本文中的方法依賴于 DISK_IO_PRIVATE_DATA的實現,而這個實現沒有一個標準,故不能保證向前兼容。這不是一個安全的方法,只是一個快速的方法。安全的方法還是調用OpenPrototocol或LocateProtocol。
re: 補充《UEFI原理與編程》中關于Edk2的調試[未登錄] djx_zh 2015-05-08 20:34
@jeanhoo
源代碼在MdeModulePkg/Bus/Usb/UsbMouseDxe/
編譯MedModulePkg后,應該可以得到UsbMouseDxe.efi
在Shell里 load UsbMouseDxe.efi加載這個驅動
源代碼在MdeModulePkg/Bus/Usb/UsbMouseDxe/
編譯MedModulePkg后,應該可以得到UsbMouseDxe.efi
在Shell里 load UsbMouseDxe.efi加載這個驅動
re: 補充《UEFI原理與編程》中關于Edk2的調試[未登錄] djx_zh 2015-04-29 01:13
@王帥
Conf/Target文件里的TOOL_CHAIN_TAG你設置的是什么?
通常failded to execute commond是由于你設置的TOOL_CHAIN_TAG在Conf/tools_def.txt中沒有找到。
Conf/Target文件里的TOOL_CHAIN_TAG你設置的是什么?
通常failded to execute commond是由于你設置的TOOL_CHAIN_TAG在Conf/tools_def.txt中沒有找到。
re: 補充《UEFI原理與編程》中關于Edk2的調試 djx_zh 2015-04-05 09:59
@zachary
同贊
同贊
re: 《UEFI原理與編程》勘誤[未登錄] djx_zh 2015-03-17 23:27
@kurtqiao
多謝更正。^_^
多謝更正。^_^
re: 補充《UEFI原理與編程》中關于Edk2的調試[未登錄] djx_zh 2015-02-11 01:16
1、模擬器中沒有加載鼠標驅動,所有不支持。
你可以用QUMU虛擬機,加載USB鼠標驅動后就可以了。
2、刷機需謹慎啊。用QEMU虛擬機可以很方便的使用.fd固件
3、目前EDK2對Form的支持比較弱,仍然是類文本格式界面。我個人覺得可能會很快出現比較好用的圖形界面庫。所以沒有在書中介紹Form。如果你真的很想學習Form,可以參考Nt32Pkg里面EDK2自帶的示例
你可以用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的下標。
設置 Last Valid Index(LVI)寄存器 (PCM OUT: MBBAR + 15h (POLVI))。LVI是BDL中最后一個準備好緩沖區的buffer descriptor的下標。
re: 征人試讀 UEFI編程指南 (試讀結束,謝謝各位的反饋)[未登錄] djx_zh 2014-08-15 09:39
多謝各位關注。爭取下周能夠定稿。
re: UEFI實戰(5) driver[未登錄] djx_zh 2014-05-27 01:51
把UEFI驅動(必須遵循UEFI驅動規范)燒到rom里,系統會自動加載這個驅動
re: 征人試讀 UEFI編程指南 (試讀結束,謝謝各位的反饋)[未登錄] djx_zh 2014-05-27 01:01
抱歉了,各位,書還在改稿中。
計劃趕不上變化啊,原來以為一兩個月就能改好的,現在看來還要至少再兩月才能改完。
計劃趕不上變化啊,原來以為一兩個月就能改好的,現在看來還要至少再兩月才能改完。
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2014-03-31 00:48
關閉優化選項,然后就應該可以了
[BuildOptions]
MSFT:DEBUG_*_IA32_CC_FLAGS = /Od
[BuildOptions]
MSFT:DEBUG_*_IA32_CC_FLAGS = /Od
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2014-01-19 00:28
@kllei
exit /b errorcode
這條命令會設置lasterror。
exit /b errorcode
這條命令會設置lasterror。
re: UEFI實戰(5) driver[未登錄] djx_zh 2013-12-23 22:13
多謝關注。 如果一切順利的話,新書將于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目錄下
UEFI 完成硬件初始化后,會遍歷GPT硬盤中的FAT分區,從FAT分區找到efi/boot/bootia32.efi 或efi/boot/bootx64.efi, 操作系統的啟動由bootx64.efi或bootia32.efi完成。
MBR硬盤啟動代碼以二進制形式放在活動分區指定的地方。GPT硬盤的啟動代碼是完整的應用程序,存放在啟動分區即FAT分區的efi/boot目錄下
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] Djx_zh 2013-10-20 23:29
@xmuchgw
你要使用AppPkg,當使用LibC時。
你要使用AppPkg,當使用LibC時。
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2013-03-13 04:22
@snowman1101
在你application的.inf文件的[LibraryClasses] 下面加入SmbiosDxe
在你application的.inf文件的[LibraryClasses] 下面加入SmbiosDxe
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2013-03-13 04:18
@becky
可能是源代碼的問題,我也遇到過main.efi不能運行的情況。 如果你只是學習UEFI, svn co https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 可以下載到所有的源代碼。 這樣build出來的main.efi 是可以正常運行的。
FILE_GUID 沒有特殊意義,編程中不會用到。 你任意生成一個GUID就可以了,你上網搜一下有很多GUID生成器
可能是源代碼的問題,我也遇到過main.efi不能運行的情況。 如果你只是學習UEFI, svn co https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 可以下載到所有的源代碼。 這樣build出來的main.efi 是可以正常運行的。
FILE_GUID 沒有特殊意義,編程中不會用到。 你任意生成一個GUID就可以了,你上網搜一下有很多GUID生成器
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2013-02-21 09:42
試一下在你.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
EFI_PARTITION_TABLE_HEADER* gptHeader = (EFI_PARTITION_TABLE_HEADER*
)gpHeaderBuf;
在你.inf文件的[Protocols]下面加上
gEfiDevicePathToTextProtocolGuid
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2012-09-18 04:32
@SunShine
對。
你自己的.inf 中[LibraryClasses] 有 UefiShellCEntryLib, build看到后會去.dsc中找UefiShellCEntryLib 對應的.inf文件,并編譯這個lib。 “|” 前是Lib的名字,后面是Lib的.inf路徑。
對。
你自己的.inf 中[LibraryClasses] 有 UefiShellCEntryLib, build看到后會去.dsc中找UefiShellCEntryLib 對應的.inf文件,并編譯這個lib。 “|” 前是Lib的名字,后面是Lib的.inf路徑。
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件[未登錄] djx_zh 2012-09-13 09:22
@SunShine
在.dsc 中的 [LibraryClasses]加入
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
在.dsc 中的 [LibraryClasses]加入
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
re: UEFI 實戰(4) protocol 之利用Protocol提供視頻解碼服務 djx_zh 2012-08-24 10:08
@Amin
你是說編譯ffdecoder很辛苦嗎? ffdecoder的編譯比較麻煩,需要修改EDK2的源碼和ffmpeg源碼。除非你很有興趣去學習EDK2, 否則沒必要去編譯ffdecoder.
ffplayer編譯非常簡單。
X64的.efi文件已經發給你了。
你是說編譯ffdecoder很辛苦嗎? ffdecoder的編譯比較麻煩,需要修改EDK2的源碼和ffmpeg源碼。除非你很有興趣去學習EDK2, 否則沒必要去編譯ffdecoder.
ffplayer編譯非常簡單。
X64的.efi文件已經發給你了。
re: UEFI 實戰(4) protocol 之利用Protocol提供視頻解碼服務[未登錄] djx_zh 2012-08-24 08:54
@Amin
X64的仍有些技術問題沒有解決。解碼速度已經足夠了,但是GraphOutputProtocol的顯示速度太慢。 你可以留個email給我,我發給你。
X64的仍有些技術問題沒有解決。解碼速度已經足夠了,但是GraphOutputProtocol的顯示速度太慢。 你可以留個email給我,我發給你。
re: UEFI 實戰(4) protocol [未登錄] djx_zh 2012-08-15 22:02
@劉煒
是的。
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
是的。
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
re: 并行化你的程序--Array of structure 與 structure of Array djx_zh 2012-08-06 22:16
@ningle
開發UEFI application的主流還是C。 如果application規模十分龐大,用C++開發效率會高些。
開發UEFI application的主流還是C。 如果application規模十分龐大,用C++開發效率會高些。
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2012-08-02 20:16
@劉煒
uefi不能識別fat以為的文件系統,要想識別ext,只能自己去修改/編譯ext的源碼
uefi不能識別fat以為的文件系統,要想識別ext,只能自己去修改/編譯ext的源碼
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2012-08-02 11:24
@劉煒
是全局變量, 定義在MdePkg/Include/Library/UefiBootServicesTableLib.h
初始化在 MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.c
加上這個#include 試試
#include "Library/UefiBootServicesTableLib.h"
是全局變量, 定義在MdePkg/Include/Library/UefiBootServicesTableLib.h
初始化在 MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.c
加上這個#include 試試
#include "Library/UefiBootServicesTableLib.h"
re: UEFI 實戰(4) protocol 之利用Protocol提供視頻解碼服務 djx_zh 2012-07-14 22:56
@djx_zh
https://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.1.zip
修正一個bug: 顯示的時候應采用BGRA格式。
增加了timer用于控制播放。按'q'退出播放
https://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.1.zip
修正一個bug: 顯示的時候應采用BGRA格式。
增加了timer用于控制播放。按'q'退出播放
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2012-07-06 09:37
@劉煒
抱歉,我沒有做過TPM的編程
抱歉,我沒有做過TPM的編程
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2012-07-06 09:36
ANSI格式應該沒問題,可以把出錯信息告訴我嗎?
re: UEFI實戰(5) driver[未登錄] djx_zh 2012-04-24 01:41
@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;
}
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;
}
re: UEFI 實戰(4) protocol 之利用Protocol提供視頻解碼服務 djx_zh 2012-03-27 03:58
下載EFI_FFDECODER_PROTOCOL
http://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.0.zip
http://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.0.zip
re: UEFI 實戰(2) HelloWorld 之一 helloworld及.inf文件 djx_zh 2012-03-26 22:41
@ningle
在.dsc文件末尾添加
!include StdLib/StdLib.inf
具體可參考AppPkg/AppPkg.dsc
在.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實現。
每個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, 這樣就清晰多了,還容易調試。
Cool, 這樣就清晰多了,還容易調試。
re: thread wrapper djx_zh 2010-06-08 15:35
@陳梓瀚(vczh)
對,模板比宏好用。
對,模板比宏好用。
re: thread wrapper djx_zh 2010-06-08 13:59
@天堂的隔壁
多謝賜教。 是搞的挺復雜的。但可以把這套復雜的東西放到頭文件里,用戶不用關心。 用戶只要調用slaunchX就可以了, 不過這種簡單的線程好像不大實用。
多謝賜教。 是搞的挺復雜的。但可以把這套復雜的東西放到頭文件里,用戶不用關心。 用戶只要調用slaunchX就可以了, 不過這種簡單的線程好像不大實用。
re: the hierarchy of HTMLNode djx_zh 2009-07-07 16:55
@windyrobin
我重新上載了rar文件,現在可以下了。
我重新上載了rar文件,現在可以下了。