我在注册表里修改了
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial1]
"DeviceArrayIndex"=dword:1
"Irq"=dword:17
"MemBase"=dword:50004000
"MemLen"=dword:2C
"InterruptBitsShift"=dword:3 ; UART 1 Interrupt Sub Register shift bit.
"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:2
"Dll"="serial_HFRK2410.dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="COM2:"
"DeviceType"=dword:0
"FriendlyName"=LOC_DISPLAYNAME_COM2
"Tsp"="unimodem.dll"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial2]
"DeviceArrayIndex"=dword:2
"Irq"=dword:f
"MemBase"=dword:50008000
"MemLen"=dword:2C
"InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:3
"Dll"="serial_HFRK2410.dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="COM3:"
"DeviceType"=dword:0
"FriendlyName"=LOC_DISPLAYNAME_COM1
"Tsp"="unimodem.dll"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
;IF BSP_NOIRDA !
;; s2410 IrDA(UART2)
;[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IRDA2410]
; "DeviceArrayIndex"=dword:1
; "Irq"=dword:f
; "MemBase"=dword:50008000
; "MemLen"=dword:2C
; "InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
; ;"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
; "Prefix"="COM"
; "Index"=dword:4
; "Dll"="serial_HFRK2410.Dll"
; "Order"=dword:0
; "Priority"=dword:0
; "Port"="COM4:"
; "DeviceType"=dword:0 ; IRDA modem, 0 -> null modem
; "FriendlyName"=LOC_DISPLAYNAME_RAWIR
; "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
; "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
;ENDIF
修改ser_smdk2410.cpp
class CPdd2410Serial2 : public CPdd2410Uart {
public:
CPdd2410Serial2(LPTSTR lpActivePath, PVOID pMdd, PHWOBJ pHwObj)
: CPdd2410Uart(lpActivePath, pMdd, pHwObj)
{
m_pIOPregs = NULL;
}
~CPdd2410Serial2() {
if (m_pIOPregs!=NULL)
MmUnmapIoSpace((PVOID)m_pIOPregs,0);
}
virtual BOOL Init() {
PHYSICAL_ADDRESS ioPhysicalBase = { S3C2410A_BASE_REG_PA_IOPORT, 0};
ULONG inIoSpace = 0;
if (TranslateBusAddr(m_hParent,Internal,0, ioPhysicalBase,&inIoSpace,&ioPhysicalBase)) {
// Map it if it is Memeory Mapped IO.
m_pIOPregs =(S3C2410A_IOPORT_REG *) MmMapIoSpace(ioPhysicalBase, sizeof(S3C2410A_IOPORT_REG),FALSE);
}
if (m_pIOPregs) {
DDKISRINFO ddi;
if (GetIsrInfo(&ddi)== ERROR_SUCCESS &&
KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &ddi.dwIrq, sizeof(UINT32), &ddi.dwSysintr, sizeof(UINT32), NULL))
{
RegSetValueEx(DEVLOAD_SYSINTR_VALNAME,REG_DWORD,(PBYTE)&ddi.dwSysintr, sizeof(UINT32));
}
else
return FALSE;
m_pIOPregs->GPHCON &= ~(0x3