Visão geral do processo do sistema Android Binder1

Índice

introdução:

uma cópia

Encadernar um processo de comunicação

Interação do Binder durante a inicialização do aplicativo

Modo C/S:

COMANDO do fichário

Estrutura de dados BWR:


introdução:

O fichário do Android é desenvolvido a partir do openbinder. Incluindo driver de ligação, camada nativa, camada Java. Use problemas clássicos como ponto de partida para sua jornada de compreensão do fichário.

Por que escolher o fichário?

o desempenho do fichário é bom, conveniente e seguro.

O desempenho é bom, ou seja, outras pessoas copiam várias vezes e o fichário só precisa copiar uma vez.

uma cópia

Como uma cópia faz isso? Por que há uma cópia a menos?

Exemplo: copy_from_user + copy_to_user

fichário: mapeamento copy_from_user + mmap, a chave aqui é o mapeamento, ou seja, copiar para a área de mapeamento equivale a copiar para o extremo oposto.

A operação de mapeamento dos endereços virtuais do processo e do kernel para a mesma memória física ocorre no final do recebimento dos dados

Uma cópia ocorre no remetente dos dados

Tanto o espaço de endereço do processo virtual vm_area_struct quanto o espaço de endereço do kernel virtual vm_struct são mapeados para o mesmo espaço de memória física

Tenho uma compreensão mais intuitiva do conceito de cópia.

Encadernar um processo de comunicação

Como você se comunicou?

Protocolo de transmissão do Binder:
Primeiro, o Cliente escreve BC_TRANSACTION no driver Binder.
O driver Binder responde ao Cliente com um BR_TRANSACTION_COMPLETE, indicando que recebeu a solicitação do Cliente. O
driver Binder envia o comando BR_TRANSACTION ao servidor para processamento. Após o o processamento for concluído, ele retornará BC_REPLY para notificar o driver, e o driver binder receberá o Servidor.Após o BC_REPLY no terminal responder, ele também responderá
BR_TRANSACTION_COMPLETE ao servidor e responderá BR_REPLY ao Cliente para completar um processo de comunicação completo.

Com a compreensão do processo de comunicação, e então combinado com uma situação específica para entender

Interação do Binder durante a inicialização do aplicativo

Prepare alguns conceitos primeiro:

Modo C/S:

Cliente: BpBinder.transact() envia uma solicitação de transação

Servidor: BBinder.ontransact() recebe a transação correspondente

COMANDO do fichário

BINDER_WRITE_READ: fichário de leitura e gravação de cena interativa, IPC.talkWithDriver

BINDER_SET_CONTEXT_MGR: O processo servicemanager é definido como o gerenciador do contexto

BINDER_SET_MAX_THREADS:: Inicialize o objeto ProcessState, open_Driver, chame ativamente ProcessState.setThreadPoolMaxThreadCount()

BINDER_VERSÃO:

Estrutura de dados BWR:

estrutura binder_write_read

escrever lustre

leitura_buff

continua...

Acho que você gosta

Origin blog.csdn.net/haigand/article/details/132246274
Recomendado
Clasificación