2017-09-06 71 views
0

我寫一個司機D1,將調用request_mem_region()和ioremap的(),和一個驅動器D2,將調用的ioremap()具有相同的地址。
在這種情況下會發生什麼?分割地圖調用兩臺Linux設備驅動程序

+2

*「在這種情況下會發生什麼?」* - 您將有意識地編寫不符合內核約定的驅動程序。否則系統可能會按預期運行。這是糟糕的代碼組織;代碼的作品,但那些不得不維護它的人受苦。 – sawdust

回答

0

這兩個驅動程序都能按預期工作,但建議在ioremap()之前使用request_mem_region()以避免其他驅動程序寫入該物理內存區域。

request_mem_region告訴你的驅動程序將使用此範圍內的I/O地址,這將妨礙其它驅動程序,使通過request_mem_region任何重疊調用同一區域的內核。

這種機制不會做任何類型的映射,它是一種純粹的保留機制,它依賴於所有內核設備驅動程序都必須很好的事實,並且它們必須調用request_mem_region,檢查返回值,並在出現問題時正常運行的錯誤。

因此,您的代碼在沒有request_mem_region()的情況下工作是完全合乎邏輯的。

+0

感謝您的回覆,我的疑問是在d1我將調用request_mem_region和ioremap,在d2上我只會調用ioremap,因爲d1已經隱藏了範圍,可以通過d2的ioremap獲得已經鎖定的相同物理地址的虛擬地址d1 – anikhan

+0

@anikhan我也有同樣的情況,在我的情況下,第二個驅動程序中的ioremap()工作正常,並且能夠讀取和寫入該虛擬地址,您是否發現您的驅動程序有任何問題? – Ash