2012-04-19 82 views
3

我工作的ARM嵌入式Linux系統上,偶爾的一個特定頁面上總線錯誤(但不總是)我得到了我的應用程序總線錯誤時,在虛擬地址0x2b200000的頁面訪問。根據編譯器/鏈接器是將代碼還是數據放在該地址,我在讀取變量時或在從該頁面獲取指令時遇到總線錯誤。公交車出錯後,我/ cat/proc/self/maps並確認該頁面確實已映射爲我的進程中有效的內容。ARM Linux系統:有效的虛擬內存

它只是似乎是一個頁面。頁面0x2b201000和0x2b1ff000總是可以的(很明顯,可能會有另一個地址完全不同的錯誤地址,我只是沒有碰到任何東西)。

我知道這裏有一百萬個未知數,但不知道是否任何人都可以在調查的一些方向指向我。該系統具有自定義驅動程序.kos,它使用從內核其餘部分保留或隱藏的物理內存,但我不明白這是如何影響虛擬地址的。

任何有識之士非常感謝。

+0

你是否認爲這是一個硬件錯誤,這是你看到的數據中止錯誤?如果在加載linux之前,如果你有一個引導加載程序,或者創建一個引導加載程序,你可以在那裏讀取該地址並查看是否存在總線故障。基本上把問題分成一半,是硬件還是軟件(例如,因爲該地址範圍不在mmu表中,它是mmu故障)。 – 2012-04-19 14:19:16

+0

我假設一旦啓動Linux並加載驅動程序,就會發生故障。由於它始終是相同的虛擬地址(並且可能不總是相同的底層物理頁框)。你知道我可以在哪裏爲MMU添加調試嗎? – gimmeamilk 2012-04-19 14:31:59

回答

2

感謝您的幫助。我發現這個問題 - 表現糟糕的驅動程序期望某些用戶地址爲2MB對齊。所以,例如,如果有效的映射地址實際上是0x2b3cc000,它將不正確地對齊到0x2b200000,並踐踏我的應用程序!

0

根據您的系統可能具有相同的virtual->物理映射。如果你有另一個工作設備,我會試着在那上面運行。這樣,您可以立即確定它是軟件還是硬件問題。

是否運行的用戶代碼或驅動程序代碼,當總線錯誤發生的呢?

你說這個錯誤並不總是會發生。當它發生在特定的構建中時,它是否總是在構建中發生,還是仍然是零星的?