linux kernel kobject與子系統

2021-10-07 15:42:02 字數 4238 閱讀 2524

核心裝置模型

目的:表示裝置和裝置在系統中的拓撲關係

優點:1減少核心**量,2可以統一檢視所有裝置狀態和所連線的匯流排,3可以聯絡好裝置和其對應的驅動,或者驅動對應的裝置。4可以按型別分類,可以沿著葉子節點方向向根節點訪問來保證正確關閉裝置電源(先關目的節點的所有子節點,再關閉該節點)

裝置模型的樣子:

已經被用資料結構抽象了一遍。使用者的角度可以從sys目錄鳥瞰核心中的裝置模型關係

通常sys下開啟的

一級目錄是不同的型別的子系統,

二級目錄是在同一型別的目錄集合 

**目錄是唯一的目錄

核心中的樣子 usb裝置模型為例子

裝置子系統           

usb集線器

usb裝置

核心中抽象後的樣子   

裝置子系統       ( kset x,kset a 。。。) subsystem    

usb集線器     (kobject b kobject a。。。)kset a

usb裝置 a             kobject a

裝置抽象後所具有的功能:

可以區分裝置型別:

字元裝置,訪問方式:訪問裝置節點,不可定址;

miscdev簡化的裝置驅動

塊裝置, 訪問方式:訪問裝置節點,可以定址。(就是支援上次的lseek隨機訪問的方式)

網路裝置,訪問方式:套接字api,而非訪問裝置節點。

偽裝置,隨機數發生器,空裝置,零裝置,滿裝置。

裝置模型有資料結構套路:準備好核心工作者kobject,把相同型別的kobject歸到同乙個車間kset工作,把不同車間的kset整合出乙個子系統。

kobject ,他會是乙個很好的裝置看管員

1kobject物件給他所看管的裝置儲存著引用計數器, 沒對這個裝置物件引用時, 該物件將結束工作週期。該裝置可以從記憶體中刪除。

2sysfs中顯示的目錄對應著乙個kobject,

3kobject物件有指定好paren他的上層節點,形成了不同kobject間的層次關係,維持車間kset中的層次列表(parent下面解釋和kset的區別)

4 熱插拔kobject子系統產生時間通知使用者控制項

kset 物件:看管員的管理者

1每個kobject被建立的時候基本都指定好了他們對應的kset,所以分類時自動會找到所屬上層所屬的kset。說到這裡指只是給大家介紹下層次感。

2 將uevent,ktype的操作匯集到kset

subsystem子系統:

實際是kset和訊號量的集合

開啟資料結構,一些疑惑和介紹。

struct kobject )      hlist_head 鍊錶的節點, 減掉已經得到的節點位置,往前挪offsetof個位置就得到了

工作2:建立kobject,保管好引用計數器。

a.kobject初始化就是用menmset 先整個把kobject中的引用計數kref設定為0,再用kobject_init()把引用計數設定為1,

b.把kobject_set_name()設定好名字好在sysfs目錄顯示

c.增加對kobject引用/減引用要注意返回值,kobject_get() kobject_put()

建立kobject_add()+ kobject_init() =kobject_register

刪除 kobject_del  + kobject_put = kobject_unregister

建立對cdev的引用 還是最終要呼叫對模組owner中kobject 的引用。失敗則要釋放引用計數module_put(owner)

d 發沒引為0的通知。kobject的kref為0時沒人知道kobject過得怎麼樣了,所以要變0前先非同步通知大家, 用contariner獲得包含kobject的類物件,接著kfree(物件)   有引用時,不能釋放,因為不安全, 引用沒釋放完也不能釋放。

4kset和ktype相關介紹  

a.kset管理者乙個鍊錶要加入kobject成員, 先初始化kobject中的kset指向上層目標kset

b.管理kset的引用計數 kset_get() kset_put 增加和減少kset自帶的kobject的引用計數,管理引用的原理基本和kobject一致

c.kset有名字,另外kset的ktype成員是實際上被使用的成員,也就是之前說的kset的型別覆蓋底層的型別的那個ktype

d.析構相關的函式

ktype是真正的看管員,裝置後來怎麼樣了,要怎麼處理都是ktype在照看的,把對裝置共同的操作從kobject中分離出來了。

release: 定好了kobject的ktype也就是定好了release函式指標

sysfs_ops:兩個操作函式使用者讀屬性,

呼叫show把指定值編碼後放到緩衝區,實際長度作為返回值返回。或者所有kobject屬性使用同乙個show

store把儲存在緩衝區中的資料解碼,並返回實際解碼的位元組數,屬性有寫許可權才能呼叫store注意取資料前驗合法輸入

attribute **default_attrs 最後乙個元素必須用零填充。說明有什麼屬性。這個kobj_type 中的sysfs_ops提供方法實現attribute中的屬性

這個attribute有*name屬性名在sysfs中的名字,

module *owner指向模組的指標 

mode屬性保護位 s_irugo唯讀 s_iwusr只給root寫  

修改屬性,填乙個attr 傳給sysfs增刪目錄檔案函式 sysfs_create_remove_file

sysfs屬性傳韌體**給核心,bin_attribute 裡面有attribute  size (*read) (*write)一次可以讀寫1頁

5子系統相關介紹

核心提供了sysf子樹上實際是已經被註冊上去的各種kobject,和kobject集合的關係,上層通常是已經註冊好的subsystem

sysfs下的子系統:

塊裝置子系統:對應sys/block,裡面每個目錄都對應乙個已經註冊的塊裝置

裝置分層結構核心 :對應sys/devices 系統中實際的裝置拓撲。很重要哦,其他很多目錄都是抄了他裡面的層次

匯流排子系統:對應sys/bus 系統匯流排檢視

裝置節點子系統:對應sys/dev 已經註冊的裝置節點檢視

韌體子系統:對應sys/firmware 包含底層子系統的特殊樹

檔案子系統:對應sys/fs 已經註冊的檔案系統檢視

核心子系統:對應sys/kernel 核心配置項和狀態資訊

模組子系統:對應sys/module 已載入模組的資訊

電源子系統:對應sys/power 系統範圍的電源管理資料

匯流排有兩個ket,乙個是匯流排的裝置驅動集合, 乙個是插在匯流排上的所有裝置

裝置和驅動程式的關係用新的指標,符號鏈結

int sysfs_create_link(struct kobject *kobj,struct  kobject *target,char *name); 設定kobject和sysfs入口target的相對連線,

int sysfs_remove_link(struct kobject *kobj,char *name); 刪除符號鏈結

子系統是對ket和訊號的封裝,每個keset必須屬於乙個子系統,rwsem訊號量用於序列訪問kset內部鍊錶

sysfs和kobect關係就是用來kobect_add 那sysfs中就會有新的目錄,目錄名就是kobect的唯一名稱,kobect的parent就是對應在sysfs中的入口位置,為null時在sysfs的最高層目錄

熱插拔事件,是核心空間發到使用者空間的通知是系統配置變化了,插拔usb 使用者控制台切換,磁碟分割槽都會有這事要報,

kobject_add 或kobkect_del呼叫後才真正產生這事件

kset中的hotplug_ops 中有指向struct kset_hotplug_ops結構體的指標,kset中沒指定的kobject就要用parent指標找到乙個包含kset的kobject,再使用這個kset的熱插拔操作

核心要為指定的kobject產生事件都要呼叫fliter函式0不產生事件,讓kset確定是否要發特定事件給使用者控制項 get_ktype知道事件型別

呼叫熱插拔時相關子系統名*name作為唯一引數傳遞給它  

熱插拔的資訊通過環境變數傳遞,提供新增環境變數的方法使用hotplug。

7類:裝置模型的類,是抽象底層的實現細節,  值關注提供的功能,基本上是在sys/class 目錄下

類關心裝置功能 匯流排跟蹤裝置,使用者用裝置的功能,裝置用sysfs和使用者空間通訊

左手座標系與右手座標系

今天記錄一下一些基本的數學知識,左手座標系和右手座標系。這些對於搞影象開發或者遊戲開發的朋友來說,應該是很基礎的東西,不過對於大部分人來說還是比較陌生的知識。之所以看這方面資料主要是因為在使用android camera使用matrix的過程中,發現需要一些數學理論支援才能理解。這是為了後面使用an...

地理座標系與投影座標系的區別

平時開展gis開發 研究 應用工作,總會接觸到座標系,也會遇到座標轉換的問題,如地理座標系 投影座標系等。地理座標系是球面座標,參考平面是橢球面,座標單位是經緯度 投影座標系是平面座標系,參考平面是水平面,座標單位是公尺 千公尺等。地理座標系轉換到投影座標系的過程理解為投影,即將不規則的地球曲面轉換...

子座標系C在父座標系W中的旋轉問題

用途 相機位姿估計 無人機位姿估計 c 函式展示 author vshawn singlex foxmail.com date 2016 11 04 lab cvlab202 csu 好了,現在問題越來越複雜了,這次的問題涉及兩個座標系 世界座標系w與相機座標系c。做過相機標定或者研究過相機模型的人...