Active and Passive KITL
9/8/2008
Camada de transporte independentes kernel (KITL) contém o seguinte dois modos de operação:
- Ativa: O dispositivo inicia a OAL, chamadas KitlInit (TRUE) para inicializar KITL e inicializa todos os clientes KITL usar como padrão como o depurador kernel. O serviço KITL, em seguida, chama OEMKitlInit e registra todos os clientes usar como padrão usados pelo sistema.
- Passivo: KITL não é automaticamente iniciado quando o dispositivo é inicializado. Neste modo, KITL inicializa próprio e os clientes KITL usar como padrão. Chamar KitlInit(FALSE) para inicializar no modo Passivo. OEMKitlInit é, em seguida, chamado quando um cliente registra com os servidores KITL.
Você deve determinar qual modo o dispositivo deve digitar em inicializar. Construtor de Expressões plataforma fornece um sinalizador chamado KTS_PASSIVE_MODE que determina qual modo é usado. Você pode definir KTS_PASSIVE_MODE no Construtor de expressões de plataforma, permitindo ativo ou passivo KITL. Para obter mais informações, consulte Enabling Active or Passive KITL.
Você deve transmitir o sinalizador KTS_PASSIVE_MODE, se usado, para a OAL antes KitlInit é chamado.
Na plataforma de hardware CEPC, passando os dados através de carregador inicializar na seção de BootArgs faz isso. A exibição um exemplo, consulte % _WINCEROOT%\Platform\Cepc\Kernel\Hal\Halkitl.c.
KITL ativa é mais adequado para o desenvolvimento processos para que o depurador pode manter uma constante conexão. KITL passivo melhor é adequada para um real-cenário global onde o depurador não constantemente é necessária. A beneficiar do modo passivo é que ele permite que você criar um dispositivo que não precise ser tethered para o área de trabalho ferramentas. O dispositivo ainda pode ser celular e se ele insere um estado onde o área de trabalho ferramentas são necessárias, ele inicia uma conexão entre o dispositivo e área de trabalho KITL.
O seguinte exemplo de código mostra como isso é feito.
BOOL OEMKitlInit (PKITLTRANSPORT pKitl)
{
BOOL fRet = TRUE;
BOOT_ARGS *pBootArgs = (BOOT_ARGS *) ((ULONG)(*(PBYTE *)BOOT_ARG_PTR_LOCATION) | 0x80000000);
KITLOutputDebugString ("+OEMKitlInit\n");
// start the requested transport
switch(pBootArgs->KitlTransport & ~KTS_PASSIVE_MODE)
{
case KTS_SERIAL:
fRet = InitSerial(pKitl);
break;
case KTS_ETHER:
case KTS_DEFAULT:
default:
fRet = InitEther(pKitl);
break;
}
if(!fRet)
KITLOutputDebugString ("Unable to initialize KITL Transports!\n");
KITLOutputDebugString ("-OEMKitlInit\n");
return fRet;
}
void InitDebugEther (void)
{
BOOT_ARGS *pBootArgs = (BOOT_ARGS *) ((ULONG)(*(PBYTE *)BOOT_ARG_PTR_LOCATION) | 0x80000000);
if ((pBootArgs->KitlTransport & ~KTS_PASSIVE_MODE) == KTS_NONE)
return;
// Initialize KITL transport
if (KitlInit(!(pBootArgs->KitlTransport & KTS_PASSIVE_MODE))) {
KITLOutputDebugString ("KITL Initialized\n");
// no longer need to start kernel services
// since KITL config message told us what to start and
// kitl will start it accordingly
} else {
KITLOutputDebugString ("KITL Initialization Failed, No debugging support available\n");
}
}