dirección física para el mapeo de direcciones virtuales

  
 

dirección física de la dirección virtual asignado a la kernel — chip de análisis viene junta AT91SAM9261EK controlador de controlador 9261 LCD

Este artículo analiza la junta AT91SAM9261EK 9261 chip controlador LCD viene conductor es cómo implementar la asignación de la dirección física del núcleo en dirección virtual. Cuando el sistema realiza /drivers/video/atmel_lcdfb.c en atmel_lcdfb_init (), llame platform_driver_probe (&atmel_lcdfb_driver, atmel_lcdfb_probe) la función, en primer lugar atmel_lcdfb_driver en () el nombre de " atmel_lcdfb " como base para buscar el dispositivo en el registro del sistema no hay tales platform_device, si usted tiene el equipo, la unidad de registro para el dispositivo al sistema. struct platform_driver estática atmel_lcdfb_driver = {.Remove = __ exit_p (atmel_lcdfb_remove), driver = {.name = ". atmel_lcdfb ", propietario = THIS_MODULE,} ,.}; Desde el /arch/arm/mach-at91/at91sam9261_devices.c La siguiente plataforma_device at91_lcdc_device, estructura estática platform_device_91_lcdc_device = {.name = " atmel_lcdfb '. .resource = lcdc_resources, .num_resources = ARRAY_SIZE (lcdc_resources),}; su nombre es también " " atmel_lcdfb, y at91_add_device_lcdc () la función ha sido registrada en el dispositivo al sistema, por lo que cuando se realiza la función atmel_lcdfb_probe () en el mapa cuando = platform_get_resource (PDEV, IORESOURCE_MEM, 1), para obtener los parámetros definidos a continuación, en el que lcdc_resources AT91SAM9261_LCDC_BASE es la dirección de inicio de la interfaz de usuario LCD 0x600000, es decir, la dirección física; AT91SAM9261_LCDC_BASE + SZ_4K- 1 a la dirección final. lcdc_resources recursos struct estáticas [] = {[0] = {.start = AT91SAM9261_LCDC_BASE, .end = AT91SAM9261_LCDC_BASE + SZ_4K - 1, .FLAGS = IORESOURCE_MEM,}, [1] = {.start = AT91SAM9261_ID_LCDC, .end = AT91SAM9261_ID_LCDC,. flags = IORESOURCE_IRQ,}, # si está definido (CONFIG_FB_INTSRAM) [2] = {.start = AT91SAM9261_SRAM_BASE, .end = AT91SAM9261_SRAM_BASE + AT91SAM9261_SRAM_SIZE - 1, .FLAGS = IORESOURCE_MEM,} #endif}; a continuación, logrado por la función ioremap () desde kernel mapeado dirección virtual a una dirección física, es decir sinfo- > mmio = ioremap (INFO-> fix.mmio_start, INFO-> fix.mmio_len); en donde INFO-> fix.mmio_start = regs- > iniciar (es decir AT91SAM9261_LCDC_BASE); INFO-> fix.mmio_len = regs- > final (es decir AT91SAM9261_LCDC_BASE + SZ_4K - 1) - regs- > start + 1;

Copyright © Conocimiento de Windows All Rights Reserved