由于 golang 是一种系统语言,所以它应该能够做一些用户空间硬件驱动程序的工作。
我想映射“/dev/mem”并对一些内存映射的 pci 寄存器进行一些读取或写入操作。
由于 golang 的 syscall.Mmap 返回一个字节数组。我怎么可能对寄存器进行 32 位(例如)读取或写入?
逐字节访问是不合适的,因为某些寄存器仅支持 32 位访问。
最佳答案
您可以通过使用 unsafe
并将 *uint32
指针放入块中正确偏移处来实现。这是一个常规字节数组的示例,但经过 mmap 处理的数组的工作方式应该相同。
package main
import (
"fmt"
"unsafe"
)
func main() {
a := make([]byte, 30)
p := (*uint32)(unsafe.Pointer(&a[8]))
*p = 0xabcd0123
fmt.Println(a)
}
关于golang : 32-bit access to mmap'd "/dev/mem" region,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21656873/