re: 《UEFI原理與編程》勘誤 djx_zh 2015-09-21 10:12
@劉棟
非常感謝。仲秋快樂(lè)。
re: 《UEFI原理與編程》勘誤 djx_zh 2015-09-16 09:40
@bearabby
查看原帖 Linux環(huán)境下如何編譯、運(yùn)行模擬器
1. edksetup.sh
2. EmulatorPkg/build.sh -a IA32
3. EmulatorPkg/build.sh -a IA32 run
第二步執(zhí)行完畢后,會(huì)在Build/EmultatorPkg/Debug_GCC44/IA32/目錄下生成Host文件。
第三步相當(dāng)于cd Build/EmultatorPkg/Debug_GCC44/IA32/;./Host
@winux
是自己寫(xiě)的。兩個(gè)有同樣FILE_GUID的文件會(huì)被認(rèn)為是同一個(gè)文件。通常不會(huì)通過(guò)GUID在系統(tǒng)全局范圍內(nèi)查找文件,所以文件GUID沖突通常不會(huì)造成困擾。
Protocol的GUID一定不能沖突。
re: 《UEFI原理與編程》勘誤 djx_zh 2015-08-16 09:42
@winux
UnixPkg已經(jīng)被EmulatorPkg取代了
@wwy900624
Nt32不支持USB鼠標(biāo),至少我沒(méi)有在Nt32下成功使用過(guò)鼠標(biāo)。
在OVMF或者DUET下USB鼠標(biāo)是可以的。
@周彬彬
對(duì)。本文中的方法依賴于 DISK_IO_PRIVATE_DATA的實(shí)現(xiàn),而這個(gè)實(shí)現(xiàn)沒(méi)有一個(gè)標(biāo)準(zhǔn),故不能保證向前兼容。這不是一個(gè)安全的方法,只是一個(gè)快速的方法。安全的方法還是調(diào)用OpenPrototocol或LocateProtocol。
@jeanhoo
源代碼在MdeModulePkg/Bus/Usb/UsbMouseDxe/
編譯MedModulePkg后,應(yīng)該可以得到UsbMouseDxe.efi
在Shell里 load UsbMouseDxe.efi加載這個(gè)驅(qū)動(dòng)
@王帥
Conf/Target文件里的TOOL_CHAIN_TAG你設(shè)置的是什么?
通常failded to execute commond是由于你設(shè)置的TOOL_CHAIN_TAG在Conf/tools_def.txt中沒(méi)有找到。
1、模擬器中沒(méi)有加載鼠標(biāo)驅(qū)動(dòng),所有不支持。
你可以用QUMU虛擬機(jī),加載USB鼠標(biāo)驅(qū)動(dòng)后就可以了。
2、刷機(jī)需謹(jǐn)慎啊。用QEMU虛擬機(jī)可以很方便的使用.fd固件
3、目前EDK2對(duì)Form的支持比較弱,仍然是類文本格式界面。我個(gè)人覺(jué)得可能會(huì)很快出現(xiàn)比較好用的圖形界面庫(kù)。所以沒(méi)有在書(shū)中介紹Form。如果你真的很想學(xué)習(xí)Form,可以參考Nt32Pkg里面EDK2自帶的示例
勘誤:
設(shè)置 Last Valid Index(LVI)寄存器 (PCM OUT: MBBAR + 15h (POLVI))。LVI是BDL中最后一個(gè)準(zhǔn)備好緩沖區(qū)的buffer descriptor的下標(biāo)。
多謝各位關(guān)注。爭(zhēng)取下周能夠定稿。
把UEFI驅(qū)動(dòng)(必須遵循UEFI驅(qū)動(dòng)規(guī)范)燒到rom里,系統(tǒng)會(huì)自動(dòng)加載這個(gè)驅(qū)動(dòng)
抱歉了,各位,書(shū)還在改稿中。
計(jì)劃趕不上變化啊,原來(lái)以為一兩個(gè)月就能改好的,現(xiàn)在看來(lái)還要至少再兩月才能改完。
關(guān)閉優(yōu)化選項(xiàng),然后就應(yīng)該可以了
[BuildOptions]
MSFT:DEBUG_*_IA32_CC_FLAGS = /Od
@kllei
exit /b errorcode
這條命令會(huì)設(shè)置lasterror。
多謝關(guān)注。 如果一切順利的話,新書(shū)將于4月份發(fā)行。到時(shí)將有ffdecoder, ffplayer, CppPkg, GuiPkg 等源碼隨書(shū)發(fā)行。
re: 搬家 djx_zh 2013-11-17 23:16
抱歉,www.photovas.com 服務(wù)器壞掉了
@Jerry
UEFI 完成硬件初始化后,會(huì)遍歷GPT硬盤(pán)中的FAT分區(qū),從FAT分區(qū)找到efi/boot/bootia32.efi 或efi/boot/bootx64.efi, 操作系統(tǒng)的啟動(dòng)由bootx64.efi或bootia32.efi完成。
MBR硬盤(pán)啟動(dòng)代碼以二進(jìn)制形式放在活動(dòng)分區(qū)指定的地方。GPT硬盤(pán)的啟動(dòng)代碼是完整的應(yīng)用程序,存放在啟動(dòng)分區(qū)即FAT分區(qū)的efi/boot目錄下
@xmuchgw
你要使用AppPkg,當(dāng)使用LibC時(shí)。
@snowman1101
在你application的.inf文件的[LibraryClasses] 下面加入SmbiosDxe
@becky
可能是源代碼的問(wèn)題,我也遇到過(guò)main.efi不能運(yùn)行的情況。 如果你只是學(xué)習(xí)UEFI, svn co
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 可以下載到所有的源代碼。 這樣build出來(lái)的main.efi 是可以正常運(yùn)行的。
FILE_GUID 沒(méi)有特殊意義,編程中不會(huì)用到。 你任意生成一個(gè)GUID就可以了,你上網(wǎng)搜一下有很多GUID生成器
試一下在你.inf文件的編譯選項(xiàng)里加/Zc:wchar_t-
代碼中少了一句
EFI_PARTITION_TABLE_HEADER* gptHeader = (EFI_PARTITION_TABLE_HEADER*
)gpHeaderBuf;
在你.inf文件的[Protocols]下面加上
gEfiDevicePathToTextProtocolGuid
@SunShine
對(duì)。
你自己的.inf 中[LibraryClasses] 有 UefiShellCEntryLib, build看到后會(huì)去.dsc中找UefiShellCEntryLib 對(duì)應(yīng)的.inf文件,并編譯這個(gè)lib。 “|” 前是Lib的名字,后面是Lib的.inf路徑。
@SunShine
在.dsc 中的 [LibraryClasses]加入
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
@Amin
你是說(shuō)編譯ffdecoder很辛苦嗎? ffdecoder的編譯比較麻煩,需要修改EDK2的源碼和ffmpeg源碼。除非你很有興趣去學(xué)習(xí)EDK2, 否則沒(méi)必要去編譯ffdecoder.
ffplayer編譯非常簡(jiǎn)單。
X64的.efi文件已經(jīng)發(fā)給你了。
@Amin
X64的仍有些技術(shù)問(wèn)題沒(méi)有解決。解碼速度已經(jīng)足夠了,但是GraphOutputProtocol的顯示速度太慢。 你可以留個(gè)email給我,我發(fā)給你。
@劉煒
是的。
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
開(kāi)發(fā)UEFI application的主流還是C。 如果application規(guī)模十分龐大,用C++開(kāi)發(fā)效率會(huì)高些。
@劉煒
uefi不能識(shí)別fat以為的文件系統(tǒng),要想識(shí)別ext,只能自己去修改/編譯ext的源碼
@劉煒
是全局變量, 定義在MdePkg/Include/Library/UefiBootServicesTableLib.h
初始化在 MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.c
加上這個(gè)#include 試試
#include "Library/UefiBootServicesTableLib.h"
@劉煒
抱歉,我沒(méi)有做過(guò)TPM的編程
ANSI格式應(yīng)該沒(méi)問(wèn)題,可以把出錯(cuò)信息告訴我嗎?
@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實(shí)戰(zhàn)(1) djx_zh 2012-03-12 07:20
@ningle
謝謝關(guān)注。這幾部分還沒(méi)寫(xiě),我盡快寫(xiě)吧。如果看到寫(xiě)的有不準(zhǔn)確的地方,也請(qǐng)告訴我啊。
re: UEFI實(shí)戰(zhàn)(1) djx_zh 2011-12-06 00:00
UEFI會(huì)為每一個(gè)分區(qū)創(chuàng)建一個(gè)controller, 也會(huì)為每個(gè)硬盤(pán)創(chuàng)建一個(gè)controller. 通過(guò)安裝到controller上的DiskIo protocol可以讀寫(xiě)每一個(gè)扇區(qū)。
每個(gè)controller上有DevicePath protocol, 你可以通過(guò)DevicePath判斷該controller是一個(gè)扇區(qū),還是一個(gè)硬盤(pán)。扇區(qū)的DevicePath的的最后一個(gè)有效Node是HD(SPEC 9.3.6.1)。
當(dāng)你獲得了GPT硬盤(pán)的DiskIo之后,可以利用DiskIo讀第一個(gè)扇區(qū)(第0個(gè)是MBR或者Protective MBR)得到GPT header,第2~33分區(qū)存放的是EFI_PARTITION_ENTRY。 GPT用到的數(shù)據(jù)結(jié)構(gòu)在MdePkg/Include/Uefi/UefiGpt.h中,GPT的格式可以參考UEFI SPEC 第5章。
可以用VS實(shí)現(xiàn)。
re: 一篇介紹字符串匹配的綜述 djx_zh 2010-12-14 05:20
@石新飛
如有問(wèn)題,歡迎討論。
glibc中用SSE4.2指令集優(yōu)化的KMP算法,號(hào)稱最快可以比c的strstr函數(shù)加速10倍。
re: thread wrapper djx_zh 2010-06-09 19:08
@梅發(fā)坤
Cool, 這樣就清晰多了,還容易調(diào)試。
re: thread wrapper djx_zh 2010-06-08 15:35
@陳梓瀚(vczh)
對(duì),模板比宏好用。
re: thread wrapper djx_zh 2010-06-08 13:59
@天堂的隔壁
多謝賜教。 是搞的挺復(fù)雜的。但可以把這套復(fù)雜的東西放到頭文件里,用戶不用關(guān)心。 用戶只要調(diào)用slaunchX就可以了, 不過(guò)這種簡(jiǎn)單的線程好像不大實(shí)用。
@windyrobin
我重新上載了rar文件,現(xiàn)在可以下了。