Multiple XIP Regions
9/8/2008
Executar - no - local (xip) regiões são áreas onde um aplicativo pode executar codificar diretamente do ROM, rather than precisar carregar de memória RAM.
Você pode construção múltiplo regiões xip em um único sistema. Dessa forma, você pode usar recursos xip enquanto estiver usando um more than área memória. De exemplo, você pode instalar o núcleo OS recursos em ROM e instalar recursos de outro OS para memória flash memória. Aplicativos xip poderia executar nos dois lugares. Você pode ainda atualizar o memória flash região quando necessário. No entanto, a região xip de memória deve ser somente leitura.
Você pode encadear juntos ROM quantas regiões como desejar. Cada tempo você pode adicionar um ROM Região, o kernel substituir outro ROM região. O kernel não fisicamente substituir o módulo, mas substitui um novo módulo em um separar sua funcionalidade ROM região. A ordem você definir para o ROM regiões determina a ordem na qual o OS sobrescreve módulos. O ROM região que contém Nk.exe corre o inferior da lista, e o kernel adiciona novas regiões a parte superior da lista. Isso permite que você substituir todos os módulos de original imagem, exceto Nk.exe, vinculando a ROM outra região.
Para adicionar um ROM região para executar uma existente-imagem tempo, criar um novo arquivo .bib que lista os módulos que você desejar para adicionar a ou substituir em um design OS existente. Para adicionar um novo arquivo .exe ou substituir um existente adicionar um, o arquivo .exe para o arquivo .bib.
Você deve fazer uma entrada adicional no arquivo .bib quando você adicionar ou modificar um DLL. Em Windows Embedded CE, todos os carregar DLLs do parte superior para baixo no espaço de processo memória virtual. Porque Windows Embedded CE carrega todas as DLLs para um arquivo .exe especificado na mesma localidade endereço, a seção Modules do arquivo .bin reserva a mesma quantidade de memória virtual espaço para todas as DLLs. Para qualquer especificado processo, o sistema carrega as DLLs mesmas para o espaço de endereço processo ou reserva espaço para carregar mais tarde. Quando você usa Makeimg.exe para compilar um ROM imagem, ele gera a endereços de todas as DLLs na imagem inicial e final. O seguinte exemplo de código mostra um endereço DLL exemplo gerado pelo Makeimg.exe:
First DLL Address: 01f90000h
Last DLL Address: 02000000h
Você deve incluir uma entrada na seção de config do novo arquivo .bib, sob a declaração DLLHIGHADDR, que especifica o endereço iniciar para todas as DLLs no associado ROM imagem. Esse endereço iniciar é o menor endereço alocado para espaço memória virtual DLL no original arquivo .bin. No novo arquivo .bin, Makeimg.exe Lista de endereço inicial na qual o sistema pode começar reservar e memória virtual do carregamento. O sistema reserva memória a partir de endereço inicial para baixo. O seguinte exemplo de código mostra um exemplo endereço iniciar DLL gerado pelo novo arquivo .bin:
DLLHIGHADDR=0x01f90000
Não deixe que sua regiões xip não sobreposição. Se eles fazem, o sistema não executar corretamente. Você pode deixar espaços entre áreas DLL sem causar problemas sistema, mas isso reduz a quantidade de memória virtual disponível para um processo. Como o kernel reserva a mesma quantidade de memória virtual espaço para todas as DLLs carregadas e ROMs, o kernel nunca usa memória em um intervalo entre as DLLs. Você também pode usar o espaço para as DLLs da expansão um ROM imagem sem ter que reorganizar qualquer ROM imagens que siga. De exemplo, se as DLLs do ROM seu principal finalizar em 0x01f00000, você pode iniciar seu próximo DLLs do ROM em 0x01f00000. Se as DLLs do ROM a segunda terminar em 0x01e00000, você pode começar as DLLs do ROM o terceiro em 0x01d00000, que permitiria a segunda ROM a crescer sem afetar o terceiro ROM.
Essa variável contém um encadear do ROM pTOC Ponteiros, qual apontar para um sumário. O kernel é armazenada na ROM localizado em deslocamento ROM_SIGNATURE_OFFSET + 4 com uma assinatura DWORD ROM_SIGNATURE armazenadas em ROM_SIGNATURE_OFFSET.
O kernel pode deixar um DLL out of totalmente uma imagem, mesmo se o DLL implicitamente está vinculado a outro módulo. Romimage.exe imprime um aviso sobre o DLL ausente, mas ainda cria a imagem. Isso permite que você carregar o DLL ausente a partir de sistema de arquivos memória RAM ou o shell Target Control.