S3C2410デバイス登録

  
 

まず、システムの初期化、プラットフォームのバス登録:

構造体デバイスplatform_bus = {.bus_id ="プラットフォーム"};

構造体bus_type platform_bus_type = {.nameの= "プラットフォーム",マッチ= platform_match、.suspend = platform_suspend、.resume = platform_resume、};.

INT __init platform_bus_init(ボイド){device_register(& platform_bus);戻りbus_register(& platform_bus_type)。 s3c_device_usb、& s3c_device_lcd、&}
ログイン

デバイス

静的構造体platform_device * smdk2410_devices [] __initdata = {&アンプ登録s3c_device_wdt、& s3c_device_i2c、& s3c_device_iis、}; //これらのデバイスの上記構造はdevs.cで定義され、以下では一例である:/* NANDコントローラ* /

静的構造体リソースs3c_nand_resource [] = {[0] = {.start = S3C2410_PA_NAND、.END = S3C2410_PA_NAND + S3C24XX_SZ_NAND、.flags = IORESOURCE_MEM、}};

構造体platform_device s3c_device_nand = {.nameの=" S3C2410-NAND", ID = -1、.num_resources = ARRAY_SIZE(s3c_nand_resource)、資源=。。 s3c_nand _resource、};
は、

だから我々は

===================上記の方法により、私たちが望むの機器を追加することができます。 =======================システムボード内のデバイスの

//上記のリストは、静的構造体s3c24xx_board smdk2410_board __initdata = {に添加されます。デバイス= smdk2410_devices、.devices_count = ARRAY_SIZE(smdk2410_devices)}; smdk2410_map_io __init

静的空隙(ボイド){s3c24xx_init_io(smdk2410_iodesc、ARRAY_SIZE(smdk2410_iodesc)); s3c24xx_init_clocks(0); s3c24xx_init_uarts(smdk2410_uartcfgs、ARRAY_SIZE(smdk2410_uartcfgs) ); s3c24xx_set_board(& smdk2410_board); //なお、このステップ}

静的ボイド__initのsmdk2410_init_irq(ボイド){s3c24xx_init_irq();}

========== ================================ //これはマクロを介して構造MACHINE_START(SMDK2410を作成し、" SMDK2410")/* @TODO:SMDK2410に新しい識別子とスイッチ*を要求* //*メンテ:.ジョナスDietsche * /phys_ram = S3C2410_SDRAM_PA、.phys_io = S3C2410_PA_UART、.io_pg_offst =(((U32)S3C24XX_VA_UART)>>。 18)&午前P; 0xfffc、.boot_params = S3C2410_SDRAM_PA + 0x100の、.map_io = smdk2410_map_io、.init_irq = smdk2410_init_irq、.timer =&以下のようにs3c24xx_timer、MACHINE_END

//マクロが定義されています:/**定義するマクロのセット...アーキテクチャは、これは、リンカによってテーブル*に組み込まれています* /#constの構造体machine_desc __mach_desc _ ## _タイプ\\ __属性__(; .arch.info.init"))(__セクション__(")\\ MACHINE_START(_type、_name)を定義しています= {\\ .nr = MACH_TYPE _ ## _タイプ、\\ = .nameの_name、

の#define MACHINE_END \\};

これにより、型構造体machine_descの__mach_desc_SMDK2410_typeと呼ばれる構造を得ることボディ

=====================ルックs3c24xx_set_board(& smdk2410_board)(cpu.c中)

/*ボード情報* /

静的構造体s3c24xx_board *ボード;

ボイドs3c24xx_set_board(構造体s3c24xx_board * B){I int型、

ボード= B; //設定場合グローバル変数は、


(B-> clocks_count!= 0){構造体CLK ** PTR = B->クロック;;

(i = B->ため、clocks_count;私> 0; i--、PTR ++)s3c24xx_register_clock(* PTR);}}

この変数の次の初期化関数が使用される静的INT __init s3c_arch_init(ボイド){int型RET;

//CPUの正しい初期化を行う

IF(CPU == NULL)パニック(" s3c_arch_init:NULLのCPU \\ N");

RET =(CPU-> INIT)();場合リターンRET;(RET = 0!)

IF(ボード= NULL!){構造体platform_device ** PTR =ボード - >装置; iはint型、(I = 0のため、各デバイスに

//トラバースプラットフォーム。 I<ボード - > devices_count; I ++は、PTR ++)ドライバをロードするときに.ret = platform_device_register(* PTR)のプラットフォームデバイスの//見つけることができるように{//、一度プラットフォームバスに登録;(RET場合){のprintk(KERN_ERR" s3c24xx:ボードデバイス%S(%dの追加に失敗しました)、%Pは\\ N" @

を、(* PTR) - >名、RET、* PTR);}}

/*エラーをマスクし、我々は、これらすべてのボードを必要としないかもしれない*デバイス* /RET = 0;}

リターンRET;}

arch_initcall(s3c_arch_init); < BR>


===================================

/*** platform_device_register - プラットフォームレベルのデバイスを追加* @pdev:プラットフォームのデバイスwe'r ** /INT platform_device_register(構造体platform_device * PDEV)を追加するE {I、RET = 0 int型;(!PDEV)

もし-EINVALを返します。

//(場合親デバイスに関連付けられています! pdev-> dev.parent)pdev-> dev.parent =&#038; platform_bus;

pdev-> dev.bus =&#038; platform_bus_type;

//ID == - 1つのプロセスが、異なる名前であれば(pdev->!ID = -1)のsnprintf(pdev-> dev.bus_id、BUS_ID_SIZE、"%S%U" pdev->名、pdev-> ID)。zh-CN"],null,[0.94716543],zh-CN"]]]

Copyright © Windowsの知識 All Rights Reserved