内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

關于linux設備驅動是否使用全局變量的問題-創(chuàng)新互聯(lián)

關于linux設備驅動是否使用全局變量的問題

今天有人問我,關于linux設備驅動是否使用全局變量的問題,為什么說盡量不使用全局變量?

網站設計制作、成都網站制作服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。成都創(chuàng)新互聯(lián)把每個網站當做一個產品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!

其實這個問題從兩方面說:
1)使用全局變量,那么破壞了函數(shù)的重入性,為了實現(xiàn)函數(shù)重入,又不得不使用鎖來保護全局變量。這個效率變得低下了。
函數(shù)重入,主要是使用局部變量,即變量放在線程的棧中,各自使用自己的,就不會沖突。另外一種是使用鎖來保護,保證數(shù)據的完整性。

2)使用全局變量,那么就違背了linux驅動的編寫原則。即一個驅動程序應該支持驅動多個設備同時工作。例如馬達,一個馬達驅動程序可能同時操作多個馬達,多個軸的方向轉動,一個馬達控制一個軸向,例如x軸,y軸,z軸。 如果驅動程序里使用全局變量來保存設備信息,那么沒法做到同時支持保存多個設備信息了。如果使用鏈表方式,一個鏈表節(jié)點保存一個設備信息,雖然可行,但是每次內核操作你的驅動的api時傳入的struct device(例如struct i2c_client,內含了struct device),你不得不遍歷鏈表并比較對象指針才能找到操作的設備的信息。顯然效率低。

所以其實正確的方法是:
在probe時,分配一個私有結構體作為保存此設備的狀態(tài)信息。然后調用dev_set_drvdata系列函數(shù),把你分配的結構體和probe時傳入的struct device進行綁定。 struct device是總線驅動在探查到新設備插入時創(chuàng)建的。
后面系統(tǒng)調用你的驅動的api函數(shù)時,傳入的struct device,你通過dev_get_drvdata系列函數(shù)取回你的為此設備分配的私有結構體(內含具體設備的狀態(tài)信息,例如i2c地址等),從而知道是操作哪個具體設備。

具體請參考我的《linux設備驅動模型》視頻,
https://edu.51cto.com/course/17159.html
還有我的《如何編寫設備驅動》或《深入linux內核》視頻
https://edu.51cto.com/course/17132.html
https://edu.51cto.com/course/17155.html

另外我的相關培訓視頻請看:
歡迎觀看我發(fā)布的各個課程: https://edu.51cto.com/lecturer/8896847.html

我的新的更多優(yōu)惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前標題:關于linux設備驅動是否使用全局變量的問題-創(chuàng)新互聯(lián)
網站鏈接:http://www.rwnh.cn/article18/icgdp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗企業(yè)建站、外貿網站建設網站策劃、電子商務微信公眾號

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
桓仁| 双桥区| 林州市| 宜丰县| 永善县| 桑植县| 郑州市| 普定县| 陇西县| 南城县| 车致| 平遥县| 固阳县| 德格县| 洪泽县| 通榆县| 阿荣旗| 鹤壁市| 麻阳| 吉木乃县| 民县| 探索| 景德镇市| 永济市| 宣武区| 望城县| 沂南县| 北碚区| 台北市| 华池县| 视频| 武威市| 辛集市| 淳化县| 鹤峰县| 新乡县| 广平县| 中江县| 申扎县| 嵊泗县| 玛曲县|