小華的部落格

搜尋此網誌

網頁

星期二, 2月 22, 2011

BlueScreen

發現BlueScreen後,在求救前微軟希望你做的事情:


1. 按 "開始",在 "電腦" 按滑鼠右鍵,選擇 "內容"
2. 選擇 "進階系統設定"
3. 切換到 "進階" 索引標籤,在 "啟動及修復"的分類中,選擇 "設定"
4. 系統失敗分類打勾全選,當有錯誤時會產生Log在底下的路徑檔案中
%SystemRoot%\MEMORY.DMP

這邊有個工具 AppCrashView 讓你可以去分析Log

微軟網站也有一些說明:

另外一個工具 BlueScreenView

星期日, 1月 09, 2011

Microsoft PNPID

今天有同事來問我PNPID,我一直以為我有把這些資料放到部落格了,但是後來才在我的筆記本資料匣內找到,為了大家方便所以就順便放到部落格,給一些需要查資料的人使用。

我另一個同事的部落格也有相關資料,大家也可以去參考一下他的部落格:


WINDOWS GENERIC DEVICE IDs

----------------------------------------------------------------------
Many devices have no standard EISA ID, such as the interrupt controller
or keyboard controller. Also, a set of compatible devices, such as VGA
and Super VGA, are not actually devices, but define a compatibility
hardware subset. Yet another set of IDs needs to be used to identify
buses.

Microsoft has reserved an EISA prefix of "PNP" to identify various
devices that do not have an existing EISA ID, as well as defining
compatibility devices. The IDs are defined in the following tables.

DEVICE ID RANGES

ID range Category
-------- -------------
PNP0xxx System devices
PNP8xxx Network adapters
PNPAxxx SCSI, proprietary CD adapters
PNPBxxx Sound, video capture, multimedia
PNPCxxx - Dxxx Modems

The following device ID is provided only for compatibility
with earlier device ID lists:

Device ID Description
-------- -------------
PNP0802 Microsoft Sound System-compatible device
(obsolete; use PNPB0xx instead)

---------------------------------------------------------------------------
Device ID Description
-------- -------------
***** System Devices - PNP0xxx **************************
--Interrupt Controllers--
PNP0000 AT Interrupt Controller
PNP0001 EISA Interrupt Controller
PNP0002 MCA Interrupt Controller
PNP0003 APIC
PNP0004 Cyrix SLiC MP interrupt controller

--Timers--
PNP0100 AT Timer
PNP0101 EISA Timer
PNP0102 MCA Timer

--DMA--
PNP0200 AT DMA Controller
PNP0201 EISA DMA Controller
PNP0202 MCA DMA Controller

--Keyboards--
PNP0300 IBM PC/XT keyboard controller (83-key)
PNP0301 IBM PC/AT keyboard controller (86-key)
PNP0302 IBM PC/XT keyboard controller (84-key)
PNP0303 IBM Enhanced (101/102-key, PS/2 mouse support)
PNP0304 Olivetti Keyboard (83-key)
PNP0305 Olivetti Keyboard (102-key)
PNP0306 Olivetti Keyboard (86-key)
PNP0307 Microsoft Windows(R) Keyboard
PNP0308 General Input Device Emulation Interface (GIDEI) legacy
PNP0309 Olivetti Keyboard (A101/102 key)
PNP030A AT&T 302 keyboard
PNP030B Reserved by Microsoft
PNP0320 Japanese 106-key keyboard A01
PNP0321 Japanese 101-key keyboard
PNP0322 Japanese AX keyboard
PNP0323 Japanese 106-key keyboard 002/003
PNP0324 Japanese 106-key keyboard 001
PNP0325 Japanese Toshiba Desktop keyboard
PNP0326 Japanese Toshiba Laptop keyboard
PNP0327 Japanese Toshiba Notebook keyboard
PNP0340 Korean 84-key keyboard
PNP0341 Korean 86-key keyboard
PNP0342 Korean Enhanced keyboard
PNP0343 Korean Enhanced keyboard 101b
PNP0343 Korean Enhanced keyboard 101c
PNP0344 Korean Enhanced keyboard 103

--Parallel Devices--
PNP0400 Standard LPT printer port
PNP0401 ECP printer port

--Serial Devices--
PNP0500 Standard PC COM port
PNP0501 16550A-compatible COM port
PNP0510 Generic IRDA-compatible device

--Disk Controllers--
PNP0600 Generic ESDI/IDE/ATA compatible hard disk controller
PNP0601 Plus Hardcard II
PNP0602 Plus Hardcard IIXL/EZ
PNP0603 Generic IDE supporting Microsoft Device Bay Specification
PNP0700 PC standard floppy disk controller
PNP0701 Standard floppy controller supporting MS Device Bay Spec

--Compatibility with early device ID list--
PNP0802 Microsoft Sound System compatible device (obsolete, use
PNPB0xx instead)
--Display Adapters--
PNP0900 VGA Compatible
PNP0901 Video Seven VRAM/VRAM II/1024i
PNP0902 8514/A Compatible
PNP0903 Trident VGA
PNP0904 Cirrus Logic Laptop VGA
PNP0905 Cirrus Logic VGA
PNP0906 Tseng ET4000
PNP0907 Western Digital VGA
PNP0908 Western Digital Laptop VGA
PNP0909 S3 Inc. 911/924
PNP090A ATI Ultra Pro/Plus (Mach 32)
PNP090B ATI Ultra (Mach 8)
PNP090C XGA Compatible
PNP090D ATI VGA Wonder
PNP090E Weitek P9000 Graphics Adapter
PNP090F Oak Technology VGA
PNP0910 Compaq QVision
PNP0911 XGA/2
PNP0912 Tseng Labs W32/W32i/W32p
PNP0913 S3 Inc. 801/928/964
PNP0914 Cirrus Logic 5429/5434 (memory mapped)
PNP0915 Compaq Advanced VGA (AVGA)
PNP0916 ATI Ultra Pro Turbo (Mach64)
PNP0917 Reserved by Microsoft
PNP0918 Matrox MGA
PNP0919 Compaq QVision 2000
PNP091A Tseng W128
PNP0930 Chips & Technologies Super VGA
PNP0931 Chips & Technologies Accelerator
PNP0940 NCR 77c22e Super VGA
PNP0941 NCR 77c32blt
PNP09FF Plug and Play Monitors (VESA DDC)

--Peripheral Buses--
PNP0A00 ISA Bus
PNP0A01 EISA Bus
PNP0A02 MCA Bus
PNP0A03 PCI Bus
PNP0A04 VESA/VL Bus
PNP0A05 Generic ACPI Bus
PNP0A06 Generic ACPI Extended-IO Bus (EIO bus)


-- Real Time Clock, BIOS, System board devices--
PNP0800 AT-style speaker sound
PNP0B00 AT Real-Time Clock
PNP0C00 Plug and Play BIOS (only created by the root enumerator)
PNP0C01 System Board
PNP0C02 General ID for reserving resources required by Plug and Play
motherboard registers. (Not specific to a particular device.)
PNP0C03 Plug and Play BIOS Event Notification Interrupt
PNP0C04 Math Coprocessor
PNP0C05 APM BIOS (Version independent)
PNP0C06 Reserved for identification of early Plug and Play
BIOS implementation.
PNP0C07 Reserved for identification of early Plug and Play
BIOS implementation.
PNP0C08 ACPI system board hardware
PNP0C09 ACPI Embedded Controller
PNP0C0A ACPI Control Method Battery
PNP0C0B ACPI Fan
PNP0C0C ACPI power button device
PNP0C0D ACPI lid device
PNP0C0E ACPI sleep button device
PNP0C0F PCI interrupt link device
PNP0C10 ACPI system indicator device
PNP0C11 ACPI thermal zone
PNP0C12 Device Bay Controller

--PCMCIA Controller Chipsets--
PNP0E00 Intel 82365-Compatible PCMCIA Controller
PNP0E01 Cirrus Logic CL-PD6720 PCMCIA Controller
PNP0E02 VLSI VL82C146 PCMCIA Controller
PNP0E03 Intel 82365-compatible CardBus controller

--Mice--
PNP0F00 Microsoft Bus Mouse
PNP0F01 Microsoft Serial Mouse
PNP0F02 Microsoft InPort Mouse
PNP0F03 Microsoft PS/2-style Mouse
PNP0F04 Mouse Systems Mouse
PNP0F05 Mouse Systems 3-Button Mouse (COM2)
PNP0F06 Genius Mouse (COM1)
PNP0F07 Genius Mouse (COM2)
PNP0F08 Logitech Serial Mouse
PNP0F09 Microsoft BallPoint Serial Mouse
PNP0F0A Microsoft Plug and Play Mouse
PNP0F0B Microsoft Plug and Play BallPoint Mouse
PNP0F0C Microsoft-compatible Serial Mouse
PNP0F0D Microsoft-compatible InPort-compatible Mouse
PNP0F0E Microsoft-compatible PS/2-style Mouse
PNP0F0F Microsoft-compatible Serial BallPoint-compatible Mouse
PNP0F10 Texas Instruments QuickPort Mouse
PNP0F11 Microsoft-compatible Bus Mouse
PNP0F12 Logitech PS/2-style Mouse
PNP0F13 PS/2 Port for PS/2-style Mice
PNP0F14 Microsoft Kids Mouse
PNP0F15 Logitech bus mouse
PNP0F16 Logitech SWIFT device
PNP0F17 Logitech-compatible serial mouse
PNP0F18 Logitech-compatible bus mouse
PNP0F19 Logitech-compatible PS/2-style Mouse
PNP0F1A Logitech-compatible SWIFT Device
PNP0F1B HP Omnibook Mouse
PNP0F1C Compaq LTE Trackball PS/2-style Mouse
PNP0F1D Compaq LTE Trackball Serial Mouse
PNP0F1E Microsoft Kids Trackball Mouse
PNP0F1F Reserved by Microsoft Input Device Group
PNP0F20 Reserved by Microsoft Input Device Group
PNP0F21 Reserved by Microsoft Input Device Group
PNP0F22 Reserved by Microsoft Input Device Group
PNP0F23 Reserved by Microsoft Input Device Group
PNP0FFF Reserved by Microsoft Systems

***** Network Adapters - PNP8xxx ***********************
PNP8001 Novell/Anthem NE3200
PNP8004 Compaq NE3200
PNP8006 Intel EtherExpress/32
PNP8008 HP EtherTwist EISA LAN Adapter/32 (HP27248A)
PNP8065 Ungermann-Bass NIUps or NIUps/EOTP
PNP8072 DEC (DE211) EtherWorks MC/TP
PNP8073 DEC (DE212) EtherWorks MC/TP_BNC
PNP8078 DCA 10 Mb MCA
PNP8074 HP MC LAN Adapter/16 TP (PC27246)
PNP80c9 IBM Token Ring
PNP80ca IBM Token Ring II
PNP80cb IBM Token Ring II/Short
PNP80cc IBM Token Ring 4/16Mbs
PNP80d3 Novell/Anthem NE1000
PNP80d4 Novell/Anthem NE2000
PNP80d5 NE1000 Compatible
PNP80d6 NE2000 Compatible
PNP80d7 Novell/Anthem NE1500T
PNP80d8 Novell/Anthem NE2100
PNP80dd SMC ARCNETPC
PNP80de SMC ARCNET PC100, PC200
PNP80df SMC ARCNET PC110, PC210, PC250
PNP80e0 SMC ARCNET PC130/E
PNP80e1 SMC ARCNET PC120, PC220, PC260
PNP80e2 SMC ARCNET PC270/E
PNP80e5 SMC ARCNET PC600W, PC650W
PNP80e7 DEC DEPCA
PNP80e8 DEC (DE100) EtherWorks LC
PNP80e9 DEC (DE200) EtherWorks Turbo
PNP80ea DEC (DE101) EtherWorks LC/TP
PNP80eb DEC (DE201) EtherWorks Turbo/TP
PNP80ec DEC (DE202) EtherWorks Turbo/TP_BNC
PNP80ed DEC (DE102) EtherWorks LC/TP_BNC
PNP80ee DEC EE101 (Built-In)
PNP80ef DECpc 433 WS (Built-In)
PNP80f1 3Com EtherLink Plus
PNP80f3 3Com EtherLink II or IITP (8 or 16-bit)
PNP80f4 3Com TokenLink
PNP80f6 3Com EtherLink 16
PNP80f7 3Com EtherLink III
PNP80f8 3Com Generic Etherlink Plug and Play Device
PNP80fb Thomas Conrad TC6045
PNP80fc Thomas Conrad TC6042
PNP80fd Thomas Conrad TC6142
PNP80fe Thomas Conrad TC6145
PNP80ff Thomas Conrad TC6242
PNP8100 Thomas Conrad TC6245
PNP8105 DCA 10 MB
PNP8106 DCA 10 MB Fiber Optic
PNP8107 DCA 10 MB Twisted Pair
PNP8113 Racal NI6510
PNP811C Ungermann-Bass NIUpc
PNP8120 Ungermann-Bass NIUpc/EOTP
PNP8123 SMC StarCard PLUS (WD/8003S)
PNP8124 SMC StarCard PLUS With On Board Hub (WD/8003SH)
PNP8125 SMC EtherCard PLUS (WD/8003E)
PNP8126 SMC EtherCard PLUS With Boot ROM Socket (WD/8003EBT)
PNP8127 SMC EtherCard PLUS With Boot ROM Socket (WD/8003EB)
PNP8128 SMC EtherCard PLUS TP (WD/8003WT)
PNP812a SMC EtherCard PLUS 16 With Boot ROM Socket (WD/8013EBT)
PNP812d Intel EtherExpress 16 or 16TP
PNP812f Intel TokenExpress 16/4
PNP8130 Intel TokenExpress MCA 16/4
PNP8132 Intel EtherExpress 16 (MCA)
PNP8137 Artisoft AE-1
PNP8138 Artisoft AE-2 or AE-3
PNP8141 Amplicard AC 210/XT
PNP8142 Amplicard AC 210/AT
PNP814b Everex SpeedLink /PC16 (EV2027)
PNP8155 HP PC LAN Adapter/8 TP (HP27245)
PNP8156 HP PC LAN Adapter/16 TP (HP27247A)
PNP8157 HP PC LAN Adapter/8 TL (HP27250)
PNP8158 HP PC LAN Adapter/16 TP Plus (HP27247B)
PNP8159 HP PC LAN Adapter/16 TL Plus (HP27252)
PNP815f National Semiconductor Ethernode *16AT
PNP8160 National Semiconductor AT/LANTIC EtherNODE 16-AT3
PNP816a NCR Token-Ring 4 Mbs ISA
PNP816d NCR Token-Ring 16/4 Mbs ISA
PNP8191 Olicom 16/4 Token-Ring Adapter
PNP81c3 SMC EtherCard PLUS Elite (WD/8003EP)
PNP81c4 SMC EtherCard PLUS 10T (WD/8003W)
PNP81c5 SMC EtherCard PLUS Elite 16 (WD/8013EP)
PNP81c6 SMC EtherCard PLUS Elite 16T (WD/8013W)
PNP81c7 SMC EtherCard PLUS Elite 16 Combo (WD/8013EW or 8013EWC)
PNP81c8 SMC EtherElite Ultra 16
PNP81e4 Pure Data PDI9025-32 (Token Ring)
PNP81e6 Pure Data PDI508+ (ArcNet)
PNP81e7 Pure Data PDI516+ (ArcNet)
PNP81eb Proteon Token Ring (P1390)
PNP81ec Proteon Token Ring (P1392)
PNP81ed Proteon ISA Token Ring (1340)
PNP81ee Proteon ISA Token Ring (1342)
PNP81ef Proteon ISA Token Ring (1346)
PNP81f0 Proteon ISA Token Ring (1347)
PNP81ff Cabletron E2000 Series DNI
PNP8200 Cabletron E2100 Series DNI
PNP8209 Zenith Data Systems Z-Note
PNP820a Zenith Data Systems NE2000-Compatible
PNP8213 Xircom Pocket Ethernet II
PNP8214 Xircom Pocket Ethernet I
PNP821d RadiSys EXM-10
PNP8227 SMC 3000 Series
PNP8228 SMC 91C2 controller
PNP8231 Advanced Micro Devices AM2100/AM1500T
PNP8263 Tulip NCC-16
PNP8277 Exos 105
PNP828A Intel '595 based Ethernet
PNP828B TI2000-style Token Ring
PNP828C AMD PCNet Family cards
PNP828D AMD PCNet32 (VL version)
PNP8294 IrDA Infrared NDIS driver (Microsoft-supplied)
PNP82bd IBM PCMCIA-NIC
PNP82C2 Xircom CE10
PNP82C3 Xircom CEM2
PNP8321 DEC Ethernet (All Types)
PNP8323 SMC EtherCard (All Types except 8013/A)
PNP8324 ARCNET Compatible
PNP8326 Thomas Conrad (All Arcnet Types)
PNP8327 IBM Token Ring (All Types)
PNP8385 Remote Network Access Driver
PNP8387 RNA Point-to-point Protocol Driver
PNP8388 Reserved for Microsoft Networking components
PNP8389 Peer IrLAN infrared driver (Microsoft-supplied)

***** SCSI, Proprietary CD Adapters - PNPAxxx **********
PNPA002 Future Domain 16-700 compatible controller
PNPA003 Panasonic proprietary CD-ROM adapter (SBPro/SB16)
PNPA01B Trantor 128 SCSI Controller
PNPA01D Trantor T160 SCSI Controller
PNPA01E Trantor T338 Parallel SCSI controller
PNPA01F Trantor T348 Parallel SCSI controller
PNPA020 Trantor Media Vision SCSI controller
PNPA022 Always IN-2000 SCSI controller
PNPA02B Sony proprietary CD-ROM controller
PNPA02D Trantor T13b 8-bit SCSI controller
PNPA02F Trantor T358 Parallel SCSI controller
PNPA030 Mitsumi LU-005 Single Speed CD-ROM controller + drive
PNPA031 Mitsumi FX-001 Single Speed CD-ROM controller + drive
PNPA032 Mitsumi FX-001 Double Speed CD-ROM controller + drive

***** Sound/Video-capture, multimedia - PNPBxxx ********
PNPB000 Sound Blaster 1.5-compatible sound device
PNPB001 Sound Blaster 2.0-compatible sound device
PNPB002 Sound Blaster Pro-compatible sound device
PNPB003 Sound Blaster 16-compatible sound device
PNPB004 Thunderboard-compatible sound device
PNPB005 Adlib-compatible FM synthesizer device
PNPB006 MPU401 compatible
PNPB007 Microsoft Windows Sound System-compatible sound device
PNPB008 Compaq Business Audio
PNPB009 Plug and Play Microsoft Windows Sound System Device
PNPB00A MediaVision Pro Audio Spectrum
(Trantor SCSI enabled, Thunder Chip Disabled)
PNPB00B MediaVision Pro Audio 3D
PNPB00C MusicQuest MQX-32M
PNPB00D MediaVision Pro Audio Spectrum Basic
(No Trantor SCSI, Thunder Chip Enabled)
PNPB00E MediaVision Pro Audio Spectrum
(Trantor SCSI enabled, Thunder Chip Enabled)
PNPB00F MediaVision Jazz-16 chipset (OEM Versions)
PNPB010 Auravision VxP500 chipset - Orchid Videola
PNPB018 MediaVision Pro Audio Spectrum 8-bit
PNPB019 MediaVision Pro Audio Spectrum Basic
(no Trantor SCSI, Thunder chip Disabled)
PNPB020 Yamaha OPL3-compatible FM synthesizer device
PNPB02F Joystick/Game port

***** Modems - PNPCxxx-Dxxx****************************
PNPC000 Compaq 14400 Modem (TBD)
PNPC001 Compaq 2400/9600 Modem (TBD)

======================================================================

DEVICE TYPE CODES

-----------------------------------------------------------------------
Base Type = 0: Reserved
Base Type = 1: Mass Storage Device
Sub-Type = 0: SCSI Controller
Sub-Type = 1: IDE Controller (Standard ATA compatible)
Interface Type = 0: Generic IDE
Sub-Type = 2: Floppy Controller (Standard 765 compatible)
Interface Type = 0: Generic Floppy
Sub-Type = 3: IPI Controller
Interface Type = 0: General IPI
Sub-Type = 80h: Other Mass Storage Controller
Base Type = 2: Network Interface Controller
Sub-Type = 0: Ethernet
Interface Type = 0: General Ethernet
Sub-Type = 1: Token Ring Controller
Interface Type = 0: General Token Ring
Sub-Type = 2: FDDI Controller
Interface Type = 0: General FDDI
Sub-Type = 80h: Other Network Interface Controller

Base Type = 3: Display Controller
Sub-Type = 0: VGA Controller (Standard VGA compatible)
Interface Type = 0: Generic VGA compatible
Interface Type = 1: VESA SVGA Compatible Controller
Sub-Type = 1: XGA Compatible Controller
Interface Type = 0: General XGA Compatible Controller
Sub-Type = 80h: Other Display Controller
Base Type = 4: Multi-media Controller
Sub-Type = 0: Video Controller
Interface Type = 0: General Video
Sub-Type = 1: Audio Controller
Interface Type = 0: General Audio Controller
Sub-Type = 80h: Other Multi-media Controller
Base Type = 5: Memory
Sub-Type = 0: RAM
Interface Type = 0: General RAM
Sub-Type = 1: FLASH Memory
Interface Type = 0: General FLASH Memory
Sub-Type = 80h: Other Memory Device

Base Type = 6: Bridge Controller
Sub-Type = 0: Host Processor Bridge
Interface Type = 0: General Host Processor Bridge
Sub-Type = 1: ISA Bridge
Interface Type = 0: General ISA Bridge
Sub-Type = 2: EISA Bridge
Interface Type = 0: General EISA Bridge
Sub-Type = 3: MicroChannel Bridge
Interface Type = 0: General Micro-Channel Bridge
Sub-Type = 4: PCI Bridge
Interface Type = 0: General PCI Bridge
Sub-Type = 5: PCMCIA Bridge
Interface Type = 0: General PCMCIA Bridge
Sub-Type = 80h: Other Bridge Device
Base Type = 7: Communications Device
Sub-Type = 0: RS-232 Device (XT-compatible COM)
Interface Type = 0: Generic XT-compatible
Interface Type = 1: 16450-compatible
Interface Type = 2: 16550-compatible
Sub-Type = 1: AT-Compatible Parallel Port
Interface Type = 0: Generic AT Parallel Port
Interface Type = 1: Model-30 Bidirectional Port
Interface Type = 2: ECP 1.? compliant port
Sub-Type = 80h: Other Communications Device
Base Type = 8: System Peripherals
Sub-Type = 0: Programmable Interrupt Controller (8259 Compatible)
Interface Type = 0: Generic 8259 PIC
Interface Type = 1: ISA PIC (8259 Compatible)
Interface Type = 2: EISA PIC (8259 Compatible)
Sub-Type = 1: DMA Controller (8237 Compatible)
Interface Type = 0: Generic DMA Controller
Interface Type = 1: ISA DMA Controller
Interface Type = 2: EISA DMA Controller
Sub-Type = 2: System Timer (8254 Compatible)
Interface Type = 0: Generic System Timer
Interface Type = 1: ISA System Timer
Interface Type = 2: EISA System Timers (2 Timers)
Sub-Type = 3: Real Time Clock
Interface Type = 0: Generic RTC Controller
Interface Type = 1: ISA RTC Controller
Sub-Type = 80h: Other System Peripheral
Base Type = 9: Input Devices
Sub-Type = 0: Keyboard Controller
Interface Type = 0: Not applicable
Sub-Type = 1: Digitizer (Pen)
Interface Type = 0: Not applicable
Sub-Type = 2: Mouse Controller
Interface Type = 0: Not applicable
Sub-Type = 80h: Other Input Controller
Base Type = 0Ah: Docking Station
Sub-Type = 0: Generic Docking Station
Interface Type = 0: Not applicable
Sub-Type = 80h: Other type of Docking Station
Base Type = 0Bh: CPU Type
Sub-Type = 0: 386-based processor
Interface Type = 0: Not applicable
Sub-Type = 1: 486-based processor
Interface Type = 0: Not applicable
Sub-Type = 2: Pentium-based processor
Interface Type = 0: Not applicable


Reference

星期六, 11月 06, 2010

ACPI1.0/ ACPI2.0 傻傻分不清楚?

最近在解一條ACPI Bug,遇到了XP 的ACPI Support的問題!
所以這邊留個紀錄,紀錄一下XP到底是支援哪一種ACPI 版本?

從微軟文件可以看到這兩句話:

Windows XP is not an ACPI 2.0 implementation
Windows XP implements ACPI 1.0b and supports a few new features defined in ACPI 2.0

WinXP不是完全支援ACPI2.0 ,WinXP是ACPI1.0b +某些ACPI2.0的功能!

星期四, 10月 14, 2010

UEFI/BIOS 設計課程

又到了工商廣告時間~
朋友的公司有開一些UEFI訓練課程,底下就幫忙放連結,給有需要的人去上課啦!



小弟只是幫忙打廣告,分文未取! 適不適合您的需求請自行斟酌~
小弟並不背書喔!

星期三, 9月 15, 2010

#include 用法

很多朋友在問我 EFI 中如果把#include 寫成下面兩種形式,差別在哪裡?

#include
#include "AAA.h"

我個人認為差別只有在一個不會去當前目錄找,只參考[includes.common],另一個會先去當前目錄找,然後再參考[includes.common]。

而Compiler 在找AAA.h 時並不會連同子目錄一起找,因此你要指定好完整的路徑給他。

另外要注意的事情是[includes.common]路徑中,被先找到的AAA.h 會先被參考,所以同樣兩個路徑內都有AAA.h時,會參考先找到的那一個。

星期一, 8月 16, 2010

基本攝影入門

今天看到一個Blog中有一個爸爸拿著他的單眼相機記錄著他的生活,其中有一張夜景照片他標註著ISO100,快門30秒所拍攝的!

因為很好奇這樣子的設定是代表甚麼意思,因此就跑去問George 老師相關的攝影術語!
他的解釋是:

ISO 值 : 感光度,值越大代表感光能力越好! 因為在夜拍,所以一般會希望感光值越大越好,這樣子才能在灰暗的環境中拍出比較明顯的照片,因此ISO200的感光度 > ISO100。

但,由於目前的感光度是靠電子設備調整,而不是像以前的相機是做在底片上(以前會有所謂的ISO100/200的底片),所以如果你在夜間拍攝的時候,又把ISO值調大的話就有可能把雜訊都拍進來,拍出來的照片就有可能會有一點一點的雜訊,因此夜拍的時候並不一定要使用大的ISO值設定。

快門: 你可能會覺得說ISO值調低到100,那光就可能不夠,而造成拍出來的照片不就會暗暗的嗎?! 因此當你調低ISO值的時候,你還要配合快門來做拍攝的設定! 而快門就像一個閘門可以開關讓光進來! 因此你可以自己設定光能夠進來多久的時間,快門時間越長代表光就越足夠,照片也會越明亮/清晰的感覺!

光圈: 他是由很多葉片堆疊成一個圓圈圈,他是用來控制光進來的大小! 當快門打開時,光圈越大,光能進來的範圍越大,光圈越小光能進來的範圍就越小! 由於他是由不同葉片堆疊成圓圈圈來控制光能夠進來的大小,所以當光圈很小的時候,因為葉片堆疊的關係,有些光線可能會從縫隙中穿過,因此如果你想拍一些燈有那種炫光的感覺就要把光圈調小,而這是一種光圈應用的技巧!

因此,能夠控制光的方式就有三種(ISO,快門,光圈),而當你把ISO值調100時,就可能要配合快門時間加長,而讓光能夠多收集一些! 可是如果你把快門設定成30秒,而在這30秒中相機震動了一下,那麼你拍出來的夜間影像就會模糊掉! 因此一般專業人士在夜拍的時候幾乎都會使用腳架來避免相機在快門打開的時間中晃動。

有些傻瓜相機夜拍功能是透過高感光度+高快門的方式來快點把影像拍下來,以免手震讓影像模糊! 然後使用影像處理方式過濾一些雜訊! 例如一些可以瞬間抓住影像的相機。

而有些傻瓜相機則利用連續幾張模糊的照片計算出一張清楚的照片來解決拍攝過程中的振動問題,例如某款強調夜拍的相機!

因此在買相機的時候還是要注意一下哪種解決方式比較好啦~

傻光相機目前功能越來越強大,對於我這種不懂單眼相機的人來說,能夠快速把夜間影像拍攝好的相機就是好相機! 因為使用單眼相機,不管你怎麼調整,如果不用腳架時拍攝夜間影像時如果被震動到,拍出來的夜間影像就是會模糊! 所以,使用單眼相機就沒辦法邊走邊拍夜間影像,因此我還是挑一台不用腳架又可以夜拍的相機才是王道啦~


很感謝 George 老師說了很多很多有關相機的知識,我也不知道我前面的描述的對或是不對,但是還是很感謝George 老師傳授攝影入門的知識啦!

星期二, 7月 27, 2010

Memory Access

前陣子在幫同事看一個BUG,他的問題是由 ASL code 透過我們BIOS端的所提供的 ACPI NVS buffer傳遞資料,然後在SMI callback的Function內我們透過一個Data structure指標去存取資料,但是位址會偏移兩個Byte.

他原來的Data Structure定義如下:
UINT16;
UINT32;
UINT8;

當他存取UINT8欄位時,資料位址卻偏移了!

後來發現,OS的ASL code內在存取記憶體時是Byte為單位,也就是有做過記憶體對齊!
因此,在我們EFI code內,我們就必須透過 #pragma pack(1) 來做相對應的事情,不然你在存取記憶體內容時會讀到錯誤的值。


星期日, 7月 25, 2010

SF100 燒錄程式

每次重新安裝一次系統都要再去找一次SF100的燒錄程式下載,但是這個網頁連結的字都很小;
所以每次都要很仔細的看才能找到下載的網頁,因此留下一個紀錄在部落格,方便自己去下載他的工具。

下載工具的網頁:

點擊【Software download】就可以開始下載了!

下載把檔案接壓縮後,就可以看到裡面有Windows usb driver,連同他的工具程式安裝好後就可以使用了!

星期日, 7月 11, 2010

EFI_DRIVER_ENTRY_POINT() 的意義

很多人剛開始學習EFI的時候,一定會看到你的Driver.c內有一個EFI_DRIVER_ENTRY_POINT()巨集,那他到底是幹甚麼的呢?

如果你有追進去看他的定義,你就會發現在一般的情況下,他其實是一個空的巨集定義
也就是不代表任何意義,在你Compiler code之後,也不會產生任何東西! 因此,在你的Driver.c內有沒有這個巨集並不會影響到你的code的執行!

不過,一般我們都還是會定義成跟你的Driver EntryPoint函數名稱一樣,來增加"可讀性"

除了一般的情況之外,如果你想把你的Driver放到NT模擬器下面執行時,這個巨集就非常重要了! 因為Window 32 bit環境下的執行檔案的進入點跟EFI不同,所以你的Driver想要在模擬器下執行時,你就必須透過這個巨集來重新定義函數原型宣告,不然你就沒辦法在NT下的模擬器執行你的EFI Driver.

所以結論就是:
如果你沒有要在NT模擬器跑你的EFI Driver,那你是可以忽略這個寫法! 但是,還是建議你保持良好的寫code習慣,增加可讀性,所以多一行code應該是不會花你太多時間啦~

星期三, 6月 30, 2010

EFI_SOURCE

一般在.dsc 中都會去描述你的EFI Driver所在位置
而加入$(EFI_SOURCE)跟沒有加入的差別在哪裡?

答案就是:

有加 $(EFI_SOURCE) 就會是絕對位置
沒加 $(EFI_SOURCE) 就會是相對位置

星期二, 6月 01, 2010

有關鳥公司體驗日相關訊息~

BLOG回歸專業,所以相關廣告資訊我已經把它放在其他網路空間了!
如果有興趣的人請自行參閱下面的連結的資訊:

點我看AD

感恩喔~

P.S 相關報名方式都在AD中...

星期四, 5月 20, 2010

Unicode 字元查詢

在寫UEFI code的人一定常常會用到一些unicode字元,尤其是在SetupMenu.
而有一些特殊字元顯示在畫面上時可能會需要做一些修改,此時如果能知道那個字元的形狀,修改起來就更方便。

這邊就介紹一下我常用的網站,用來查詢 Unicode 字元的地方:

http://www.fileformat.info/info/unicode/char/search.htm?q=U%2B25ba&preview=entity

這個網站可以方便你搜尋你要的字元,你只要在Unicode Character Search的地方的Query輸入你想要的搜尋字元 (格式: U + Unicode) ,例如我要查詢0x25BA這個字元我就輸入:


按下Search 後,就會在下面的地方出現相關的資訊,如下圖所示:

你可以看到我查詢的字元是一個"右箭頭"........ 很方便吧! ^^

星期四, 4月 29, 2010

申請美簽~

最近小弟我要去辦美簽(美國簽證),很多資料要填寫! 跟好幾年前辦美簽的方式差好多!

因為有點小複雜,所以把一些同事跟我自己填資料的心得分享一下:


1.先到AIT美國在臺協會網站填寫預約申請,預約面試日期
http://www.ait.org.tw/zh/visa/niv/#application

a. DS-156(非移民簽證申請表): 線上填寫申請表跟一般申請表
b. 男性還需要多填一份:DS-157 (非移民簽證申請表補充說明) 申請表

2.外交部網站可以方便你查詢護照外文姓名拼音對照表
(一般護照拼音最好跟信用卡英文姓名一樣,以避免國外刷卡問題)
http://www.boca.gov.tw/ct.asp?xitem=1608&ctnode=193

3.男性還要多填一份 DS-157表格,而這份表格內需要填的資料中有些比較特別:

a.會有兵種的兵階資訊,可以從下面網站查詢:
http://en.wikipedia.org/wiki/Military_of_the_Republic_of_China
陸軍:ARMY 海軍:Navy 空軍Air Force 憲兵隊:Military Police

b.國中/高中/大學/研究所資訊可以直接用google去查到你的母校的網站,一般都會有英文版
如果沒有英文版的網頁,那你就要靠下面的郵局網站來幫你轉換學校的中文地址:
http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190103

4.以下是我們同事申辦美簽的經驗分享:

a. 早上8:00的預約的話就是AM8:00進去,如果護照沒帶的話AM10:30前警衛都會放你進去。

不然就要在網路上重新登記,就不能在當天辦好。也就是說只能改天再來。


b. 進去時候警衛會叫你把手機與名片(證件)拿在手上,他會幫你放在置物櫃保管,並給你號碼牌。等下出來的時候可以憑號碼牌跟警衛領回手機。之後會通過X光機,身上的金屬物品(皮帶,手錶)最好放在袋子中。然後袋子要過像海關一樣的X光機。人就過人要走的X光機。領回袋子後就可以走進去排隊。


c.會檢查文件(DS-156 男生要加填DS-157)是不是齊全。像我就是照片貼太上面,沒有延著虛線貼。有點擋到條碼部分。所以那邊的服務人員會幫我重貼,他身上有膠水。我只要照著他們吩咐排隊,坐在椅子上等待。等到我要辦手續的時候,他自然會幫我處理。那邊也有電視,會撥按指紋與下面幾個流程的說明。可以坐在椅子上看要怎麼樣給他們刷條碼,自己要按指紋。

d.家人最好走在一起,因為有些手續家人要一起辦。

e.然後進到面談那關! 面試通過後,遞給你快遞單然後出去填資料。送件地址我就填公司地址。那邊有快遞公司的人會幫你服務。單子填完交給他就好。然後人就可以到外面憑號碼牌領回自己的手機。就可以回去等快遞把我的護照寄來了。 (錢等快遞到的時候再付錢)


我面試日期在下星期,希望也能順利拿到美簽啦~

星期四, 4月 22, 2010

Cx State

最近很少更新部落格,都被一些網友說"小華已經很久沒更新了"...所以就先上來更新些文章QQ..

先說說Cx State 在BIOS端是怎麼跟CPU還有ASL code甚至是SetupMenu串再一起的.

首先,一般BIOS會在SetupMenu中建立出一些item來控制Cx State的Enable/Disable,這部分會因為各家BIOS在SetupMenu上的做法不同而有所不同,但是你只要知道一個東西! 就是一定會有一個地方儲存好SetupMenu上選項內的設定值. (Ex: CMOS/EFI Variable...)

接著,在PPM 的相關 Reference code那邊 (一般都是Ixxel的CPU的PPM reference code)會去參考SetupMenu內的設定值來組態CPU內部的MSR暫存器,至於他是如何得到SetupMenu的設定值又會因為不同的BIOS而有所不同,像是EFI就可能透過Policy來得到,所以要有人把SetupMenu的值放進去Policy內,這樣子Reference code才能參考SetupMenu的選項來組態MSR!

當這邊在一般組態MSR時,他會一邊修改Acpi Table! 例如你想關閉C2/C3,大家都知道去ACPI Table把值改成>100 或是 > 1001就可以了,所以這邊的Reference code會去參考你的SetupMenu的設定值來決定要不要修改ACPI Table內那個回報給OS的值!

其他的部分有牽扯到ASL code的部分我可能就不明說了,請大家搜尋CFGD這個值,看看他在哪邊被放進,然後ASL code為什麼要判斷他! 追個一遍就清楚了^^Y

星期三, 4月 07, 2010

MVP

去年一整年都在忙EFI的案子,在眾多的學長以及同事的幫忙下案子也在驚濤駭浪中完成了!


這個榮譽是屬於大家的,沒有你們的幫忙,我就不會有這個獎項!



要感謝T老大這些主管們的情義相挺,也要感謝V哥/Jackson/Motor 的友情贊助! 感謝雅莉姐,Vincent的幫忙,在這種資源匱乏下一路扶持過來! 也感謝犀利猛先生一路糾正我許多BIOS觀念,特別要感謝 H.C 在小弟忙結婚那段時間一直被凹~

還有其他在背後默默幫助我的同事們也感謝你們~因為有你們,才會有這番榮耀!

星期六, 4月 03, 2010

DirectX v.s VGA driver

最近重新安裝我的工作機的作業系統; 在安裝後,順便安裝了平常在玩的網路遊戲光碟,
結果在執行的時候,卻發現他跳出了一個錯誤訊息:

File=dxvideo.cpp,Line=649,Code=80004001

原本以為是VGA driver的問題,所以花了很多時間去找了最新版的Nvidia driver重新安裝,
然後再去抓了DirectX for XP SP3的更新檔來安裝! 但是結果還是沒辦法進入遊戲之中!

因此秉持著研究的精神,先去研究了一下這個網路遊戲需要的解析度,發現這個2D網路遊戲
神州Online 是預設 640 x 480 x 16 的解析度,而網路上相關的討論是說去修改遊戲目錄內的

Online.ini:
[SYSTEM]
Width = 800
Height = 600
Fullscreen = 0
Switchscreen = 1

把他強制設定成800 x 600這樣子就可以進入遊戲,然後不要全螢幕(Fullscreen = 0) ,
而Switchscreen =1是用來設定這款遊戲能不能用Alt+Enter 來切換視窗化!
雖然這樣子可以進入遊戲 ,但是畫面就是變成視窗化那樣子! 玩起來總是感覺怪怪的!

因此很不死心的繼續追問題~在google大神找了很久之後發現可以利用Dxdiag這個工具來檢
查一下你的系統的DirectX有沒有甚麼問題!

因此我就選了開始->執行->鍵入dxdiag,然後就看到測試的視窗出現了!
從畫面上可以看到我的顯示晶片是Quadro NVS 140M,然後你可以點選【測試DirectDraw】
或是【測試Direct3D】,我是先選了【測試DirectDraw】。

然後就看到了下面的地方出現了:
DirectDraw test results: Failure at step 17 (SetDisplayMode to 640x480x16): HRESULT = 0x80004001 (Not implemented)
Direct3D 7 test results: Failure at step 39 (SetDisplayMode to 640x480x16): HRESULT = 0x80004001 (Not implemented)


啥米? 我的螢幕解析度不支援640 x 480??! 所以我就看了一下我的螢幕解析度的支援!
還真的不能使用640 x 480,最小只到800 x 600 ,難怪我的遊戲一直會出現dxvideo.cpp 有問題!
因為根本就沒辦法切過去640 x 480!

而知道的問題的原因之後,就開始針對Quadro NVS 140M來找解決方案!
然後就找到了一個網站跟他所提到的工具可以解決這個顯示晶片不支援640x480的方法:

http://werdna1222coldcodes.blogspot.com/2010/02/directdraw-init-failed.html

於是在使用了這個RivaTuner的方式自己增加了一個640x480x16的解析度之後,再重新開機!
開機完重新執行dxdiag跟我的網路遊戲,結果問題真的就解決了耶!

所以結論就是: 太好的VGA,會讓你沒辦法玩舊款遊戲! 但是想玩遊戲,就只好多認真點學些
東西!
希望這篇文章能夠幫助一些人可以多玩一些遊戲啦~ 呵呵!

星期二, 3月 23, 2010

64 bit 組合語言

64 bit 組合語言需要注意事項:

1.多了一些64 bit暫存器
r8,r9,r10,r11,r12,r13,r14,r15

2.暫存器長度變成64 bit
rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp

3.堆疊操作指令要對應64 bit暫存器
ex: (Push, pop, call, ret, enter, and leave) push eax;這是非法的
push rax;這是合法的

4.RIP變成合法化來存取資料
mov,rax,qword ptr [rip+300];以前IP只能當成程式記數器,現在可以參與資料獲取 也因此在64 bit下,DS/ES/SS/CS變的很沒有意義了!

5.Calling Conventions (呼叫慣例)變成Callee(被呼叫者)不需要清除Stack,這是Caller呼叫者的工作

EX:
Function(arg1,arg2,arg3,arg4,arg5) ,假設arg1~4都是整數,他們分別會被放進去對應的暫存器
RCX: 1st integer arg
RDX: 2nd integer arg
R8: 3rd integer arg
R9: 4th integer arg

arg5才會被放進去Stack,但是這個stack會先幫這幾個arg預留空間,
所以第5個參數會是放在 rsp+0x20的地方!

這個概念跟我們以前32 bit觀念不同,他並不是__cdecl/ __stdcall/ __fastcall
所以從下面的範例中可以看到呼叫者會去清除stack:

The stack must be kept 16-byte aligned. Since the "call" instruction
pushes an 8-byte return address, this means that every non-leaf
function is going to adjust the stack by a value of the form 16n+8 in
order to restore 16-byte alignment.

ex:
void SomeFunction(int a, int b, int c, int d, int e);
void CallThatFunction()
{
SomeFunction(1, 2, 3, 4, 5);
SomeFunction(6, 7, 8, 9, 10);
}

On entry to CallThatFunction, the stack looks like this:
xxxxxxx0 .. rest of stack ..
xxxxxxx8 return address <- RSP

Due to the presence of the return address, the stack is misaligned. CallThatFunction sets up its stack frame, which might go like this:

    sub    rsp, 0x28

Notice that the local stack frame size is 16n+8, so that the result is a realigned stack.

xxxxxxx0 .. rest of stack ..
xxxxxxx8 return address
xxxxxxx0
(arg5)
xxxxxxx8
(arg4 spill)
xxxxxxx0
(arg3 spill)
xxxxxxx8
(arg2 spill)
xxxxxxx0
(arg1 spill) <- RSP

Now we can set up for the first call:

        mov     dword ptr [rsp+0x20], 5     ; output parameter 5
mov r9d, 4 ; output parameter 4
mov r8d, 3 ; output parameter 3
mov rdx, 2 ; output parameter 2
mov rcx, 1 ; output parameter 1
call SomeFunction ; Go Speed Racer!

When SomeFunction returns, the stack is not cleaned, so it still looks like it did above. To issue the second call, then, we just shove the new values into the space we already reserved:

        mov     dword ptr [rsp+0x20], 10    ; output parameter 5
mov r9d, 9 ; output parameter 4
mov r8d, 8 ; output parameter 3
mov rdx, 7 ; output parameter 2
mov rcx, 6 ; output parameter 1
call SomeFunction ; Go Speed Racer!
CallThatFunction is now finished and can clean its stack and return.
        add     rsp, 0x28
ret

Notice that you see very few "push" instructions in amd64 code, since the paradigm is for the caller to reserve parameter space and keep re-using it.

這種呼叫慣例比較像是結合了__cdecl/ __fastcall 的特性:
__cdecl : 在呼叫者(Callee) return,由呼叫者(Caller)清除堆疊
__fastcall : 32bit時是將最左邊兩個參數會放在ecx跟edx ,而64 bit 這邊是放在rcx,rdx,r8,r9

Reference
http://blogs.msdn.com/oldnewthing/archive/2004/01/14/58579.aspx

星期六, 3月 13, 2010

安裝VB6的問題

有些人可能有些經驗在安裝VB6時會出現 "找不到acme安裝程式" 的錯誤訊息!
這先就提供你一個方式可以解決這個問題.

首先你先建立一個批次檔,例如叫做VB6Setup.bat
然後輸入下面的這些內容:

@ECHO OFF
set VB6FOLDER=F:\vb6
del %temp%\*.* /y
%VB6FOLDER%\SETUP\ACMSETUP.EXE /T VB98ENT.STF /S %VB6FOLDER% /n "" /o "" /k "0000000000" /b 1

那個VB6FOLDER的路徑你可以設定成你的VB6放置的位置
例如你是放在光碟機,你就可以寫成set VB6FOLDER=E:

然後執行這個批次檔,然後你就會看到開始安裝的畫面了!

星期三, 3月 03, 2010

有趣的Code-BootOption 的建立

今天在看BootOption建立的code時發現他會去跳掉同時有SimpleFileSystem&BlkIo protocol的Handle,只留下Hanlde 上面有SimpleFileSystem的!

雖然很搞不清楚他為什麼要這樣做,但是一般情況下不可能只有SimpleFileSystem存在!
所以應該是要防呆吧! 怕哪一天真的有Hanlde上面只掛SimpleFileSystem而沒有BlkIo.

這種Hanlde他還是會幫他建立出一個BootOption!


gBS->LocateHandleBuffer (
...
&gEfiSimpleFileSystemProtocolGuid,
...
);
for (Index = 0; Index < NumberFileSystemHandles; Index++) {
Status = gBS->HandleProtocol (
...
&gEfiBlockIoProtocolGuid,
(VOID **) &BlkIo
);
if (!EFI_ERROR (Status)) {

continue; //這邊會Skip
}
...
}

星期日, 2月 28, 2010

C語言複習3

~複習一下一些指標的概念~

問題一: 底下的這個做法的概念
int a;
*&a=30;

Ans:

int a; 可以看成 _A WORD ?
&a 可以看成 LEA BX,_A
* 可以看成 MOV 東西到某個記憶體,所以*&a=30 等同於MOV [BX],30

其實他是等同於a=30,但是這樣子寫會跑更慢!code更大!


問題二:
*200 = 30;

Ans:
這樣子寫是非法的,因為雖然a 在記憶體200的位址,但是你不知道a是多大
所以你要告訴Compiler要一次搬兩個byte. 所以(int *) 等同於word ptr.

*(int *)200=30;

用組語來看會類似 mov word ptr [200],30
其中word ptr是假指令,用來一次搬兩個BYTE
[200] 代表記憶體位址200