Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> カーネル&mdashにマップされた仮想アドレスから物理アドレス

カーネル&mdashにマップされた仮想アドレスから物理アドレス

  

仮想アドレスを物理アドレスにマッピング; AT91SAM9261EK解析ボードドライバ9261 LCDコントローラチップは
来る

この記事では、ボード上の9261チップを分析AT91SAM9261EKどのようにLCDコントローラドライバはカーネル仮想アドレスを物理アドレスにマッピングされて実装されています。システム)はatmel_lcdfb_init(中/drivers/video/atmel_lcdfb.cを行う場合、platform_driver_probeコール(&#038を、atmel_lcdfb_driver、atmel_lcdfb_probe)まずatmel_lcdfb_driver名")(関数、; atmel_lcdfb"根拠は、システムレジストリ内のデバイスを検索しますあなたは機器、システムへのデバイスの登録ドライブを持っている場合は、そのようなplatform_deviceは、存在しません。静的構造体platform_driver atmel_lcdfb_driver = {.remove = __ exit_p(atmel_lcdfb_remove)、ドライバ= {.nameの=" atmel_lcdfb",所有者= THIS_MODULE、}、};以来/arch/arm/mach-at91/at91sam9261_devices.c 、lcdc_data、}; atmel_lcdfb"以下platform_deviceのat91_lcdc_device、静的構造体platform_deviceのat91_lcdc_device = {.nameの="を有している。、ID 0、.dev = {.dma_mask =&#038 =; lcdc_dmamask、.coherent_dma_mask = 0xFFFFFFFFの、.platform_data =&アンプ.resource = lcdc_resources、.num_resources = ARRAY_SIZE(lcdc_resources)};その名前も"あるatmel_lcdfb"およびat91_add_device_lcdc()関数はそうマップ内atmel_lcdfb_probe()関数を実行するとき、システムにデバイスに登録されています場合= platform_get_resource(PDEV、IORESOURCE_MEM、1)、lcdc_resources下に定義されたパラメータを取得するために、AT91SAM9261_LCDC_BASEはLCDユーザーインターフェイス0x600000、すなわち、物理アドレスの開始アドレスである。AT91SAM9261_LCDC_BASE + SZ_4K- 1終了アドレスまで。静的構造体リソースlcdc_resources [] = {[0] = {.start = AT91SAM9261_LCDC_BASE、.END = AT91SAM9261_LCDC_BASE + SZ_4K - 1、.flags = IORESOURCE_MEM、}、[1] = {.start = AT91SAM9261_ID_LCDC、.END = AT91SAM9261_ID_LCDC、。フラグ= IORESOURCE_IRQ、}、#もし定義(CONFIG_FB_INTSRAM)[2] = {.start = AT91SAM9261_SRAM_BASE、.END = AT91SAM9261_SRAM_BASE + AT91SAM9261_SRAM_SIZE - 1、.flags = IORESOURCE_MEM、}、#ENDIF};次にioremap関数によって達成()から物理アドレスにマッピングされたカーネル仮想アドレス、すなわちsinfo-> MMIO = ioremap(info-> fix.mmio_start、info-> fix.mmio_len);ここinfo-> fix.mmio_start = regs->。開始(すなわちAT91SAM9261_LCDC_BASE)info-> fix.mmio_len = regs->末端(すなわちAT91SAM9261_LCDC_BASE + SZ_4K - 1) - regs-> + 1を開始する。

Copyright © Windowsの知識 All Rights Reserved