`

Eclipse 导入NetFPGA JAVA GUI代码 _ Windows Centos

阅读更多
最近老板的东西,要将斯坦福大学开发的NetFPGA版中的Java的GUI界面重新写一遍,为了进行代码的阅读和运行,需要在IDE工具下来进行二次开发,里面的Java的代码量虽然不大,不过也涉及到了或多或少的综合方面的知识,将源代码导入进去,是不可能直接运行成功的,因为斯坦福大学做的时候,是将上层界面和底层数据的获取编在了一起,有很大的耦合性。

刚刚做了几天的代码阅读,代码量没有之前想象的那么大,将目前阅读过的代码的层次结构进行列举如下:
四个文件包:
org.netfpga.backend
org.netfpga.graphics
org.netfpga.mdi
org.netfpga.router


其中比较重要的是backend(底层寄存器操作)和router(上层显示界面)两个文件包,将自己读过的比较重要文件的主要功能列举如下:

org.netfpga.backend.NFDeviceJava对NF的抽象对象,对底层操作的最底层的封装
org.netfpga.backend.NFRegAccess一个接口,用来将动态文件加载成功并强制转换成该对象类型
org.netfpga.backend.Register对底层寄存器的对象封装
org.netfpga.backend.RegTableModel对AbstractTableModel的一种重写,这个类是其他上层界面进行界面显示的两个重要的model之一
org.netfpga.backend.WideRegTableModel对AbstractTableModel的一种重写,这个类是其他上层界面进行界面显示的两个重要的model之一
org.netfpga.router.AbstractMainFrameJavaGUI启动的主要入口的一个抽象对象,也就是说启动的时候,从该抽象对象的自对象作为入口
org.netfpga.router.RouterMainFrameAbstractMainFrame的唯一实现,是程序的唯一入口
org.netfpga.router.AbstractRouterQuickstartFrame作为二层frame来进行的一个主要入口,也是项目中代码量最大的一个单文件,这也是斯坦福大学NetFPGA中的Java的GUI界面开发采用的思路,使用了JInternalFrame这样的frame来进行二层frame的开发,具体的信息查看jdk的文档
org.netfpga.router.RouterQuickstartFrameAbstractRouterQuickstartFrame的唯一实现
org.netfpga.router.ARPTableModel界面部分的重要组成之一,进行model中相应的模块的定义,事件的响应
org.netfpga.router.InterfacePortConfigTableModel界面部分的重要组成之一,进行model中相应的模块的定义,事件的响应
org.netfpga.router.RoutingTableModel界面部分的重要组成之一,进行model中相应的模块的定义,事件的响应
org.netfpga.router.StatsRegTableModel界面部分的重要组成之一,进行model中相应的模块的定义,事件的响应



在CentOS下,当加载了相应的bit文件到NetFPGA板上,并且配置了各个nf2c的四个端口,运行./router.sh,Java的GUI界面便可以正常启动,但这是有如下两个条件才成功的:
  • 正常加载了libnf2.so文件,这是java用jna库来加载c生成的动态文件
  • 加载了相应的bit文件到NetFPGA板上,并且配置了各个nf2c的四个端口

那么如果将java的GUI界面导入Eclipse(个人认为,Java编写的首选IDE工具)之后,运行org.netfpga.router.RouterMainFrame.java,会出现无法加载“nf2”的错误,这是因为加载动态连接 库出现了问题导致的。进过代码底层的阅读,我将自己的解决方法列举如下,达到了在Windows的Eclipse下,正常启动了Java的GUI界面,不过这只是正常启动上层GUI界面,我之后要做的是,用Java的Socket编程进行远端连接Host,然后进行配置、显示并可以对一台Host上1台或者2台NetFPGA的板卡进行相应数据的配置、显示等,这包括Router、Ip、Mac、ARP等信息。

  • 将所需要的jar文件导入到自己的工程下,并将Java代码导入到工程中
  • 将需要用到底层访问寄存器的org.netfpga.backend.NFRegAccess.java中的“NFRegAccess INSTANCE = (NFRegAccess)Native.loadLibrary("nf2", NFRegAccess.class);”代码注释掉。
  • 修改org.netfpga.backend.NFDevice.java代码,修改内容如下,修改的主要内容是将所有用到了底层访问寄存器的操作全部注释掉,替换成简单的操作,使得可以运行成功

package org.netfpga.backend;

//import com.sun.jna.ptr.IntByReference;

public class NFDevice {

    public static final int WRITE_ACCESS = 0;
    public static final int READ_ACCESS = 1;

    private NFRegAccess.NF2 nf2 = new NFRegAccess.NF2 ();

    public NFDevice(){};

    public NFDevice(String ifaceName) {
        this.nf2.device_name = ifaceName;
        this.nf2.fd = 0;
        this.nf2.net_iface = 0;
    }

    public NFDevice(String ifaceName, int fileDescriptor, int netIface) {
        this.nf2.device_name = ifaceName;
        this.nf2.fd = fileDescriptor;
        this.nf2.net_iface = netIface;
    }

    /**
     * Read the register at the specified address
     * @param addr
     * @return the value at the address
     */
    public int readReg(long addr) {// modified by yuanbo 2011-03-16
    	/* create pointer to int */
//    	IntByReference val = new IntByReference();
//    	NFRegAccess.INSTANCE.readReg(nf2, (int)addr, val);
//    	return val.getValue();
    	
    	return 1;
    }

    /**
     * Write value to the specified address
     * @param addr the location to write
     * @param value the value to write
     */
    public void writeReg(long addr, int val) {// modified by yuanbo 2011-03-16
//    	NFRegAccess.INSTANCE.writeReg(nf2, (int)addr, val);
    }

    /**
     * Perform all operations in the array in one go
     * @param addr the locations to read/write
     * @param value the values to read/write
     * @param access_types for each location, a 1 is a read, a 0 is a write
     * @param num_accesses the number of addresses in the array to read/write
     * @return
     */
    public void accessRegArray(long []addr, int []value, int[] access_types, int num_accesses) {// modified by yuanbo 2011-03-16
//        int i;
//
//        /* perform the accesses */
//        for(i=0; i<num_accesses; i=i+1) {
//            if(access_types[i]==WRITE_ACCESS) {
//            	writeReg(addr[i], value[i]);
//            } else if (access_types[i]==READ_ACCESS) {
//                value[i] = readReg(addr[i]);;
//            }
//        }
    }

    /**
     * check if the interface exists
     * @return 1 on error
     */
    public int checkIface() {// modified by yuanbo 2011-03-16
//    	return NFRegAccess.INSTANCE.check_iface(nf2);
    	
    	return 0;
    }

    /**
     * Opens the interface for access
     * @return non-zero on error
     */
    public int openDescriptor() {// modified by yuanbo 2011-03-16
//    	return NFRegAccess.INSTANCE.openDescriptor(nf2);
    	return 0;
    }

    /**
     * Closes the file descriptor
     * @return non-zero on error
     */
    public int closeDescriptor() {// modified by yuanbo 2011-03-16
//    	return NFRegAccess.INSTANCE.closeDescriptor(nf2);
    	
    	return 0;
    }

	public String getIfaceName() {// modified by yuanbo 2011-03-16
//		return nf2.device_name;
		return "test in NFDevice";
	}

	public void setIfaceName(String devName) {
//		nf2.device_name = devName;
	}
}



到此,你便可以正常启动org.netfpga.router.RouterMainFrame.java来启动Java的GUI界面了,进行二次开发便容易一些,不过要使用这些已经存在的代码来进行自己的开发不是几天能搞定的,他的代码耦合性比较大,没有考虑过二次开发的问题我觉得,要将界面和底层的寄存器访问操作分离,并加入网络编程进行远程操作,而且处理一台主机多台NetFPGA板卡的情况。之后的操作会在博客中继续更新。
0
4
分享到:
评论

相关推荐

    仿真和netfpga代码___下载.zip

    【标题解析】: "仿真和netfpga代码___下载.zip" 这个标题提到了两个重要的关键词——"仿真"和"netfpga代码"。"仿真"通常指的是在真实硬件实施之前,通过软件模拟硬件行为的过程,它在电子设计自动化(EDA)领域中...

    NetFPGA_公共_存储_ NetFPGA-公共_NetFPGA_public_

    NetFPGA_公共_存储_ NetFPGA-公共_NetFPGA_public_repository_NetFPGA-publicrepository_NetFPGA-public.zip

    netfpga_full_3_0_0.tar.gz_netfpga_stanford netfpga_交换_交换机_路由器

    斯坦福大学的netfpga最新源代码开发包,用于开发网络路由器交换机等

    20100629001.rar_BUFGMUX_netfpga_netfpga add_hdr.v_路由_路由转发

    基于NetFPGA,实现路由转发的工程。在此工程中,可以修改路由表,实现多功能的路由功能。

    netfpga.zip_netfpga_qt netfpga

    标题中的“netfpga.zip_netfpga_qt netfpga”暗示了这是一个关于NetFPGA项目,且可能使用Qt框架开发的程序。NetFPGA(Network Field-Programmable Gate Array)是一个开源平台,用于教育、研究和开发网络硬件。这里...

    DE4_NetFPGA_Packet_Generator_User_Guide

    ### DE4 NetFPGA Packet Generator User Guide:关键知识点解析 #### 一、引言与概述 DE4 NetFPGA Packet Generator是一款开源项目,它在Altera DE4开发板上实现了NetFPGA包生成器的功能。这份用户指南详述了如何...

    netFPGA 参考设计的源码

    这个压缩包包含的“netFPGA多种参考设计的源代码”是Verilog语言实现的,这对于理解和学习FPGA(Field-Programmable Gate Array)设计,尤其是网络相关的应用,具有极高的价值。 Verilog是一种硬件描述语言,广泛...

    netfpga.rar_netfpga

    另一个文件“netfpga”,根据命名习惯,很可能是实际的执行文件或源代码,用户可以运行或编译这个程序来与NetFPGA硬件交互。 在深入使用这个寄存器检测程序之前,用户需要具备以下基础知识: 1. 嵌入式系统知识:...

    netfpga-repo-1-1_CentOS5.noarch

    netfpga-repo-1-1_CentOS5.noarch

    netfpga.zip_NETFPGA-1G-CML _fpga_fpga 路由_net-FPGA_路由的FPGA实现

    至于压缩包内的“netfpga”文件,这可能是项目的所有源代码、文档、配置文件等资源的集合。用户可能需要解压该文件,然后按照提供的指南编译和配置FPGA固件,以及安装和运行Linux系统,以便在NETFPGA平台上实现...

    NetFPGA-Sume_sch.pdf

    《NetFPGA-Sume_sch.pdf》是基于Xilinx的Virtex-7 XC7V690T FPGA的接口原理图,详细描述了该FPGA与其他组件的连接方式和信号传输路径。以下是对这份文档中关键知识点的解析: 1. **Xilinx Virtex-7 XC7V690T FPGA**...

    NetFPGA_cam_router

    NetFPGA是一个开源项目,旨在为网络研究和教育提供低成本、高性能的平台。"cam_router"是NetFPGA上的一个重要组件,它是一个基于内容寻址存储(CAM,Content-Addressable Memory)的路由器。在本篇文章中,我们将...

    netfpga 源代码,路由器系统方案

    《NetFPGA源代码与路由器系统方案解析》 NetFPGA是一个开源项目,它提供了用于网络设备开发的硬件平台和相应的软件支持。这个项目的主要目标是为教育、研究和创新提供一个低成本、易于访问的环境,使用户能够设计、...

    netfpga_ful系统完整版文件

    首先,"netfpga_ful系统完整版文件"是针对NETFPGA开发平台设计的一套完整的系统文件集合。这套文件包含了所有必要的软件、固件和配置文件,旨在确保用户在开发过程中可以顺利进行,避免因文件缺失而导致的任何问题。...

    NetFPGANetFPGANetFPGA

    软件方面,你需要安装Linux CentOS操作系统,以及相关的NetFPGA基础包、Java GUI和设计与仿真软件。 此外,NetFPGA的发展历程包括Alpha和Beta测试阶段,Alpha Program在2007年12月15日结束,所有后续开发工作都支持...

    NetFPGA开发指南1.0

    - **示例**:`NETFPGA_HOME`指向NetFPGA的安装目录;`PATH`添加相关工具的路径。 ##### 6. NetFPGA简单开发实例教程 - **项目创建**:在ISE中创建一个新的Project,并导入必要的源文件和约束文件。 - **模块化设计...

    netfpga入门帮助

    NetFPGA作为一个开放源代码的网络开发平台,不仅为教育领域提供了学习和实践的机会,也为科研人员和技术开发者提供了一个强大的工具。通过掌握NetFPGA的基本原理和使用方法,用户可以轻松地构建高性能的网络设备,并...

    Xilinx在中国的NetFPGA讲座

    “NetFPGA_Day_2.pptx”和“NetFPGA_Openflow.pptx”则重点讨论了Openflow协议在NetFPGA中的应用。Openflow是一种开放的网络协议,允许网络管理员在不改变硬件的情况下,对网络设备进行远程控制和编程。在NetFPGA中...

    netfpga switch

    在本案例中,我们关注的是基于NetFPGA实现的交换机项目,它提供了用于学习和实验的源代码。 交换机是网络通信中的核心设备,负责在多个设备之间转发数据包。基于NetFPGA的交换机设计涉及了以下几个关键知识点: 1....

    NetFPGA培训资料(续)

    - **C**、**java**、**Makefiles**、**Perl5**、**python**、**scripts** 和 **verilog**:这些子目录包含了不同类型的软件和支持代码。 - **projects**:具体项目的目录。 - **doc**:项目文档。 - **include**...

Global site tag (gtag.js) - Google Analytics