詳解platform device 系列函式

2021-06-02 01:37:26 字數 2556 閱讀 8867

platform_device_系列函式,實際上是註冊了乙個叫platform的虛擬匯流排。使用約定是如果乙個不屬於任何匯流排的裝置,例如藍芽,串列埠等裝置,都需要掛在這個虛擬匯流排上。

driver/base/platform.c

//platform裝置宣告

struct device platform_bus = ;

export_symbol_gpl(platform_bus);

//platform匯流排裝置宣告

struct bus_type platform_bus_type = ;

export_symbol_gpl(platform_bus_type);

int __init platform_bus_init(void)

//這裡在platform匯流排上掛裝置

int platform_device_add(struct platform_device *pdev)

if (p && insert_resource(p, r))

}pr_debug("registering platform device '%s'. parent at %s\n",

pdev->dev.bus_id, pdev->dev.parent->bus_id);

ret = device_add(&pdev->dev);

if (ret == 0)

return ret;

failed:

while (--i >= 0)

if (pdev->resource[i].flags & (ioresource_mem|ioresource_io))

release_resource(&pdev->resource[i]);

return ret;

}export_symbol_gpl(platform_device_add);

//常用的platform_device_register,內部呼叫了platform_device_add,將裝置掛在了platform匯流排上

/*** platform_device_register - add a platform-level device

* @pdev: platform device we're adding

*/int platform_device_register(struct platform_device *pdev)

export_symbol_gpl(platform_device_register);

要用註冊乙個platform驅動的步驟:

1,註冊裝置platform_device_register

2,註冊驅動platform_driver_register

註冊時候的兩個名字必須一樣,才能match上,才能work,例如:

struct platform_device pxa3xx_device_nand = ,

.resource    = pxa3xx_resource_nand,

.num_resources    = array_size(pxa3xx_resource_nand),

};static struct platform_driver pxa3xx_nand_driver = ,

.probe        = pxa3xx_nand_probe,

.remove        = pxa3xx_nand_remove,

#ifdef config_pm

.suspend    = pxa3xx_nand_suspend,

.resume        = pxa3xx_nand_resume,

#endif

};而且device註冊的時候,可以給driver傳引數

struct device ;

傳引數都是通過platform_data傳,所以定義為void *

void        *platform_data;    /* platform specific data, device

static struct pxa3xx_nand_platform_data ***_nand_info = ;

static void __init ***_init_nand(void)

static int __init pxa3xx_nand_probe(struct platform_device *pdev)

下面解釋一下pxa_register_device函式

pxa_set_ohci_info(&***_ohci_info);

void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)

void __init pxa_register_device(struct platform_device *dev, void *data)

其實上,也就是給driver傳引數,通過dev.platform_data。

到這裡,platform_device系列函式,基本算通了,系列函式還有一堆設定的函式,和device_register同級別的那些功能函式,用法基本差不多,只不過都將裝置掛在了platform匯流排上。

在裝置樹中描述platform device

在高通平台做gpio按鍵配置的時候,根據之前的經驗,想從裝置樹中對應的關鍵字找到實際的驅動解析實現,以此加深對裝置樹屬性配置的理解。看來,對裝置樹的學習還是不能停下。reference 定義 在裝置樹的dts檔案裡,帶有compatible屬性的節點就是表示乙個platform device.用法 ...

TCP IP詳解 卷1,2,3詳解

大家知道,tcp ip已成為計算機網路的事實上的標準。在關於tcp ip的論著中,最有影響的就是兩部著作。一部是douglas e.comer的 用tcp ip進行網際互連 而另一部就是stevens寫的這3卷書。這兩套巨著都很有名,各有其特點。無論是從事計算機網路的教師還是進行科研的技術人員,這兩...

iptable 詳解 iptable命令詳解1

p protocal protocol 協議 j jump target i in inte ce name 入口 o out inte ce name 出口 f,fragment 分片 指定 p tcp時 source port port port 原埠 也作 sport destionation...