de registro del dispositivo S3C2410

  

En primer lugar, la inicialización del sistema, el registro de conexión con la plataforma:

platform_bus struct device = {.bus_id = " plataforma ",};

struct tipoDeBus platform_bus_type = {.name = " quot;, plataforma y fósforo = platform_match, .suspend = platform_suspend, .resume = platform_resume ,.};

int __init platform_bus_init (void) {device_register (&platform_bus); bus_register retorno ( &platform_bus_type);}

registrado
dispositivo

platform_device struct estática * smdk2410_devices [] __initdata = {&s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c, &s3c_device_iis }; //la estructura anterior del aparato definido en la devs.c, el siguiente es un ejemplo: /* NAND Controller * /

struct s3c_nand_resource recurso estático [] = {[0] = {.start = S3C2410_PA_NAND, .end = S3C2410_PA_NAND + S3C24XX_SZ_NAND, .FLAGS = IORESOURCE_MEM,}};

struct platform_device s3c_device_nand = {.name = " S3C2410-nand ", id = -1, .num_resources = ARRAY_SIZE (s3c_nand_res. . Ource), recursos = s3c_nand_resource,};

Así que podemos añadir el dispositivo que queremos por el método anterior

=============. =============================

//dispositivo de estructura estática en la lista anterior se añadieron a la placa base s3c24xx_board smdk2410_board __initdata = {.devices = smdk2410_devices, .devices_count = ARRAY_SIZE (smdk2410_devices)};

static void __init smdk2410_map_io (void) {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); //Tenga en cuenta que este paso
}

smdk2410_init_irq static void __init (void) {s3c24xx_init_irq ();}

==== ====================================== //esto es crear una estructura a través de un MACHINE_START macro (SMDK2410, " SMDK2410 ") /* @TODO: solicitar un nuevo identificador y el interruptor * a SMDK2410 * //* Mantenedor: Jonas Dietsche * /phys_ram = S3C2410_SDRAM_PA, .phys_io = S3C2410_PA_UART, .io_pg_offst = (((U32). S3C24X X_VA_UART) > > 18) &0xFFFC, .boot_params = S3C2410_SDRAM_PA + 0x100, .map_io = smdk2410_map_io, .init_irq = smdk2410_init_irq, .Timer = &s3c24xx_timer, MACHINE_END

//macro se define como sigue: /** conjunto de macros para definir la arquitectura características del este está integrado en * una mesa por el enlazador * /#define MACHINE_START (_type, _name) \\ const struct machine_desc __mach_desc _ ## _ tipo \\ __ atributo __ ((__ sección __ (" .. .ARCH .info.init "))) = {\\ .nr = MACH_TYPE _ ## _ tipo, \\ .name = _name,

#define MACHINE_END \\};

para obtener de ese modo una llamada _ _mach_desc_SMDK2410_type, tipo de estructura struct machine_desc

===================== mirada s3c24xx_set_board (&smdk2410_board).
(en la CPU. c)

/* La información de planchar * /

estática struct s3c24xx_board * bordo;

void s3c24xx_set_board (struct s3c24xx_board * b) {int i;

tablero = b; //establecer la variable global

si (b- >! clocks_count = 0) {struct clk ** ptr = b- > relojes;;

para (i = b- > clocks_count; i > 0; i--, ptr ++) s 3c24xx_register_clock (* ptr);}}

y la siguiente función de inicialización de esta variable será utilizada static int __init s3c_arch_init (void) {int ret;

//hacer lo correcto para init cpu

si (CPU == NULL) de pánico (" s3c_arch_init: NULL cpu \\ n ");

ret = (CPU > init) (); si (ret =! 0) return ret;

si (tablero = NULL) {struct platform_device ** ptr = bordo- y dispositivos gt;!; int i;

//plataforma de desplazamiento para cada uno de los dispositivos (i = 0; i < bordo- > devices_count; i ++, ptr ++) {//registrar en conexión con la plataforma a la vez, por lo que se puede encontrar el dispositivo //plataforma de .ret = platform_device_register (* ptr al cargar la unidad ), si (r) {printk (KERN_ERR " s3c24xx: Error al agregar el dispositivo de la placa% s (% d)

@% p \\ n ", (* ptr) - > nombre, ret, * PTR);}}

/* enmascarar cualquier error, es posible que no necesite todos estos dispositivos de planchar * * /ret = 0;}

ret retorno;}

arch_initcall (s3c_arch_init);


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

/*** platform_device_register - añadir un dispositivo a nivel de plataforma * @pdev: dispositivo de plataforma estamos añadiendo ** /int platform_device_register (struct platform_device * pdev) {int i, ret = 0;

if (! pdev) volver -EINVAL;

//dispositivo principal asociado si (pdev- >! dev.parent) pdev- > dev.parent = &platform_bus;

pdev- > dev.bus = &platform_bus_type;

//ID == -1 tratada, pero si diferentes nombres (pdev- > id = -1!) snprintf (pdev- > dev.bus_id, BUS_ID_SIZE, ".% s% u ", pdev- > nombre, pdev- > id);zh-CN"],null,[0.94743574],zh-CN"]]]

Copyright © Conocimiento de Windows All Rights Reserved