Я пытаюсь прочитать некоторые регистры в аппаратном обеспечении (FPGA) с помощью Python. У меня уже есть код C для чтения регистров, и он отлично работает. Я хочу использовать их в python, используя ctypes.Ошибка сегментации в python при использовании ctypes
rdaxi.c
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define NF10_IOCTL_CMD_READ_STAT (SIOCDEVPRIVATE+0)
#define NF10_IOCTL_CMD_WRITE_REG (SIOCDEVPRIVATE+1)
#define NF10_IOCTL_CMD_READ_REG (SIOCDEVPRIVATE+2)
int main(int argc, char* argv[]){
int f;
uint64_t v;
uint64_t addr;
if(argc < 2){
printf("usage: rdaxi reg_addr(in hex)\n\n");
return 0;
}
else{
sscanf(argv[1], "%llx", &addr);
}
//----------------------------------------------------
//-- open nf10 file descriptor
//----------------------------------------------------
f = open("/dev/nf10", O_RDWR);
if(f < 0){
perror("/dev/nf10");
return 0;
}
printf("\n");
v = addr;
if(ioctl(f, NF10_IOCTL_CMD_READ_REG, &v) < 0){
perror("nf10 ioctl failed");
return 0;
}
// upper 32bits contain the address and are masked away here
// lower 32bits contain the data
v &= 0xffffffff;
printf("AXI reg 0x%llx=0x%llx\n", addr, v);
printf("\n");
close(f);
return 0;
}
После comilation и получить исполняемый файл, я просто сделать следующее, чтобы получить мой результат
./rdaxi 0x5a000008
AXI reg 0x5a000008 = 2
Я хочу сделать то же самое, используя Python.I пришел к знайте, что я должен использовать Ctypes. Затем я создал общую библиотеку (.so) для моего c-файла. Ниже приведен код python, который я написал. Я новичок в python, поэтому простите меня за мои ошибки. Я получаю ошибку сегментации. Как я могу решить эту проблему и прочитать реестры.
rdaxi.py
#!/usr/bin/env python
# For creating shared library
# gcc -c -Wall -fPIC rdaxi.c
# gcc -shared -o librdaxi.so rdaxi.o
import os
import sys
from ctypes import *
print "opening device descriptor"
nf = os.open("/dev/nf10", os.O_RDWR)
print "loading the .so file"
librdaxi=cdll.LoadLibrary('/root/Desktop/apps/librdaxi.so')
librdaxi.main(nf,0x5b000008)
Для получения более подробной информации о моем приложении. См. Ниже. reading registers in hw using python
благодаря
На самом деле я был в состоянии прочитать только с этим один параметр (адрес), а затем я вдруг начал получать сегментации по умолчанию. – user2349460
@ user2349460: Я обновил свой ответ на примере. –
ты потрясающий .. Большое спасибо. Он работает сейчас. – user2349460