zoukankan      html  css  js  c++  java
  • 神奇的platform_get_resource函数


    阅读platformdriver的代码时,发现在probe函数直接调用了platform_get_resource获取io内存,但是却没有做任何检测!probe函数怎么知道这块io内存属于这个驱动呢?
     
            后来发现原来在arch目录下的对应目录里面有个devs.c文件(这个文件可能因不同的架构而不一样),这个文件里面声明了一个platform设备的资源数组foo_devices,原型如下:
     
    static struct platform_device* foo_devices[] __initdata;
     
            这个数组里面包含了所有platform设备的资源信息。例如:一个设备的资源声明如下:
     
    static struct resource foo_resource[] =
    {
        [0] =
        {
            .start = (FOO_BASE_PA),
            .end = (FOO_BASE_PA) + (0x0008000),
            .flags = IORESOURCE_MEM,
        },
        [1] =
        {
            .start = (IRQ_FOO),
            .end = (IRQ_FOO),
            .flags = IORESOURCE_IRQ,
        },
    };
    static struct platform_device device_foo =
    {
        .name = "device_foo",
        .id = 0,
        .resource = foo_resource,
        .num_resources = ARRAY_SIZE(foo_resource),
        .dev =
        {
            .dma_mask = 0x0,
            .coherent_dma_mask = 0xffffffff,
        },
    };
     
            那么将这个device_foo加入map100_devices数组,就能直接在probe函数中用platform_get_resource获取资源了,但是要注意驱动的名称必须和platform_device结构中的名称完全相同。
     
            那为什么加入map100_devices数组后就能直接访问了呢?

            在相关体系的machine_desc结构体中(对于每个特定平台都有一个MACHINE_START宏用来定义machine_desc结构体),有一个接口init_machine,这个接口中会调用platform_add_devices添加map100_devices。例如:
     
    platform_add_devices(map100_devices);

    转载请注明出处,文章来源:http://www.threeway.cc/sitecn/InformationInfo.aspx?tid=1382&pid=2583

  • 相关阅读:
    centos 安装tomcat
    UTF8 的BOM带来的麻烦
    linux 下tomcat开机自启动
    proxool连接池空闲连接中断问题解决
    java判断字符串是否为空的方法总结
    修改my.cnf ,使mysql 的表面不区分大小写
    csc a Wx.NET app.doc
    用Wiz作为灵格斯词典(Lingoes)的生词本
    单词
    使用OKHTTP方式发送POST请求,获取返回的JSON串
  • 原文地址:https://www.cnblogs.com/guiguxinwei/p/2358998.html
Copyright © 2011-2022 走看看