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...