使用python读取硬件中的寄存器

使用python读取硬件中的寄存器,python,cpu-registers,Python,Cpu Registers,我的目标是使用python脚本读取FPGA上的一些寄存器。 我已经在硬件(FPGA)上实现了一些寄存器,我正在尝试读取这些寄存器。有一些C语言的程序能够读取这些寄存器。但是我必须用python编写读/写程序,以便将其与我的验证环境(用python编写)集成。我是python新手,所以我希望你能通过你的建议和评论来指导我。下面是我实现的代码 这是我的密码 #!/usr/bin/env python import array import fcntl import re import socke

我的目标是使用python脚本读取FPGA上的一些寄存器。 我已经在硬件(FPGA)上实现了一些寄存器,我正在尝试读取这些寄存器。有一些C语言的程序能够读取这些寄存器。但是我必须用python编写读/写程序,以便将其与我的验证环境(用python编写)集成。我是python新手,所以我希望你能通过你的建议和评论来指导我。下面是我实现的代码

这是我的密码

#!/usr/bin/env python


import array
import fcntl
import re
import socket
import struct
import os

#connectedSockets = {}

# IOCTL Commands
SIOCREGREAD = 0x89F0
SIOCREGWRITE = 0x89F1

reg = 0x58000008

# open the NF descriptor
# Open a file
nf = os.open( "/dev/nf10", os.O_RDWR )
print "Opened NF descriptor"

# Now get a file object for the above file.
nf0 = os.fdopen(nf, "w+")

#print "opened nf0 file object"
inner_struct = struct.pack("II", reg, 0x0)
inner_struct_pinned = array.array('c', inner_struct)
print inner_struct_pinned
fcntl.ioctl(nf0, SIOCREGREAD,)
retval = struct.unpack("II", inner_struct_pinned)[0]
print retval

os.fdclose(nf)

在纯Python中,您将无法做到这一点。如果您拥有的C代码已经在共享库(.dll在Windows中,.so在Linux中)中,那么您可以使用ctypes模块访问它。否则,您将不得不将该C代码包装在共享库或Python扩展模块中(C端更复杂,Python端更简单)


对于这类事情的一些好例子,我推荐J.M.Hughes的O'Reilly书。

你的代码有效吗?你没有说问题出在哪里。我删除第一个链接的原因是它指向一个承载盗版电子书的网站。我们这里不允许这样做,所以我指了指奥莱利的真实网站,我觉得这是合法的,但我相信你的话。