nicsensor/docs/扩展脚本说明.md
leimingsheng 14c45a75ff feat(develop : nicsensor) update to 1.10 Base Dev 3
1. fix nicsensor语法问题
2. 修复错误输入时的help信息显示问题
3. 更新文档
4. fix setup 语法错误
5. update changelist
6. 修正pmbus set操作在进行i2c读写时的write byte
2026-04-21 17:44:32 +08:00

5.5 KiB
Raw Blame History

如何扩展脚本?

一、前言

Tip

脚本扩展一般涉及到两部分内容的扩充,包含对于支持服务器类型的扩充,或者对支持读取的传感器类型的扩充。

不论如何修改脚本,请在完成后主要修改后,修改 SCRIPT_VERSION 用于和主线脚本进行版本区分。

例如:

  • SCRIPT_VERSION="1.6.5 for project" 代表基于脚本1.6.5版本为某个项目做特殊定制

二、新增支持服务器

修改点1-Support_Server_List

# 可以在这里添加对应的服务器型号
Support_Server_List="5280m7, 5468m7, 5688m7, donghu, yichun, qiandaohu"

修改点2-添加服务器配置入口

# 修改函数 set_configuration
set_configuration(){
  # ... 省略部分代码
  case ${server_type} in
  	"5280m7")
  		set_configuration_5280m7
  		;;
  	# [开始修改]在这里针对要添加的服务器添加如下语句,将 {server_name} 替换为对应的服务器型号
  	# 这里修改的意义在于添加一个设置服务器I2C拓扑的入口后面会专门编写 set_configuration_{server_name} 函数
  	"{server_name}")
  		set_configuration_{server_name}
  		;;
  	# [结束修改]
  esac
  # ... 省略部分代码
}

修改点3-添加I2C拓扑适配函数

# 在脚本中找到函数 set_configuration_5280m7在这个函数上面新建一个函数名为
set_configuration_{server_name}(){
	# 可以模仿 5280m7 函数的写法,来编写本函数
	# 主体编写的内容就是针对卡的类型和槽位来配置通道上正确的I2C属性
	# 需要考虑的内容如下:
	# 1.是否支持OCP网卡
	# 2.I2C链路上是否存在PCA9641
	# 3.每个物理slot和I2C Bus的对应关系
	# 4.每个物理slot和I2C PCA9546/9548 channel的对应关系
	# 5.PCA9641和PCA9546/9548的slave地址
	
	# 提供一种模板
	# 首先判断网卡类型是否为 pcie (ocp形态同理)
	if [ ${nic_type} = "pcie" ];then
		# 根据 SLOT number 做针对性配置
		if [ ${slot_number} -eq 0 ];then
			i2c_bus=12
			is_have_pca9641=1
			pca9641_slave=0x41
			pca9548_slave=0x70
			pca9548_channel="0x01"
		elif [ ${slot_number} -eq 1 ]; then
			i2c_bus=12
			is_have_pca9641=1
			pca9641_slave=0x41
			pca9548_slave=0x70
			pca9548_channel="0x02"
		elif [ ${slot_number} -eq 2 ]; then
			i2c_bus=12
			is_have_pca9641=1
			pca9641_slave=0x41
			pca9548_slave=0x70
			pca9548_channel="0x04"
		else
			 format_print $WARNING "Unspecified card slot!"
		fi
	fi
}

修改点4-添加I2C扫描函数可选

# 类似 修改点2, 在 start_detect_device 函数中添加入口函数
# 形如 detect_on_{server_name}

# 随后新建一个对应的函数
detect_on_{server_name}(){
	# 首先给定对应 slot 的 i2c bus号码
	i2c_bus=12
	
	# 根据链路上是否存在9641来编写如果没有9641跳过这里
	pca9641_slave="0x31"
    get_pca9641_control
    
    # 调用 do_i2c_detect 函数来执行一次9548的通道切换并做一次i2cdetect
    # 参数表如下    i2cbus     9548_slave  9548_channel(hex) 9548_index  slot_number
    do_i2c_detect $i2c_bus    "0x70"        "0x01"              0			1
    do_i2c_detect $i2c_bus    "0x70"        "0x02"              1			2
    do_i2c_detect $i2c_bus    "0x70"        "0x04"              2			3
}

修改点5-服务器auto选择配置可选

Note

script v1.8 新增特性:

  • server_type 配置为 auto 后可以自行搜索boardid进行匹配服务器类型仅限通用服务器

可以针对已知的boardid对 try_get_server_type函数中做针对性修改。

三、新增支持传感器

修改点1-Support_Sensor_List

# 可以在这里添加对应的支持测试的传感器型号
Support_Sensor_List="emc1413, adc128, ina3221, ina226, tmp468, tmp112, lm95241"

修改点2-添加sensor执行入口

# 修改函数 start_get_sensor
start_get_sensor(){
    # ... 省略部分代码

    # get sensor detail value
    case $sensor_type in
        "emc1413")
            process_emc1413
            ;;
		# ... 省略部分代码
		# 添加新增的传感器入口, 其中 process_{new_sensor} 函数是后续sensor处理的入口
		"{new_sensor}")
			process_{new_sensor}
			;;
        "chip")
            process_chip
            ;;
        "fru")
            process_fru
            ;;
        "pmbus")
            process_pmbus
            ;;
        *)
            fmt_print "console" $ERROR "Unsupport Sensor Type !!! - $sensor_type"
            fmt_print "console" $INFO "Support list: $Support_Sensor_List"
            print_usage
            ;;
    esac
}

修改点3-添加sensor处理逻辑

这一部分可以参考其它的sensor处理逻辑进行开发。主要涵盖三部分内容

  • sensor是否需要初始化adc128通常第一次读取时需要初始化
  • 使用i2c命令读取sensor的指定寄存器值并记录下来
  • 编写解析函数,将读到的寄存器值作为参数传递到解析函数,进行可视化展示

四、新增插件

插件一般情况下需要做preprocess参考函数extension_preprocess,结合这里的功能开发插件即可。

插件执行分为两种情况:

  • 如果插件需要读取网卡的某些芯片的寄存器值,那么读取过程正常导入到 start_get_sensor流程中。
  • 插件不需要读取网卡I2C直接在 preprocess 中完成逻辑调用即可。