• P4 前端编译器p4c-bm、后端编译器bmv2命令安装 make error问题


    参考:Github

    安装p4c-bm:

    sudo pip install -r requirements.txt
    
    sudo pip install -r requirements_v1_1.txt //if you are interested in compiling P4 v1.1 programs
    
    sudo python setup.py install
    

    测试:

    p4c-bmv2 -h
    

    弹出相关信息:

    usage: p4c-bmv2 [-h] [--json JSON] [--pd PD] [--pd-from-json]
                    [--p4-prefix P4_PREFIX] [--field-aliases FIELD_ALIASES]
                    [--p4-v1.1] [--version] [--primitives PRIMITIVES]
                    [--plugin PLUGIN_LIST]
                    [--openflow-mapping-dir OPENFLOW_MAPPING_DIR]
                    [--openflow-mapping-mod OPENFLOW_MAPPING_MOD] [--keep-pragmas]
                    source
    
    p4c-bm arguments
    
    positional arguments:
      source                A source file to include in the P4 program.
    
    optional arguments:
      -h, --help            show this help message and exit
      --json JSON           Dump the JSON representation to this file.
      --pd PD               Generate PD C/C++ code for this P4 program in this
                            directory. Directory must exist.
      --pd-from-json        Generate PD from a JSON file, not a P4 file
      --p4-prefix P4_PREFIX
                            P4 name use for API function prefix
      --field-aliases FIELD_ALIASES
                            Path to file containing field aliases. In this file,
                            each line contains a mapping with this format:
                            "<alias> <full name of field>"
      --p4-v1.1             Run the compiler on a p4 v1.1 program
      --version, -v         show program's version number and exit
      --primitives PRIMITIVES
                            A JSON file which contains additional primitive
                            declarations
      --plugin PLUGIN_LIST  list of plugins to generate templates
      --openflow-mapping-dir OPENFLOW_MAPPING_DIR
                            Directory of openflow mapping files
      --openflow-mapping-mod OPENFLOW_MAPPING_MOD
                            Openflow mapping module name -- not a file name
      --keep-pragmas        Propagate pragmas to JSON file when applicable
    

    安装bmv2:

    要求:

    On Ubuntu 14.04, the following packages are required:
    
        automake
        cmake
        libjudy-dev
        libgmp-dev
        libpcap-dev
        libboost-dev
        libboost-test-dev
        libboost-program-options-dev
        libboost-system-dev
        libboost-filesystem-dev
        libboost-thread-dev
        libevent-dev
        libtool
        flex
        bison
        pkg-config
        g++
        libssl-dev
    

    以及Github中的一些工具,如thrift等,说的很详细了。

    下载bmv2:

    git clone https://github.com/p4lang/behavioral-model.git bmv2
    

    安装依赖:

    sh install_deps.sh
    

    测试:

    1. ./autogen.sh
    2. ./configure
    3. make
    4. [sudo] make install  # if you need to install bmv2
    

    make成功是这样子的:

    Making all in tests
    make[5]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests'
    Making all in .
    make[6]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests'
    make[6]: Nothing to be done for `all-am'.
    make[6]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests'
    Making all in CLI_tests
    make[6]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests/CLI_tests'
    make[6]: Nothing to be done for `all'.
    make[6]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests/CLI_tests'
    make[5]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests'
    make[4]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch'
    make[3]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch'
    make[3]: Entering directory `/home/wasdns/bmv2/targets'
    make[3]: Nothing to be done for `all-am'.
    make[3]: Leaving directory `/home/wasdns/bmv2/targets'
    make[2]: Leaving directory `/home/wasdns/bmv2/targets'
    Making all in tools
    make[2]: Entering directory `/home/wasdns/bmv2/tools'
    rm -f bm_p4dbg bm_p4dbg.tmp
    sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_p4dbg.in >bm_p4dbg.tmp
    chmod +x bm_p4dbg.tmp
    chmod a-w bm_p4dbg.tmp
    mv bm_p4dbg.tmp bm_p4dbg
    rm -f bm_CLI bm_CLI.tmp
    sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_CLI.in >bm_CLI.tmp
    chmod +x bm_CLI.tmp
    chmod a-w bm_CLI.tmp
    mv bm_CLI.tmp bm_CLI
    rm -f bm_nanomsg_events bm_nanomsg_events.tmp
    sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_nanomsg_events.in >bm_nanomsg_events.tmp
    chmod +x bm_nanomsg_events.tmp
    chmod a-w bm_nanomsg_events.tmp
    mv bm_nanomsg_events.tmp bm_nanomsg_events
    make[2]: Leaving directory `/home/wasdns/bmv2/tools'
    make[2]: Entering directory `/home/wasdns/bmv2'
    make[2]: Leaving directory `/home/wasdns/bmv2'
    make[1]: Leaving directory `/home/wasdns/bmv2'
    

    当make不成功的时候,一般是报.lo的错误,比如:

    g++: internal compiler error: Killed (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
    make[3]: *** [packet.lo] Error 1
    make[3]: Leaving directory `/home/wasdns/behavioral-model/src/bm_sim'
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/home/wasdns/behavioral-model/src'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/wasdns/behavioral-model'
    make: *** [all] Error 2
    

    我的解决方法是,执行:

    ./configure 'CXXFLAGS=-O0 -g'
    

    进入debug模式,github是这样描述的:

    In 'debug mode', you probably want to disable compiler optimization and enable symbols in the binary

    之后,跑样例:

    make check
    

    注意,如果出现有关nanomsg的问题,需要在命令前加上sudo。

    我的结果:

    make  check-TESTS
    make[3]: Entering directory `/home/wasdns/bmv2/tests'
    make[4]: Entering directory `/home/wasdns/bmv2/tests'
    PASS: test_actions
    PASS: test_checksums
    PASS: test_expressions
    PASS: test_conditionals
    PASS: test_data
    PASS: test_handle_mgr
    PASS: test_p4objects
    PASS: test_parser
    PASS: test_phv
    PASS: test_queue
    PASS: test_queueing
    PASS: test_tables
    PASS: test_learning
    PASS: test_pre
    PASS: test_calculations
    PASS: test_header_stacks
    PASS: test_meters
    PASS: test_ageing
    PASS: test_counters
    PASS: test_pcap
    PASS: test_fields
    PASS: test_devmgr
    PASS: test_packet
    PASS: test_extern
    ../test-driver: line 107: 56596 Aborted                 (core dumped) "$@" > $log_file 2>&1
    FAIL: test_switch
    PASS: test_target_parser
    PASS: test_runtime_iface
    PASS: test_bm_apps
    PASS: test_stateful
    make[5]: Entering directory `/home/wasdns/bmv2/tests'
    Making all in .
    make[6]: Entering directory `/home/wasdns/bmv2/tests'
    make[6]: Nothing to be done for `all-am'.
    make[6]: Leaving directory `/home/wasdns/bmv2/tests'
    make[5]: Leaving directory `/home/wasdns/bmv2/tests'
    ============================================================================
    Testsuite summary for bm 1.4.0-84ed92dd
    ============================================================================
    # TOTAL: 29
    # PASS:  28
    # SKIP:  0
    # XFAIL: 0
    # FAIL:  1
    # XPASS: 0
    # ERROR: 0
    ============================================================================
    See tests/test-suite.log
    Please report to antonin@barefootnetworks.com
    ============================================================================
    make[4]: *** [test-suite.log] Error 1
    make[4]: Leaving directory `/home/wasdns/bmv2/tests'
    make[3]: *** [check-TESTS] Error 2
    make[3]: Leaving directory `/home/wasdns/bmv2/tests'
    make[2]: *** [check-am] Error 2
    make[2]: Leaving directory `/home/wasdns/bmv2/tests'
    make[1]: *** [check-recursive] Error 1
    make[1]: Leaving directory `/home/wasdns/bmv2/tests'
    make: *** [check-recursive] Error 1
    

    还是出现了一个Error,查看日志信息:

    cd tests
    
    vim test-suite.log
    

    日志如下:

    =============================================
       bm 1.4.0-84ed92dd: tests/test-suite.log
    =============================================
    
    # TOTAL: 29
    # PASS:  28
    # SKIP:  0
    # XFAIL: 0
    # FAIL:  1
    # XPASS: 0
    # ERROR: 0
    
    .. contents:: :depth: 2
    
    FAIL: test_switch
    =================
    
    [==========] Running 9 tests from 1 test case.
    [----------] Global test environment set-up.
    [----------] 9 tests from Switch
    [ RUN      ] Switch.GetConfig
    [       OK ] Switch.GetConfig (13 ms)
    [ RUN      ] Switch.ConfigOptions
    [       OK ] Switch.ConfigOptions (3 ms)
    [ RUN      ] Switch.GetP4Objects
    [       OK ] Switch.GetP4Objects (14 ms)
    [ RUN      ] Switch.SerializeState1
    [       OK ] Switch.SerializeState1 (7 ms)
    [ RUN      ] Switch.SerializeState2
    Traceback (most recent call last):
      File "../tools/runtime_CLI.py", line 30, in <module>
        import bmpy_utils as utils
      File "/home/wasdns/bmv2/tools/bmpy_utils.py", line 26, in <module>
        from thrift import Thrift
    ImportError: No module named thrift
    lt-test_switch: utils.cpp:55: CLIWrapperImp::~CLIWrapperImp(): Assertion `pclose(CLI_f) == 0' failed.
    Thrift server was started
    

    应该是thrift的问题,该问题还在解决中。

    2016/12/17

  • 相关阅读:
    使用Beetle实现http代理服务
    Socket Tcp服务吞吐测试工具
    实现高性能稳定的socket tcp通讯经验分享
    Silverlight自定义按钮模板
    值得研究的 工作流 开源项目
    值得研究的 开源数据库
    值得研究的 创建PDF 组件
    值得研究的 开源图形引擎
    通用的NTier模型合理么?
    值得研究的 RSS阅读器
  • 原文地址:https://www.cnblogs.com/qq952693358/p/6193543.html
Copyright © 2020-2023  润新知