Índice
Encadernar um processo de comunicação
Interação do Binder durante a inicialização do aplicativo
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...