【迅為iTop4412學習筆記】關於註冊裝置、註冊驅動、生成裝置節點小結
宣告
以下都是我剛開始看驅動視訊的個人強行解讀,如果有誤請指出,共同進步。
本節目標
瞭解註冊裝置、註冊驅動、生成裝置節點這些概念。
其實學到現在,很多東西我們都似懂非懂,而我也是剛學,也感覺很多東西似是而非,但好在程式碼過程和結果都是對的。
我們再次整理一下這些概念。
- 無論是裝置,還是驅動,都是掛載在總線上
- 因為有些東西是沒有實體匯流排的(如IIC),所以linux定義了一個虛擬匯流排platform
- 我們之前學習的裝置,驅動,都是掛載在platform上的
接著我們分類一下注冊裝置的方式
- 直接編譯進核心(一直在核心裡)
- 以模組的方式載入進核心 (用就載入,不用解除安裝)
那麼裝置到底是個啥呢?
比如我們電腦要有硬碟,就插入了硬碟裝置。
比如我們要用U盤,就插入了USB裝置。
這些都是好分類的,像一些不好分類的,就把他們安排到了雜項裝置misc。
我們現在說的這些裝置,其實還是很籠統,因為插入的硬碟不止一個,你說的哪個?插入了那麼多USB裝置,又說的哪個?
所以linux的區分方式就是主裝置號,和次裝置號。
主裝置號用來分類,比如USB類的裝置,你們的號是180。雜項裝置,你們的號是10
再分類之後,我們再細分到每個裝置。
比如,雜項裝置裡面有一個LED,我們就給他分配一個號叫123。
這樣一來,我們所有的裝置就很清晰了,比如我們要找LED,可以很輕易的說出他的位置:10號雜項裝置裡的123號就是LED。
而我們註冊裝置,其實就是這麼一個過程,起名字(name),分配號(id)。
此處挖坑(之前註冊裝置id=-1是否就是不分配主裝置號?)
而後面註冊驅動,也是因為我們寫驅動就是為了驅動這些裝置。自然,名字要確定,id也要確定,這樣驅動才能在匯流排準確的找到是哪個裝置。
而註冊裝置節點,他並不是一個必須要做的事情。因為註冊裝置節點的意義就是在/dev下生成一個檔案,用來對上層提供介面(因為linux一切皆檔案,操控檔案即可),我們在註冊雜項裝置的時候名字叫mryang_misc_ctl。這個檔案就是編寫應用時用ioctl來控制的。然而裝置節點,並不是非要你真的有裝置,真的有驅動才能定義。他只是一個紐帶,負責傳值上層賦的值。你有裝置和驅動,他就給你值,要是沒有,他也傳值,只是傳遞的值沒用上罷了。對於註冊裝置節點,一般是在probe()裡做,因為註冊了裝置,註冊了驅動,可不就要在建一個裝置節點來對上層開放介面。這樣上層就可以操控裝置了。也就完成了驅動的光榮使命。
收尾
註冊裝置,註冊驅動,生成裝置節點的函式我就不說了,以往的程式碼裡都比較清楚。而我們本節其實要思考的是,這個流程我們是否能理清楚。剛學的時候一團糟,就是跟著擼程式碼,其實不太好,我們看著程式碼,也要先要想清楚,理清概念,要知其然更知其所以然。這樣才能得心應手。這句話也送給我自己當作座右銘。