對(duì)同步問(wèn)題,需要注意:
1)不能調(diào)用schedule的情況(wait_event、sleep等, 等待函數(shù)內(nèi)部會(huì)調(diào)用schedule):
(1)中斷、
(2)軟中斷、
(3)tasklet、
(4)timer(基于軟中斷實(shí)現(xiàn))、
(5)hrtimer (軟中斷或硬中斷環(huán)境下執(zhí)行)執(zhí)行環(huán)境下、
(6)或者“內(nèi)核線程、普通線程內(nèi)核態(tài)環(huán)境下調(diào)用了preempt_disable()/local_irq_disable()后”,
不能調(diào)用schedule()函數(shù)。
因?yàn)閟pin_lock成功后,spin_lock內(nèi)部調(diào)用了preempt_disable,所以spin_lock后,不能調(diào)用schedule()。當(dāng)然spin_unlock會(huì)調(diào)用preempt_enable,所以后面可以根據(jù)什么執(zhí)行context來(lái)判斷是否能調(diào)用schedule()函數(shù)。
2)能調(diào)用等待函數(shù)的情況
(1) workqueue(內(nèi)部實(shí)現(xiàn)用到kernel thread)、
(2) kernel thread、
(3) 普通線程的內(nèi)核態(tài),
這些context下,可以調(diào)用schedule()。前提是沒(méi)有調(diào)用preempt_disable禁止搶占和local_irq_disable禁止中斷等操作時(shí)。
具體的原因和原理,請(qǐng)看我的課程:
https://edu.51cto.com/course/17155.html
和
https://edu.51cto.com/course/17132.html
關(guān)于具體的寫(xiě)linux驅(qū)動(dòng)的方法、技巧和注意事項(xiàng),歡迎觀看我的《如何編寫(xiě)linux設(shè)備驅(qū)動(dòng)》的視頻:
https://edu.51cto.com/course/17132.html
另外我的相關(guān)培訓(xùn)視頻請(qǐng)看:
歡迎觀看我發(fā)布的各個(gè)課程: https://edu.51cto.com/lecturer/8896847.html
另外我的免費(fèi)的linux各種驅(qū)動(dòng)開(kāi)發(fā)課程如下:
https://edu.51cto.com/course/17138.html
另外關(guān)于《關(guān)于如何編寫(xiě)linux設(shè)備驅(qū)動(dòng)》
1)首先確定硬件接口使用的總線,
2)然后確定要實(shí)現(xiàn)的功能,是網(wǎng)卡、sensor還是什么?再確定對(duì)上層應(yīng)用暴露的接口, 從而選擇子系統(tǒng),例如iio、input子系統(tǒng)等。由于linux只有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種設(shè)備,其實(shí)iio、input子系統(tǒng)都是字符設(shè)備,只是它們幫你封裝好了字符設(shè)備的file_operations和Major設(shè)備號(hào)了,另外提供統(tǒng)一的sysfs接口(一類(lèi)sysfs接口)。你只需要按照子系統(tǒng)要求注冊(cè)進(jìn)子系統(tǒng)就行。子系統(tǒng)就像應(yīng)用和你驅(qū)動(dòng)之間的framework中間層,它幫你處理了很多通用的功能。另外自己再加入一些specific的sysfs接口即可。
確定了上面這些后,你就可以找到對(duì)應(yīng)的例子去抄(參考)了。說(shuō)白了,linux 內(nèi)核設(shè)計(jì)者已經(jīng)給你搭好了大的框架,你所要思考框架的東西并不多,你需要的是熟悉內(nèi)核提供了什么框架子系統(tǒng),如何使用。
什么樣的bus,決定你調(diào)用什么總線API去訪問(wèn)硬件,什么樣的功能決定你用什么樣的子系統(tǒng)來(lái)暴露接口給上層應(yīng)用使用。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。