4
由於golang是一個系統的語言,它應該是能夠做一些用戶空間的硬件驅動程序的工作。17。golang:32位獲得mmap'd「的/ dev/MEM」區域
我想的mmap「的/ dev/MEM」,並做一些讀或寫一些內存映射PCI寄存器。 由於golang的syscall.Mmap返回一個字節數組。我怎麼可能做一個32位(例如)讀或寫寄存器?
逐字節訪問不被approperiate因爲一些寄存器只支持32個存取。
由於golang是一個系統的語言,它應該是能夠做一些用戶空間的硬件驅動程序的工作。17。golang:32位獲得mmap'd「的/ dev/MEM」區域
我想的mmap「的/ dev/MEM」,並做一些讀或寫一些內存映射PCI寄存器。 由於golang的syscall.Mmap返回一個字節數組。我怎麼可能做一個32位(例如)讀或寫寄存器?
逐字節訪問不被approperiate因爲一些寄存器只支持32個存取。
您可以通過使用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)
}