免費谘(zī)詢熱線
13621929115概括來(lái)說,Platform設備包括:基於端口的設備(已不推薦使用軍事模型,保留(liú)下來隻為兼容舊設備,legacy);連(lián)接物理總(zǒng)線的橋(qiáo)設備;集成在SOC平台上麵(miàn)的控製器;連接在其它bus上的(de)設備(很
platform_dri軍(jun1)事模型ver_registe、platform_driver_unregister,platform driver的注冊、注銷接口platform_driver_probe,主動執行probe動作。
platform_set_drvdata、platform_get_drvdata,設置或者獲取driver軍事模(mó)型(xíng)保存在device變量中的私有數據3.4 懶人API又是注冊platform device,又是注冊platform driver,看著挺囉嗦的。
不過內核想到了這點,所(suǒ)以提供一個懶人API,可以同時注冊platform driver,並分配一個platform device:#define plat軍事模型form_create_bundle(driver, probe, res, n_res, data, size) \
隻要提供一個platform_driver(要把driver的probe接口顯式的傳(chuán)入),並(bìng)告知軍事模型該設備占用的資源信息,platform模塊就(jiù)會幫忙分配資源,並執(zhí)行probe操作對於那些不需要熱拔插的設(shè)備來說,這種方(fāng)式是最省事(shì)的了。
3.5 Early platform device/driver內核啟動時,要完成一定的初始化操作之後,才會處理device和driver的注冊及probe,因此在這軍事模(mó)型之前(qián),常規的(de)platform設備是無(wú)法使用的。
但是在Linux中,有些設備需要盡早使(shǐ)用(如在啟動過程中充當console輸出的serial設備),所以platform模(mó)塊提供(gòng)了一種稱作Early platform device/driver的機製,允許驅動開發人員,在開發驅動時,向內核注冊可在內核早軍事模型期啟動過程中使(shǐ)用的driver。
這些機製(zhì)提供了如下接口:4. Platform模塊的內部動作解析4.1 Platform模塊的初始化Platform模塊的(de)初始化是由drivers/base/platform.c中platform_bus_init接(jiē)口完成的,該接口(kǒu)的實現和動作如下(xià):
early_platform_cleanup,清除所有和Ear軍事模型(xíng)ly device/driver相關的代碼因為執(zhí)行到這裏的時候,證明係統已經(jīng)完成了Early階段的啟動,轉而進行正常的設備初(chū)始化、啟動操作,所以(yǐ)不再需要Early Platform相關的東(dōng)西。
device_register,注冊一個名稱(chēng)為platform_bus的(de)設備,該設(shè)備的定義(yì)非(fēi)常簡單,隻包含i軍事模型nit_name(為“platform”)該步驟會在sysfs中創(chuàng)建“/sys/devices/platform/”目錄,所(suǒ)有的Platform設備,都會包含在此目錄下。
bus_register,注冊一個名(míng)稱為platform_bus_type的(de)bus,該bus的定義如下:struct bus_ty軍事(shì)模型pe platform_bus_type = { .name = "platform", .dev_attrs = platform_dev_attrs, .match = platform_match, .uevent = platform_uevent, .pm = &platform_dev_軍事(shì)模型pm_ops, };
該步驟會(huì)在sysfs中創建“/sys/bus/platform/”目(mù)錄,同時,結合“Linux設備模型(6)_Bus”的描述,會在“/sys/bus/platform/”目錄下,創建uevent attribute(/sys/bus/platform/uevent)、device軍事模(mó)型s目錄、drivers目錄、drivers_probe和(hé)drivers_autoprobe兩個attribute(/sys/bus/platform/drivers_probe和/sys/bus/platform/drivers_autoprobe)。
4.2 platform device和plat軍(jun1)事模型form driver的注冊結合第3章的(de)描(miáo)述,platform device和platform driver的注冊(cè),由(yóu)platform_device_add和platform_driver_register兩個接口實際實現。
其內部動作分別如下platform_device_add的內部動作:如果該設(shè)軍(jun1)事模型備沒有指定父設備,將其父設備設(shè)置為platform_bus,即“/sys/devices/platform/”所(suǒ)代(dài)表的(de)設備,這時該設備的sysfs目錄即為“/sys/devices/platform/xxx_device”。
將該設備的bus指定為platform_bus_type(pdev->dev軍事模型.bus = &platform_bus_type)根據設備的ID,修改或者設置設(shè)備的(de)名(míng)稱對(duì)於多個同名的設(shè)備(bèi),可(kě)以使用ID區(qū)分,在(zài)這裏將實際名稱(chēng)修改為“name.id”的形式。
調用resource模塊的insert_resource接口,將該設備(bèi)需要使用的resource統一管理起(qǐ)來(www.17C.com知道,在這軍事模型之前,隻是聲明了本設備需要使用(yòng)哪些resource,但resource模塊並不知情,也(yě)就無從管理,因此需要告知)。
調用device_add接口,將內嵌的struct device變量添加(jiā)到內核中(zhōng)platform_driver_register的內部動作:將該driver的(de)bus指定為platform軍事模型_bus_type(drv->driver.bus = &platform_bus_type)。
如果(guǒ)該(gāi)platform driver提(tí)供(gòng)了probe、remove、shutdown等回調函數,將該它內嵌的struct driver變量的probe、remove、shutdown等指(zhǐ)針,設置為plat軍事模型form模(mó)塊提供(gòng)函數,包括platform_drv_probe、platform_drv_remove和platform_drv_shutdown。
因為probe等動作會從struct driver變量開始,經過platform_drv_xxx等接口的轉接,就(jiù)可以到達platform diver自身軍事模型的回調函數中調用(yòng)driver_register接口,將內嵌的struct driver變(biàn)量(liàng)添加到內核中。
4.3 platform設備的probewww.17C.com在“Linux設備(bèi)模型(6)_Bus”中講過,設備的probe,都發生在向指定(dìng)的bus添加device或者device_driver時,由bus模塊的b軍事模型us_probe_device,或者device_driver模塊driver_attach接(jiē)口觸發。
這裏就不再詳細描述了
Copyright © 2002-2020 上海潤之模型設計有限公司 版權所有 展示模型,展品模型,展廳模(mó)型,展示道具,展廳(tīng)展品,展品道(dào)具(jù),模型定製,模型公司,上(shàng)海模型公司 備案號:滬ICP備20018260號