2014-12-31 81 views
0

我有一個ARM目標。物理地址上的ioremap失敗

我需要讀出一個物理地址。 該地址是parralel NOR閃存中的一個位置。 rom直接在地址總線上。

如果我創建與一個模塊:

if ((rmap = ioremap(ROM_BASE, ROM_SIZE)) == NULL) 
{ 
    printk(KERN_ERR "Mapping ROM failed\n"); 
    return -1; 
} 

(使用鹼0x40000000之後大小爲0x100) 如果失敗: [1091.270686]映射ROM失敗 insmod的:錯誤插入 'rom.ko':-1操作不允許

目標在這種情況下不具有/ dev/mem ... 但它具有不同的內核,並且讀取相同的地址工作。 所以地址是正確和可讀的。上臂

由於

+0

嘗試一個更大的大小,如0x10000000,無關緊要,如果你只訪問它的0x100。 –

+0

#dwelch,謝謝..但嘗試不同的尺寸,所有相同的結果。 – arnold

+0

往往是一個更大的尺寸有幫助,哦... –

回答

2

的ioremap結束調用__arm_ioremap_pfn_caller與MTYPE = MT_DEVICE,其可以以多種方式失敗:

  • 地址不能被定義爲RAM地址(檢查meminfo中)
  • 過程可能超出VM空間(不太可能)
  • 有可能是沒有免費的頁表項(依賴於架構)

欲瞭解更多關於ARM內存分配檢查this page

+0

感謝您的信息。 如果我是正確的Linux 2.6(因爲這是)不檢查RAM地址。 但檢查這個我發現一個函數__arm_ioremap..tried它,它的工作原理! 我敢肯定,這不是最好的方式..但足以滿足我目前的需要。 因此,因爲這個答案讓我找到了一個解決方案,我將其標記爲accepted.Thanks! – arnold