色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何正確認(rèn)識(shí)Linux設(shè)驅(qū)動(dòng)模型

Linux愛(ài)好者 ? 來(lái)源:逸珺 ? 作者:逸珺 ? 2020-09-13 09:30 ? 次閱讀

[導(dǎo)讀] Linux設(shè)備林林總總,嵌入式開(kāi)發(fā)一個(gè)繞不開(kāi)的話題就是設(shè)備驅(qū)動(dòng)開(kāi)發(fā),在做具體設(shè)備驅(qū)動(dòng)開(kāi)發(fā)之前,有必要對(duì)Linux設(shè)驅(qū)動(dòng)模型有一個(gè)相對(duì)清晰的認(rèn)識(shí),將會(huì)幫助驅(qū)動(dòng)開(kāi)發(fā),明白具體驅(qū)動(dòng)接口操作符相應(yīng)都做些什么。

個(gè)人對(duì)于驅(qū)動(dòng)模型的理解概括起來(lái)就是一句話:利用面向?qū)ο?a href="http://www.1cnz.cn/v/tag/1315/" target="_blank">編程思想,實(shí)現(xiàn)設(shè)備分層管理軟件體系結(jié)構(gòu)。

注:代碼分析基于linux-5.4.31

為啥要驅(qū)動(dòng)模型

隨著系統(tǒng)結(jié)構(gòu)演化越來(lái)越復(fù)雜,Linux內(nèi)核對(duì)設(shè)備描述衍生出一般性的抽象描述,形成一個(gè)分層體系結(jié)構(gòu),從而引入了設(shè)備驅(qū)動(dòng)模型。這樣描述還是不夠讓人理解,來(lái)看一下這些需求就好理解些:

Linux內(nèi)核可以在各種體系結(jié)構(gòu)和硬件平臺(tái)上運(yùn)行,因此需要最大限度地提高代碼在平臺(tái)之間的可重用性。

分層實(shí)現(xiàn)也實(shí)現(xiàn)了軟件工程的高內(nèi)聚-低耦合的設(shè)計(jì)思想。低耦合體現(xiàn)在對(duì)外提供統(tǒng)一的抽象訪問(wèn)接口,高內(nèi)聚將相關(guān)度緊密的集中抽象實(shí)現(xiàn)。

Linux內(nèi)核驅(qū)動(dòng)程序模型是先前在內(nèi)核中使用的所有不同驅(qū)動(dòng)程序模型的統(tǒng)一。它旨在通過(guò)將一組數(shù)據(jù)和操作整合到全局可訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)中,來(lái)擴(kuò)展基于基礎(chǔ)總線來(lái)橋接設(shè)備驅(qū)動(dòng)程序。

傳統(tǒng)的驅(qū)動(dòng)模型為它們所控制的設(shè)備實(shí)現(xiàn)了某種類(lèi)似于樹(shù)的結(jié)構(gòu)(有時(shí)只是一個(gè)列表)。不同類(lèi)型的總線之間沒(méi)有任何一致性。

驅(qū)動(dòng)模型抽象了啥

當(dāng)前驅(qū)動(dòng)程序模型為描述總線和總線下可能出現(xiàn)的設(shè)備提供了一個(gè)通用的、統(tǒng)一的模型。統(tǒng)一總線模型包括一組所有總線都具有的公共屬性和一組公共回調(diào),如總線探測(cè)期間的設(shè)備發(fā)現(xiàn)、總線關(guān)閉、總線電源管理等。

通用的設(shè)備和橋接接口反映了現(xiàn)代計(jì)算機(jī)的目標(biāo):即執(zhí)行無(wú)縫設(shè)備“即插即用”,電源管理和熱插拔的能力。特別是,英特爾和微軟規(guī)定的模型(即ACPI)可確保與x86兼容的系統(tǒng)上幾乎任何總線上的幾乎所有設(shè)備都可以在此范式下工作。當(dāng)然,雖然大多數(shù)總線都支持其中大多數(shù)操作,但并不是每條總線都能夠支持所有此類(lèi)操作。

那么哪些通用需求被抽象出來(lái)了呢?

電源系統(tǒng)和系統(tǒng)關(guān)機(jī),對(duì)于電源管理與系統(tǒng)關(guān)機(jī)對(duì)于設(shè)備相關(guān)的操作進(jìn)行抽象實(shí)現(xiàn)。關(guān)機(jī)為什么要被抽象出來(lái)管理,比如設(shè)備操作正在進(jìn)行此時(shí)系統(tǒng)收到關(guān)機(jī)指令,那么在設(shè)備模型層就會(huì)遍歷系統(tǒng)設(shè)備硬件,確保系統(tǒng)正確關(guān)機(jī)。

用戶(hù)空間訪問(wèn):sysfs虛擬文件系統(tǒng)實(shí)現(xiàn)與設(shè)備模型對(duì)外的訪問(wèn)抽象,這也是為什么說(shuō)Linux 設(shè)備也是文件的由來(lái)。實(shí)際從軟件架構(gòu)層面看,這其實(shí)是一個(gè)軟件橋接模塊,抽象出統(tǒng)一用戶(hù)訪問(wèn)接口,橋接了設(shè)備驅(qū)動(dòng)。

熱插拔管理:熱插拔管理機(jī)制定義統(tǒng)一的抽象接口操作符kset_hotplug_ops,不同設(shè)備利用操作符實(shí)現(xiàn)差異化。

設(shè)備類(lèi)型:設(shè)備分類(lèi)機(jī)制,從高層級(jí)抽象描述設(shè)備類(lèi)型,具體可以在sysfs下面體現(xiàn)。

用戶(hù)空間訪問(wèn)

由于具有系統(tǒng)中所有設(shè)備的完整分層視圖,因此將完整的分層視圖導(dǎo)出到用戶(hù)空間變得相對(duì)容易。這是通過(guò)實(shí)現(xiàn)名為sysfs虛擬文件系統(tǒng)來(lái)完成的。

sysfs的自動(dòng)掛載通常是通過(guò)/etc/fstab文件中的以下條目來(lái)完成的:

none /syssysfs defaults 0 0

對(duì)于Debian系統(tǒng)而言,可能在/lib/init/fstab采用下面的形式掛載:

none /sys sysfs nodev,noexec,nosuid 0 0

當(dāng)然也可以采用手動(dòng)方式掛載:

# mount -t sysfs sysfs /sys

當(dāng)將設(shè)備插入樹(shù)中時(shí),都會(huì)為其創(chuàng)建一個(gè)目錄。該目錄可以填充在發(fā)現(xiàn)的每個(gè)層(全局層,總線層或設(shè)備層)中。

全局層當(dāng)前創(chuàng)建兩個(gè)文件-'name'和'power'。前者報(bào)告設(shè)備名稱(chēng)。后者報(bào)告設(shè)備的當(dāng)前電源狀態(tài)。它還將用于設(shè)置當(dāng)前電源狀態(tài)。

總線層為探測(cè)總線時(shí)發(fā)現(xiàn)的設(shè)備創(chuàng)建文件。例如,PCI層當(dāng)前為每個(gè)PCI設(shè)備創(chuàng)建“ irq”和“resource”文件。

特定于設(shè)備的驅(qū)動(dòng)程序也可以在其目錄中導(dǎo)出文件,以暴露特定于設(shè)備的數(shù)據(jù)或可用接口。

驅(qū)動(dòng)模型實(shí)現(xiàn)

先來(lái)梳理一下內(nèi)部幾個(gè)主要與驅(qū)動(dòng)模型相關(guān)的數(shù)據(jù)結(jié)構(gòu):

./include/linux/Device.h 定義設(shè)備驅(qū)動(dòng)主要數(shù)據(jù)結(jié)構(gòu)

bus_type:抽象描述總線類(lèi)型,如USB/PCI/I2C/MMC等

device_driver:實(shí)現(xiàn)具體連接在總線上的設(shè)備驅(qū)動(dòng)。

device:描述連接在總線上的設(shè)備

./include/linux/Kobject.h中定義了隱藏在后臺(tái)的類(lèi)似于基類(lèi)的數(shù)據(jù)結(jié)構(gòu):

kset:可以認(rèn)為是kobject的頂層容器類(lèi)。每個(gè)kset內(nèi)部都包含了自己的kobject.

kobject:在 sysfs 中出現(xiàn)的每個(gè)對(duì)象都對(duì)應(yīng)一個(gè) kobject, 它和內(nèi)核交互來(lái)創(chuàng)建它的可見(jiàn)表述,每一個(gè) kobject 對(duì)應(yīng) 文件系統(tǒng) /sys 里的一個(gè) 目錄,目錄的名字就是結(jié)構(gòu)體中的 name

bus_type

bus_type用以驅(qū)動(dòng)總線,具體的驅(qū)動(dòng)USB/I2C/PCI/MMC等:

注冊(cè)總線,利用bus_register注冊(cè)總線,bus_unregister刪除總線。如下例子,每種總線須定義一個(gè)bus_type對(duì)象,并利用bus_register注冊(cè)總線,或bus_unregister刪除總線。

/*i2c-core-base.c*/ structbus_typei2c_bus_type={ .name="i2c", .match=i2c_device_match, .probe=i2c_device_probe, .remove=i2c_device_remove, .shutdown=i2c_device_shutdown, }; EXPORT_SYMBOL_GPL(i2c_bus_type); staticint__initi2c_init(void) { intretval; retval=of_alias_get_highest_id("i2c"); down_write(&__i2c_board_lock); if(retval>=__i2c_first_dynamic_bus_num) __i2c_first_dynamic_bus_num=retval+1; up_write(&__i2c_board_lock); /*注冊(cè)I2C總線*/ retval=bus_register(&i2c_bus_type); if(retval) returnretval; is_registered=true; #ifdefCONFIG_I2C_COMPAT i2c_adapter_compat_class=class_compat_register("i2c-adapter"); if(!i2c_adapter_compat_class){ retval=-ENOMEM; gotobus_err; } #endif retval=i2c_add_driver(&dummy_driver); if(retval) gotoclass_err; if(IS_ENABLED(CONFIG_OF_DYNAMIC)) WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier)); if(IS_ENABLED(CONFIG_ACPI)) WARN_ON(acpi_reconfig_notifier_register(&i2c_acpi_notifier)); return0; class_err: #ifdefCONFIG_I2C_COMPAT class_compat_unregister(i2c_adapter_compat_class); bus_err: #endif is_registered=false; /*錯(cuò)誤時(shí)刪除總線*/ bus_unregister(&i2c_bus_type); returnretval; }

注冊(cè)適配器驅(qū)動(dòng)程序(USB控制器,I2C適配器等),以檢測(cè)連接的設(shè)備,并提供與設(shè)備的通信機(jī)制

圖中的match函數(shù)接口用于將驅(qū)動(dòng)程序與設(shè)備進(jìn)行匹配。match回調(diào)的目的是使總線有機(jī)會(huì)通過(guò)比較驅(qū)動(dòng)程序支持的設(shè)備ID與特定設(shè)備的設(shè)備ID來(lái)確定特定驅(qū)動(dòng)程序是否支持特定設(shè)備,而不會(huì)犧牲特定于總線的功能或類(lèi)型安全性 。當(dāng)向總線注冊(cè)驅(qū)動(dòng)程序時(shí),將遍歷總線的設(shè)備列表,并為每個(gè)沒(méi)有與之關(guān)聯(lián)的驅(qū)動(dòng)程序的設(shè)備調(diào)用match回調(diào)。

提供API函數(shù)以實(shí)現(xiàn)適配器驅(qū)動(dòng)以及設(shè)備驅(qū)動(dòng)。

同時(shí)dev_pm_ops *pm實(shí)現(xiàn)對(duì)于總線的功耗管理接口抽象。對(duì)于特定總線實(shí)現(xiàn)這個(gè)操作符對(duì)應(yīng)的函數(shù)。

structdev_pm_ops{ int(*prepare)(structdevice*dev); void(*complete)(structdevice*dev); int(*suspend)(structdevice*dev); int(*resume)(structdevice*dev); int(*freeze)(structdevice*dev); int(*thaw)(structdevice*dev); int(*poweroff)(structdevice*dev); int(*restore)(structdevice*dev); int(*suspend_late)(structdevice*dev); int(*resume_early)(structdevice*dev); int(*freeze_late)(structdevice*dev); int(*thaw_early)(structdevice*dev); int(*poweroff_late)(structdevice*dev); int(*restore_early)(structdevice*dev); int(*suspend_noirq)(structdevice*dev); int(*resume_noirq)(structdevice*dev); int(*freeze_noirq)(structdevice*dev); int(*thaw_noirq)(structdevice*dev); int(*poweroff_noirq)(structdevice*dev); int(*restore_noirq)(structdevice*dev); int(*runtime_suspend)(structdevice*dev); int(*runtime_resume)(structdevice*dev); int(*runtime_idle)(structdevice*dev); };

iommu_ops 操作符提供總線相關(guān)的IOMMU抽象。

設(shè)備驅(qū)動(dòng)注冊(cè)到總線上時(shí),將在sysfs管理總線/設(shè)備/設(shè)備驅(qū)動(dòng)的層次關(guān)系,以PCI為例:

/*在總線上注冊(cè)的驅(qū)動(dòng)程序會(huì)在總線的驅(qū)動(dòng)程序目錄中獲得一個(gè)目錄*/ /sys/bus/pci/ |--devices `--drivers |--IntelICH |--IntelICHJoystick |--agpgart `--e100 /*在該類(lèi)型的總線上發(fā)現(xiàn)的每個(gè)設(shè)備都會(huì)在總線的設(shè)備目錄中獲得到物理層次結(jié)構(gòu)中該設(shè)備目錄的符號(hào)鏈接*/ /sys/bus/pci/ |--devices ||--00:00.0->../../../root/pci0/00:00.0 ||--00:01.0->../../../root/pci0/00:01.0 |`--00:02.0->../../../root/pci0/00:02.0 `--drivers

總線屬性:bus_groups/設(shè)備屬性dev_groups/驅(qū)動(dòng)屬性drv_groups。

device

作用:抽象描述具體的設(shè)備

設(shè)備注冊(cè):發(fā)現(xiàn)設(shè)備的總線驅(qū)動(dòng)程序使用下面的函數(shù)來(lái)向內(nèi)核注冊(cè)設(shè)備

intdevice_register(structdevice*dev);

利用dvice_unregister()從總線上刪除設(shè)備

device_driver

作用:抽象描述連接在總線上的具體設(shè)備的驅(qū)動(dòng)

驅(qū)動(dòng)注冊(cè),通過(guò)下面的函數(shù)將設(shè)備驅(qū)動(dòng)程序注冊(cè)

intdriver_register(structdevice_driver*drv);

使用它使用以下命令從驅(qū)動(dòng)程序目錄中添加和刪除屬性

intdriver_create_file(structdevice_driver*,conststructdriver_attribute*); voiddriver_remove_file(structdevice_driver*,conststructdriver_attribute*);

class

作用:抽象設(shè)備的高層視圖,描述的是設(shè)備的集合。抽象了同類(lèi)型的設(shè)備的底層實(shí)現(xiàn)細(xì)節(jié)。比如所有的網(wǎng)絡(luò)接口都位于/sys/class/net下

struct subsys_private *p描述類(lèi)鏈表

kobject/kset

kobject類(lèi)似于面向?qū)ο笾械膬?nèi)核基類(lèi),內(nèi)核利用它將各個(gè)對(duì)象連接起來(lái)組成分層的機(jī)構(gòu)體系,其parent指針將形成一個(gè)樹(shù)狀分層結(jié)構(gòu)。

kset內(nèi)部包含了kobject。重心在描述對(duì)象的聚集于集合。這也是set一詞的含義。每一個(gè)kset添加到系統(tǒng)中,都將在sysfs中創(chuàng)建一個(gè)目錄

kobject/kset一起實(shí)現(xiàn)了sysfs虛擬文件系統(tǒng)中設(shè)備/總線/設(shè)備驅(qū)動(dòng)樹(shù)狀分層結(jié)構(gòu)的最關(guān)鍵的底層實(shí)現(xiàn)由來(lái)。

總體上而言:

通過(guò)上面一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)關(guān)系分析,總線設(shè)備驅(qū)動(dòng)模型最終目的是實(shí)現(xiàn)如下這樣一個(gè)分層驅(qū)動(dòng)模型。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1839

    瀏覽量

    85263
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11295

    瀏覽量

    209348

原文標(biāo)題:學(xué)Linux驅(qū)動(dòng):應(yīng)先了解總線驅(qū)動(dòng)模型

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何正確認(rèn)識(shí)電感?

    雖然一直知道,電感的作用,但是具體到那些參數(shù)是比較重要的?如何理解這些參數(shù)?求解。{:1:}
    發(fā)表于 07-18 19:36

    正確認(rèn)識(shí)計(jì)算機(jī)硬件的安全維護(hù)措施有哪些

    正確認(rèn)識(shí)計(jì)算機(jī)硬件的安全維護(hù)措施有哪些科技論文瀏覽:1次摘 要: 論文摘要:對(duì)于硬盤(pán)而言,維護(hù)它的安全只要盡量避免較大的震動(dòng)即可。現(xiàn)階段,我們所使用的硬盤(pán)多是機(jī)械硬盤(pán),內(nèi)部結(jié)構(gòu)精密且復(fù)雜,一旦發(fā)生
    發(fā)表于 09-08 08:18

    正確認(rèn)識(shí)鉛酸蓄電池的修復(fù)和蓄電池修復(fù)的幾大騙局

    正確認(rèn)識(shí)鉛酸蓄電池的修復(fù)和蓄電池修復(fù)的幾大騙局   部分故障的蓄電池在一定的程度
    發(fā)表于 11-11 14:08 ?1575次閱讀

    如何正確認(rèn)識(shí)繼電器

    如何正確認(rèn)識(shí)繼電器    是根據(jù)接收到的某種信號(hào),按控制要求自動(dòng)開(kāi)閉水電流控制器路的一類(lèi)電器。 &
    發(fā)表于 12-08 10:16 ?1333次閱讀

    Linux設(shè)備驅(qū)動(dòng)模型摘抄

    Linux設(shè)備驅(qū)動(dòng)模型摘抄
    發(fā)表于 10-31 09:00 ?8次下載
    <b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>的<b class='flag-5'>模型</b>摘抄

    對(duì)人工智能的正確認(rèn)識(shí)

    1917年現(xiàn)代藝術(shù)核心人物馬塞爾·杜尚在美國(guó)紐約展出了一個(gè)小便器,并命名為《泉》,這件作品沖擊了當(dāng)時(shí)的藝術(shù)觀念,直面藝術(shù)與生活的問(wèn)題。盡管當(dāng)時(shí)《泉》被拒絕展出,但是杜尚的現(xiàn)代藝術(shù)觀念影響深遠(yuǎn),之后很多流派都從杜尚那里汲取營(yíng)養(yǎng)。
    發(fā)表于 07-10 13:50 ?8422次閱讀

    正確認(rèn)識(shí)人工智能

    人工智能(AI,Artificial Intelligence)本質(zhì)上就是為了自學(xué)而設(shè)計(jì)的,有時(shí)它的確會(huì)出錯(cuò)。當(dāng)然,人們可以在事后做出調(diào)整,但最好的解決辦法是一開(kāi)始就防止它發(fā)生。那么,如何才能讓人工智能擺脫偏見(jiàn)呢?
    發(fā)表于 03-05 14:45 ?2061次閱讀

    關(guān)于區(qū)塊鏈的正確認(rèn)識(shí)

    每一個(gè)人對(duì)于區(qū)塊鏈認(rèn)識(shí)的不同,最終導(dǎo)致了他們?cè)趯?shí)踐區(qū)塊鏈的方式和方法。雖然最近一段時(shí)間以來(lái),數(shù)字貨幣的價(jià)格不斷上漲,但是,依然有人在區(qū)塊鏈的道路上執(zhí)著前行。縱然是在區(qū)塊鏈這條道路上,我們依然看到了公
    的頭像 發(fā)表于 01-31 09:53 ?4493次閱讀

    如何正確認(rèn)識(shí)擴(kuò)音機(jī)的輸出功率

    如何正確認(rèn)識(shí)擴(kuò)音機(jī)的輸出功率。
    發(fā)表于 04-10 10:11 ?14次下載

    如何正確認(rèn)識(shí)電感鎮(zhèn)流器,電感鎮(zhèn)流器基礎(chǔ)知識(shí)詳解

    如何正確認(rèn)識(shí)電感鎮(zhèn)流器?其實(shí)關(guān)于電感鎮(zhèn)流器的知識(shí),小編之前跟大家說(shuō)過(guò)許多。今天小編就把之前所說(shuō)過(guò)的電感鎮(zhèn)流器知識(shí)為大家全新梳理一遍,幫助各位更好的理解電感鎮(zhèn)流器。 當(dāng)開(kāi)關(guān)閉合電路中施加
    發(fā)表于 04-27 17:15 ?2001次閱讀

    你知道有哪幾種人不適合學(xué)plc編程嗎?

    缺乏對(duì)編程有正確認(rèn)識(shí)的人。想學(xué)編程語(yǔ)言就先得做好充分的準(zhǔn)備,編程語(yǔ)言難不難?
    的頭像 發(fā)表于 07-11 09:55 ?2.8w次閱讀

    學(xué)Linux驅(qū)動(dòng):建議先了解總線驅(qū)動(dòng)模型

    [導(dǎo)讀] Linux設(shè)備林林總總,嵌入式開(kāi)發(fā)一個(gè)繞不開(kāi)的話題就是設(shè)備驅(qū)動(dòng)開(kāi)發(fā),在做具體設(shè)備驅(qū)動(dòng)開(kāi)發(fā)之前,有必要對(duì)Linux設(shè)
    發(fā)表于 02-07 11:04 ?3次下載
    學(xué)<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b>:建議先了解總線<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>模型</b>

    Linux總線、設(shè)備、驅(qū)動(dòng)模型的探究

    Linux總線、設(shè)備、驅(qū)動(dòng)模型的探究
    發(fā)表于 02-14 12:01 ?7次下載

    正確認(rèn)識(shí)駕駛輔助系統(tǒng)的局限性

    潛力,”DEKRA德凱董事會(huì)成員兼首席技術(shù)官 Ulrike Hetzel女士說(shuō)道。“然而,認(rèn)識(shí)到駕駛輔助系統(tǒng)的局限性也很重要。”
    的頭像 發(fā)表于 07-13 14:24 ?1088次閱讀

    電路設(shè)計(jì)中,如何正確認(rèn)識(shí)磁珠的性能參數(shù)?

    電路設(shè)計(jì)中,如何正確認(rèn)識(shí)磁珠的性能參數(shù)? 磁珠是一種常見(jiàn)的電路元件,廣泛應(yīng)用于濾波器、隔離器和開(kāi)關(guān)電源等電路設(shè)計(jì)中。為了正確認(rèn)識(shí)磁珠的性能參數(shù),并在電路設(shè)計(jì)中合理選用和應(yīng)用磁珠,我們首先需要了解磁珠
    的頭像 發(fā)表于 11-22 18:18 ?2109次閱讀
    主站蜘蛛池模板: 免费播放美女一级毛片| 香蕉eeww99国产精品| 一个色综合久久| 嘟嘟嘟WWW免费高清在线中文| 久久久精品国产免费A片胖妇女| 她也色在线视频站| 97视频在线播放| 久久re视频精品538在线| 婷婷六月激情综合一区| bbw极度另类孕妇| 快播萝莉影院| 亚洲午夜精品久久久久久抢| 国产精片久久久久久婷婷| 欧美成人性色生活18黑人| 在线AV国产传媒18精品免费| 国产午夜AV无码无片久久96 | 国产三级在线精品男人的天堂| 嗯啊…跟校草在教室里做h| 一区在线观看在线| 国产亚洲一区二区三区啪| 色欲AV精品一区二区入口| gogo亚洲肉体艺术照片9090| 凌馨baby| 中文字幕 亚洲 有码 在线 | 啦啦啦视频在线观看WWW| 亚洲欧美中文字幕5发布| 国产人成高清在线视频99| 色欲精品国产AV久久久| hdsexvideos中国明星| 免费一级片网站| 最近中文字幕高清中文| 久久久视频2019午夜福利| 亚洲熟女乱色一区二区三区| 国产中文视频无码成人精品| 亚洲 在线 日韩 欧美| 国产精品一库二库三库| 网友自拍偷拍| 国产精片久久久久久婷婷| 我要干av| 国产午夜电影院| 亚州日韩精品AV片无码中文|