Phoenix Phdebug

1,637 views

Published on

BIOS debug

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,637
On SlideShare
0
From Embeds
0
Number of Embeds
54
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Phoenix Phdebug

  1. 1. Phoenix Debug Forum Outline <ul><li>How to use Break Code </li></ul><ul><li>Phoenix SMI 32Bit Debug </li></ul><ul><li>Setup Item and Summary Item Debug </li></ul>Jainfu Chen
  2. 2. How to use Break Code <ul><li>Set AFLAGS= /DDEBUG in MALE.MAK </li></ul><ul><li>Must to clean Miser component. </li></ul><ul><li>See Miser= Chipset.00xXXXXXX in MAKE.MAK </li></ul><ul><li>There are 3 type can use. </li></ul><ul><li>Break_Point </li></ul><ul><ul><ul><li>> Use to before RAM initial (Before POST 28h) </li></ul></ul></ul><ul><ul><ul><li>BPCALL (After POST 28h or in PmcodeSegment ) </li></ul></ul></ul><ul><ul><ul><li>> Use to after RAM initial and 16 Bit SMI. </li></ul></ul></ul><ul><ul><li>SMI_BPCALL (Only use on SmmCodeSegment) </li></ul></ul><ul><ul><li>> Use to 32 BIT SMI </li></ul></ul>
  3. 3. Phoenix SMI 32Bit Debug <ul><li>Phoenix 32Bit Debug 環境介紹 . </li></ul><ul><li>要如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . </li></ul>
  4. 4. Phoenix SMI 32Bit Debug 介紹 <ul><li>RAM 未起來之前使用 (BIOS Post 0x28h 之前 ) </li></ul><ul><li>1. Break_Point bb xxh </li></ul><ul><li>(  這是使用在  bootboock  ) </li></ul><ul><li>  2. BPCALL xxh </li></ul><ul><li>( 這是使用在 RAM 未使用前 BIOS Post 0x28h 之後 ) </li></ul><ul><li>RAM 起來之後使用 (BIOS Post 0x28h 之後 ) </li></ul><ul><li>SMI_BPCALL xxh </li></ul><ul><li>( SMI_BPCALL 用於 Windows Debug with BIOS Post) </li></ul><ul><li>* 而使用 SMI_BPCALL 只有 3 種狀況下 </li></ul><ul><li>Windows 剛開始進入的第一點 </li></ul><ul><li>Windows 進入 S1 ~ S5 . </li></ul><ul><li>BIOS Post </li></ul>
  5. 5. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>BIOS source code file 注意以下 . </li></ul><ul><li>Make.mak file. </li></ul><ul><li>AFLAGS= /DDEBUG </li></ul><ul><li>2. BCP.ASM file. </li></ul><ul><li>;------------------------------------------------------------------------- </li></ul><ul><li>; Debugger Support </li></ul><ul><li>;------------------------------------------------------------------------- </li></ul><ul><li>INSTALL_DEBUG_CARD 0DA00h </li></ul><ul><li>; Add 32-bit SMI Debugging </li></ul><ul><li>INSTALL_DEBUG SMI32DEBUG_ONLY , DEBUG_ADM_110, ADM_SERIAL_BAUD_RATE_ 19200 </li></ul><ul><li>*PS : 有時 ADM CARD 與 Chipset 會有 Comparable 問題 . ADM CARD 必須要降到 9600 才可以使用 . </li></ul>
  6. 6. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>以上動作完成之後必須關畢 NC.EXE 程式 . 然後進行 Nmaker Clean 動作 . 再做 Nmaker. 當所有動作完成之後才可以加入 SMI_BBCALL 或 Break_Point bb 或 BPCALL . </li></ul>
  7. 7. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>範例 ( 一 ) </li></ul><ul><li>;REGISTER_ACPI_FN PHOENIX_SERVICES32, acpiPsOEMS3SIO </li></ul><ul><li>REGISTER_ACPI_FN SLEEP_TRAP32, OEMACPI, HIGH </li></ul><ul><li>;========================================================== </li></ul><ul><li>smmCodeSegment SEGMENT </li></ul><ul><li>EXTERN pmSetICHAfterG3:NEAR </li></ul><ul><li>OEMACPI PROC NEAR PUBLIC </li></ul><ul><li>SMI_BPCALL 99H ;*JC*&*&20040427 32 BIT DEBUG </li></ul><ul><li>pushad </li></ul><ul><li>cmp al, 00h </li></ul><ul><li>jmp Check_Ring </li></ul><ul><li>Check_S5: </li></ul><ul><li>cmp al, 05h </li></ul><ul><li>jne ACPI_Exit </li></ul>
  8. 8. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>範例 ( 二) </li></ul><ul><li>smmCodeSegment SEGMENT </li></ul><ul><li>acpi32SoftwareSMIDetect PROC PUBLIC USES EBX </li></ul><ul><li>; </li></ul><ul><li>; Check if OS is enabling us... </li></ul><ul><li>; </li></ul><ul><li>SMI_BPCALL 01H ;*JC*&*&20040427 32 BIT DEBUG </li></ul><ul><li>cmp bl, fs:acpiEnableCmd ; Enable ACPI? </li></ul><ul><li>jnz acpiCheckDisable ; No... </li></ul><ul><li>call acpiEnable ; Enable ACPI </li></ul><ul><li>jmp acpiOurs </li></ul><ul><li>; </li></ul><ul><li>; Check if OS is disabling us </li></ul><ul><li>; </li></ul>
  9. 9. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>範例 ( 三) </li></ul><ul><li>hookBBReset PROC NEAR PUBLIC </li></ul><ul><li>; Send out the POST Code for this Call. </li></ul><ul><li>Break_Pointbb 01h </li></ul><ul><li>; Initial & enable ICH6 GPIO IO base </li></ul><ul><li>mov eax, 8000F800h+ICH6_LPC_REG48 ; GPIO </li></ul><ul><li>mov dx, PCI_CONFIG_SPACE </li></ul><ul><li>out dx, eax </li></ul><ul><li>mov dx, PCI_CONFIG_DATA </li></ul><ul><li>in ax, dx </li></ul><ul><li>and ax, 003Fh ; clear GPIO base bits </li></ul><ul><li>or ax, OEM_GPIO_DEFAULT_IO </li></ul><ul><li>out dx, ax </li></ul>
  10. 10. Phoenix SMI 32Bit Debug 如何使用 Phoenix 32 Bit Debug 在 BIOS Post with Windows 介面 . <ul><li>範例 ( 四) </li></ul><ul><li>hookBiosReset PROC NEAR PUBLIC </li></ul><ul><li>mov ebp, edx </li></ul><ul><li>BPCALL 01h </li></ul><ul><li>mov al, SMC192_LOGICAL_DEVICE_NUMBER </li></ul><ul><li>mov ah, LPT_DEVICE </li></ul><ul><li>JMPR bx, sioSmc192RegWriteJBX </li></ul><ul><li>mov al, SMC192_PARALLEL_PORT_MODE </li></ul><ul><li>mov ah, SMC192_LPT_BI </li></ul><ul><li>JMPR bx, sioSmc192RegWriteJBX </li></ul><ul><li>mov ax, DEBUG_LPT_ADDRESS </li></ul><ul><li>mov al, SMC192_PRIMARY_BASE_IO_ADDR_HI </li></ul><ul><li>JMPR bx, sioSmc192RegWriteJBX </li></ul><ul><li>mov ax, DEBUG_LPT_ADDRESS </li></ul><ul><li>xchg ah, al </li></ul><ul><li>mov al, SMC192_PRIMARY_BASE_IO_ADDR_LOW </li></ul><ul><li>JMPR bx, sioSmc192RegWriteJBX </li></ul><ul><li>mov al, SMC192_ACTIVATE </li></ul><ul><li>mov ah, SMC192_DEVICE_ENABLE </li></ul><ul><li>JMPR bx, sioSmc192RegWriteJBX </li></ul>
  11. 11. Setup Item and Summary Item Debug <ul><li>使用正規方式 Debug. </li></ul><ul><li>使用 segment Debug. </li></ul><ul><li>使用 SMI Debug. </li></ul>
  12. 12. Setup Item and Summary Item Debug STEP1: Setup Engine map file
  13. 13. STEP2: Entry setup menu task point
  14. 14. STEP3: Press CTRL+R (Restart & Load Symbols) STEP4: Client site power on & Press F2 key
  15. 15. STEP5: In POST 0Ach , find symbol “ postLaunchSetup ”
  16. 21. So symbol is “nodeSetupExtMemMbInfIfnCtrlDflt”
  17. 22. STEP11 Find symbol in Phoenix Debugger 32
  18. 23. STEP12: You can trace into this setup node .
  19. 24. 對照程式 :
  20. 25. 使用 Segment 方式除錯 : ;*jc*&*&20040801 debug, summary item. oemPostSegmentFar SEGMENT hookCheckRemindersJ PROC FAR PUBLIC DEFPROC_IFN_CONTROL ; PROC FAR pushad push ds push es push si mov es, [bp].bufferSegment mov di, [bp].bufferOffset
  21. 26. pop si pop es pop ds popad mov ax, SUCCESS ENDPROC_IFN_CONTROL ; RET / ENDP hookCheckRemindersJ ENDP oemPostSegmentFar ENDS ;&jc*&*&20040802
  22. 27. 使用 SMI Debug 方式除錯 : ;*jc*&*&20040801 debug, summary item. DEFPROC_IFN_CONTROL ; PROC FAR pushad push ds push es push si mov al, 99h out 84H, al mov es, [bp].bufferSegment mov di, [bp].bufferOffset
  23. 28. Q & A END

×