溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于linux哪些能調(diào)用schedule或者等待事件的問題

發(fā)布時(shí)間:2020-05-11 17:37:52 來(lái)源:網(wǎng)絡(luò) 閱讀:392 作者:GaoNeil 欄目:移動(dòng)開發(fā)

關(guān)于linux哪些能調(diào)用schedule或者等待事件的問題

對(duì)同步問題,需要注意:
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()。前提是沒有調(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)于具體的寫linux驅(qū)動(dòng)的方法、技巧和注意事項(xiàng),歡迎觀看我的《如何編寫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)開發(fā)課程如下:
https://edu.51cto.com/course/17138.html

另外關(guān)于《關(guān)于如何編寫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接口(一類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去訪問硬件,什么樣的功能決定你用什么樣的子系統(tǒng)來(lái)暴露接口給上層應(yīng)用使用。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI