Linux-2.6之platform

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

<

div>(一) Platform_device部分:
1 系统初始化注册platform_device到内核:

  1. static void __init smdk2410_init(void)  
  2. {  
  3.  s3c_i2c0_set_platdata(NULL);  
  4.  platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));  
  5.  smdk_machine_init();  
  6. }  
  1. int platform_add_devices(struct platform_device **devs, int num)  
  2. {  
  3.  int i, ret = 0;  
  4.  for (i = 0; i < num; i++) {  
  5.   ret = platform_device_register(devs[i]);  
  6.   if (ret) {  
  7.    while (–i >= 0)  
  8.     platform_device_unregister(devs[i]);  
  9.    break;  
  10.   }  
  11.  }  
  12.  return ret;  
  13. }  
 
  1. static struct platform_device *smdk2410_devices[] __initdata = {  
  2.  &s3c_device_usb,  
  3.  &s3c_device_lcd,  
  4.  &s3c_device_wdt,  
  5.  &s3c_device_i2c0,  
  6.  &s3c_device_iis,  
  7.  s3c_device_sdi,  
  8.  ……  
  9. };  

 platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices))函数以platform_device数组作为参数,将其中定义的所有的platform_device注册到系统中。

2 关于SD platform_device

arch/arm/plat-s3c24XX/devs.c 中定义了系统拥有的所有platform_device,其中也包括SD卡的platform_device:

  1. struct platform_device s3c_device_sdi = {  
  2.  .name    = “s3c2410-sdi”,  
  3.  .id    = -1,  
  4.  .num_resources   = ARRAY_SIZE(s3c_sdi_resource),  
  5.  .resource   = s3c_sdi_resource,  
  6. }; 
  1. /* SDI */  
  2. static struct resource s3c_sdi_resource[] = {  
  3.  [0] = {  
  4.   .start = S3C24XX_PA_SDI,  
  5.   .end   = S3C24XX_PA_SDI + S3C24XX_SZ_SDI – 1,  
  6.   .flags = IORESOURCE_MEM,  
  7.  },  
  8.  [1] = {  
  9.   .start = IRQ_SDI,  
  10.   .end   = IRQ_SDI,  
  11.   .flags = IORESOURCE_IRQ,  
  12.  }  
  13. };  

(二) Platform_driver部分:

设备部分在内核启动时候执行platform_device_register(devs[i]);函数之后,就会将所有定义的platform_device注册到内核系统中。

然后对于设备驱动来说,加载到内核中入口为:

  1. static int __init s3cmci_init(void)  
  2. {  
  3.  platform_driver_register(&s3cmci_2410_driver);  
  4.  return 0;  
  5. }  

Platform_device定义如下所示:

  1. static struct platform_driver s3cmci_2410_driver = {  
  2.     .driver.name    = “s3c2410-sdi”,  
  3.     .driver.owner   = THIS_MODULE,  
  4.     .probe      = s3cmci_2410_probe,  
  5.     .remove     = __devexit_p(

未经允许不得转载:演道网 » Linux-2.6之platform

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册