env_setup.sh 和 --emu 和 setpci

207 阅读2分钟

env_setup.sh 主要用于解析命令行参数,并基于这些参数设置某些环境变量和执行一些操作。

以下是每一段的简要解释:

  1. ARGS=$(getopt -o '' --long noumc,emu -n "" -- "$@"): 使用getopt命令解析命令行参数。它查找长选项--noumc--emu。结果保存在ARGS变量中。

  2. if [ $? != 0 ]; then
        echo "Terminating..."
        exit 1
    fi
    

    如果getopt命令执行失败(返回非零值),则输出"Terminating..."并退出脚本。

  3. eval set -- "${ARGS}": 使用evalset命令来重新设置位置参数($1, $2,...)为getopt解析后的参数。

  4. while true
    do
    ...
    done
    

    一个while循环用于迭代处理每个参数。基于参数的类型,执行相应的操作或设置相应的环境变量。

    • --noumc:设置NOUMCtrue并输出提示。
    • --emu:设置环境变量IS_EMU为1并输出提示。
    • --:表示参数列表的结束,退出循环。
    • *:捕获任何未知的参数,并输出错误消息。
  5. if [[ $NOUMC == 'true' ]]; then
        cd -
        export NO_UMC=1
        python ./IPTest/sem/used_agp_addr.py
    fi
    

    如果NOUMC被设置为true,则更改当前目录到之前的目录(cd -),设置环境变量NO_UMC为1,并执行Python脚本used_agp_addr.py

  6. python $work/IPTest/nbio/pcie_atomic_config.py: 无论上面的条件是否满足,都会执行这个Python脚本。

总之,这个脚本的主要目的是基于命令行参数来设置某些环境变量,并执行相应的Python脚本。

为PCIe(Peripheral Component Interconnect Express)设备开启原子操作功能的Python脚本出错了:

首先,我们回顾一下报错信息:

unable to parse filter -s Invalid function number .\nTry 'setpci --help' for more information

这个错误是由于setpci命令在执行时无法解析传递的bus_id参数。这意味着传递给setpcibus_id参数值可能是无效的或格式不正确。

为了解决这个问题,首先,我们需要检查每次调用setpci命令时的bus_id参数的值。

在脚本中,bus_id的值是通过以下函数获得的:

  • FindPciDevice()
  • FindPciSwDn()
  • FindPciSwUp()
  • FindHostPort()

您应该确保这些函数返回有效的PCI设备ID。

以下是您可以采取的步骤:

  1. Debugging输出: 在调用每一个函数后立即打印它的返回值。这样,您可以查看是否所有函数都返回了有效的bus_id

    ep_busid = FindPciDevice()
    logger.debug(f"Endpoint bus ID: {ep_busid}")
    
    ds_busid = FindPciSwDn()
    logger.debug(f"Downstream bus ID: {ds_busid}")
    
    up_busid = FindPciSwUp()
    logger.debug(f"Upstream bus ID: {up_busid}")
    
    rc_busid = FindHostPort()
    logger.debug(f"Root Complex bus ID: {rc_busid}")
    
  2. 查看setpci命令: 您可以手动执行setpci命令,使用从上述函数返回的bus_id,以验证其有效性。例如:

    sudo setpci -s <bus_id> <address>.<type>
    
  3. 检查函数定义: 检查FindPciDevice(), FindPciSwDn(), FindPciSwUp(), 和 FindHostPort() 这些函数的实现(可能在其他模块或文件中),确保它们返回正确的PCI设备ID。

最后,请确保您在运行脚本时具有适当的权限,因为setpci命令需要root权限来执行。如果您在一个没有sudo权限的环境中运行,这可能会导致上述的错误。