1

PCI CSR バーへの mmap を実行しようとしています。mmap がエラー EINVAL で失敗します。以下は私のコードスニペットです。

snprintf(csr_bar_path,256,"/sys/bus/pci/devices/0000:16:00.0/resource2");
csr_fd = open(csr_bar_path,O_RDWR | O_SYNC);
if(csr_fd < 0)
{
    printf("Cannot open CSR bar file %s\n",csr_bar_path);
}
if(fstat(csr_fd,&sb) == -1)
{
    printf("CSR file size = %d\n",sb.st_size);
    close(csr_fd);
}
printf("CSR file size OK = %d\n",sb.st_size);
csr_bar = (unsigned char *)mmap(NULL,sb.st_size,PROT_READ | 
                                  PROT_WRITE,MAP_SHARED,csr_fd,0);
if(csr_bar == (void *) -1)
{
    printf("mmap failed for CSR bar %s %d\n",strerror(errno),errno);
    close(csr_fd);
}

sb.st_size で得られた値は 65536 です。ただし、mmap はエラー文字列「無効な引数」で失敗しました。同じコード スニペットは RHEL 7.2 では正常に動作しますが、SLES15 オペレーティング システムでは失敗します。

4

0 に答える 0