2014-02-09 54 views
4

由於golang是一個系統的語言,它應該是能夠做一些用戶空間的硬件驅動程序的工作。17。golang:32位獲得mmap'd「的/ dev/MEM」區域

我想的mmap「的/ dev/MEM」,並做一些讀或寫一些內存映射PCI寄存器。 由於golang的syscall.Mmap返回一個字節數組。我怎麼可能做一個32位(例如)讀或寫寄存器?

逐字節訪問不被approperiate因爲一些寄存器只支持32個存取。

回答

4

您可以通過使用unsafe,並得到一個*uint32指針到在合適的偏移塊做到這一點。這是一個常規字節數組的例子,但是一個mmap的應該也是一樣的。

package main 

import (
    "fmt" 
    "unsafe" 
) 

func main() { 
    a := make([]byte, 30) 
    p := (*uint32)(unsafe.Pointer(&a[8])) 
    *p = 0xabcd
    fmt.Println(a) 
}