Go to file
ZimingYuan 1cf6f9b441 update README.md. 2021-09-04 14:28:31 +00:00
build add built files 2021-09-01 03:17:24 +00:00
fesvr modify syscall 2021-08-18 18:26:20 +08:00
scripts temporary undoing of renaming 2011-06-19 20:47:29 -07:00
.gitignore post-repo-split cleanup 2011-06-19 21:47:32 -07:00
COPYING temporary undoing of renaming 2011-06-19 20:47:29 -07:00
LICENSE add BSD license 2013-03-25 16:49:58 -07:00
Makefile.in Comply with GNU coding standards. 2017-01-06 10:30:53 -08:00
README.md update README.md. 2021-09-04 14:28:31 +00:00
aclocal.m4 Build and use shared libraries only 2014-01-24 01:03:54 -08:00
config.h.in autoreconf 4fc9ba3810 ("Add and install riscv-fesvr.pc") 2015-05-04 17:29:27 -07:00
configure autoreconf 4fc9ba3810 ("Add and install riscv-fesvr.pc") 2015-05-04 17:29:27 -07:00
configure.ac Add and install riscv-fesvr.pc 2015-05-04 17:25:46 -07:00
riscv-fesvr.pc.in Add and install riscv-fesvr.pc 2015-05-04 17:25:46 -07:00

README.md

RISC-V Frontend Server

About

This repository contains the front-end server library, which facilitates communication between a host machine and a RISC-V target machine. It is usually not meant to be used as a standalone package.

Build Steps

Execute the following commands to install the library, assuming you've declared the RISCV environment variable to point to the RISC-V install path:

$ mkdir build
$ cd build
$ ../configure --prefix=$RISCV
$ make install

以上是原版README。

修改内容

ioctl、mmap、munmap三个系统调用函数是原版的riscv-fesvr不支持的所以我们对riscv-fesvr的系统调用模块进行了修改。修改的代码集中在fesvr/syscall.cc共添加了4个函数

  • reg_t syscall_t::sys_ioctl(reg_t fd, reg_t request, reg_t data)参数和返回值的意义和Linux的ioctl一样但是由于要确定data指向的数据的大小所以支持的request值只能是VIDIOC_S_FMT、VIDIOC_REQBUFS、VIDIOC_QUERYBUF、VIDIOC_QBUF、VIDIOC_DQBUF、VIDIOC_STREAMON和VIDIOC_STREAMOFF中的一个。
  • reg_t syscall_t::sys_mmap(reg_t addr, reg_t length, reg_t prot, reg_t flags, reg_t fd, reg_t offset)参数的意义和Linux的mmap一样但是只实现了addr是NULL的情况。因为ARM端通过mmap映射的是ARM端的内存RISCV端无法访问。所以本函数将ARM端用mmap映射的所有映射地址用数组存起来返回值是数组索引PKE可以用索引作参数调用另一个函数readmmap读取ARM端被映射的内存。
  • reg_t syscall_t::sys_munmap(reg_t num, reg_t length)参数num的意义是之前调用mmap返回的索引本函数会将数组中对应索引储存的地址解映射。length是解映射的长度本函数要求这个长度和当时映射的长度相同否则解映射失败。返回值表示解映射是否成功小于零为失败。
  • reg_t syscall_t::sys_readmmap(reg_t num, reg_t offset, reg_t length, reg_t addr如前所述本函数用来读取ARM端被映射的内存。参数num的意义是之前调用mmap返回的索引offset是读取位置和之前调用mmap映射的区域相比的偏移量length为读取的长度addr是指向RISCV端内存的物理地址返回值表示读取是否成功小于零为失败。

在PYNQ-Z2开发板上使用

直接下载二进制文件

如果PYNQ-Z2上ARM端运行的系统是PYNQ官网获得的PYNQ v2.6启动镜像没有升级过glibc建议直接下载本仓库build文件夹下的两个文件libfesvr.so和riscv-fesvr。将libfesvr.so动态库放在开发板上的/usr/local/lib文件夹下riscv-fesvr程序放在开发板上的/home/xilinx~文件夹下。在开发板上运行pke

sudo riscv-fesvr riscv-pke 用户程序

编译

如果你使用的是其他操作系统或者升级过glibc又或者你喜欢编译可以自己编译这两个文件。因为本仓库实际编译出来的只有libfesvr.so这个库riscv-fesvr程序还需要其他的源代码所以具体的编译步骤是

  1. 下载安装vivado如果PYNQ-Z2上ARM端运行的系统是PYNQ官网获得的PYNQ v2.6启动镜像没有升级过glibc需要下载的vivado是2016.2版本的其他系统或标准库版本请自行尝试安装vivado时注意选对安装选项使得arm交叉编译器正确安装。

  2. 克隆并进入本仓库,执行下列命令:

    $ mkdir build
    $ cd build
    $ ../configure --host=arm-linux-gnueabihf
    $ make libfesvr.so
    
  3. 克隆并进入fpga-pynq仓库的usb-device-pynq分支如果仅需编译riscv-fesvr可以不递归克隆。执行

    mkdir -p common/build
    

    然后把刚才编译得到的libfesvr.so在仓库的build文件夹放入common文件夹build子文件夹中。进入pynq-z2文件夹运行

    make riscv-fesvr
    
  4. 编译结束后在common文件夹build子文件夹中找到libfesvr.so和riscv-fesvr。将libfesvr.so动态库放在开发板上的/usr/local/lib文件夹下riscv-fesvr程序放在开发板上的/home/xilinx~文件夹下。在开发板上运行pke

    sudo riscv-fesvr riscv-pke 用户程序