2012-02-06 94 views
4

我想從閃存複製數據到RAM。 那麼我如何設置DMA控制器中RAM的目標內存地址,以便它可以使用它的通道將數據從源地址(在閃存中)複製到RAM存儲器中。如何通過DMA控制器訪問RAM存儲器?

我在x86 arch上做,它是8237 DMA。

+0

這是什麼類型的設備?這是一個USB或SATA閃存? – 2012-02-06 09:21:44

+0

這是內核操作系統,應該照顧管理...除非沒有內核。 – m0skit0 2012-02-06 09:26:07

+0

David:Ita SDD閃存從我必須複製數據(內核映像)並將其放入RAM中。 我已經閱讀了一些tutoials,但很抱歉得到了很多信息如何做mem-to-mem複製(尤其是設置目標地址) m0skit0 - 我正在通過bootloader進行這項操作,目前沒有內核,因爲bootloader本身就是將內核映像從閃存複製到RAM中 – user1083212 2012-02-06 10:01:48

回答

1

8237 DMA控制器能夠進行從RAM到RAM,從I/O到RAM,從RAM到I/O設備的傳輸。

您必須考慮到您將只能複製最多64KB的數據。如果您想複製超過64KB,則需要多次傳輸操作。

假設你使用的是一臺IBM PC有相同的環境,你可以設置在單獨的鎖目標內存段地址,你將需要:

  1. 規範化目的地地址段:偏移,使得偏移量爲大於16 正常化進行這種方式下(DIV是整數除法,MOD是彈性模量):

    normalized_segment = segment + offset DIV 16

    normalized_offset = offset MOD 16

  2. 裝載段值進入高位鎖存器屬於您要使用的信道(頁面地址寄存器)

  3. 負載偏移地址爲起始地址要與DMA通道的註冊使用。
  4. 繼續使用DMA設置(傳輸長度,模式,EOC中斷等)