From 14c45a75ff4cb51326e5f05382aa335d9c984622 Mon Sep 17 00:00:00 2001 From: leimingsheng Date: Tue, 21 Apr 2026 17:44:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(develop=20:=20nicsensor)=20update=20to=201?= =?UTF-8?q?.10=20Base=20Dev=203=201.=20fix=20nicsensor=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98=202.=20=E4=BF=AE=E5=A4=8D=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=97=B6=E7=9A=84help=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98=203.=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=96=87=E6=A1=A3=204.=20fix=20setup=20=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=94=99=E8=AF=AF=205.=20update=20changelist=206.=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3pmbus=20set=E6=93=8D=E4=BD=9C=E5=9C=A8=E8=BF=9B?= =?UTF-8?q?=E8=A1=8Ci2c=E8=AF=BB=E5=86=99=E6=97=B6=E7=9A=84write=20byte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/扩展脚本说明.md | 61 ++++++++++++++++++++++++++++++++++++++ nicsensor.sh | 20 +++++++++++-- readme.md | 51 ++++++++++++++++++++++++------- 3 files changed, 119 insertions(+), 13 deletions(-) diff --git a/docs/扩展脚本说明.md b/docs/扩展脚本说明.md index cb5ea5c..72c4172 100644 --- a/docs/扩展脚本说明.md +++ b/docs/扩展脚本说明.md @@ -117,3 +117,64 @@ detect_on_{server_name}(){ > - server_type 配置为 auto 后可以自行搜索boardid进行匹配服务器类型(仅限通用服务器) 可以针对已知的boardid对 `try_get_server_type`函数中做针对性修改。 + +## 三、新增支持传感器 + +### 修改点1-Support_Sensor_List + +``````shell +# 可以在这里添加对应的支持测试的传感器型号 +Support_Sensor_List="emc1413, adc128, ina3221, ina226, tmp468, tmp112, lm95241" +`````` + +### 修改点2-添加sensor执行入口 + +``````shell +# 修改函数 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 中完成逻辑调用即可。 diff --git a/nicsensor.sh b/nicsensor.sh index ecaff78..ccbb4b4 100755 --- a/nicsensor.sh +++ b/nicsensor.sh @@ -1,6 +1,6 @@ #!/bin/sh set -eo pipefail -SCRIPT_VERSION="1.10 Base Dev 2" +SCRIPT_VERSION="1.10 Base Dev 3" # Load project config file PROJECT_VARIBLE_CONFIG="/extlog/nicsensor/project.config" @@ -75,7 +75,7 @@ LM95241_Remote2_name="${LM95241_Remote2_name:-Remote2}" # --------------------------------------------------------- Support_Sensor_List="emc1413, adc128, ina3221, ina226, tmp468, tmp112, lm95241" Support_Server_List="5280m7, 5468m7, 5688m7, donghu, yichun, qiandaohu" -Support_Property_List="debug|n_detect|server|fru_size|fru_offset|i2cbus" +Support_Property_List="debug|n_detect|server|fru_size|fru_offset|i2cbus|fix_temperature" # Which server will use this script server_type="auto" @@ -159,6 +159,7 @@ ina3221_ch1_current="0" ina3221_ch2_current="0" fru_file_name=$option_data2 fru_write_size=0 +fix_temperature=0 fru_write_data="" nic_type="" slot_number="" @@ -402,9 +403,14 @@ get_set_properties(){ elif [ "$Param2" = "i2cbus" ];then target_file="${CONFIG_DIR}ns_i2cbus" default_data=$i2c_bus + elif [ "$Param2" = "fix_temperature" ];then + # Useless property for now + target_file="${CONFIG_DIR}ns_fixtemperature" + default_data=$fix_temperature else fmt_print "console" $ERROR "Invalid Property : $Param2" fmt_print "console" $INFO "Support Property List : $Support_Property_List" + print_usage 5 exit 1 fi @@ -447,6 +453,10 @@ load_properties_from_cache(){ if [ -e "${CONFIG_DIR}ns_i2cbus" ];then i2c_bus=`cat ${CONFIG_DIR}ns_i2cbus` fi + + if [ -e "${CONFIG_DIR}ns_fixtemperature" ];then + fix_temperature=`cat ${CONFIG_DIR}ns_fixtemperature` + fi } # According to boardid, parse server_type @@ -638,6 +648,7 @@ pre_exec_hook(){ if [ $param_num -le 3 ];then fmt_print "console" $ERROR "Command Format illegal" echo "Command Format : ./nicsensor.sh [slot] chip [slave] [i2c_command]" + print_usage 3 exit 1 fi fi @@ -651,6 +662,7 @@ pre_exec_hook(){ if [ "$option_data2" = "" ];then fmt_print "console" $ERROR "Please provide fru file name" echo "Command Format : ./nicsensor.sh [slot] fru [slave] write [fru_file]" + print_usage 4 exit 1 fi @@ -1527,6 +1539,7 @@ transfer_pmbus_command(){ reset_pca9548 $i2c_bus $pca9548_slave fmt_print "console" $INFO "$option_data ,Command Code:$2, Setting Data:${option_data2}" fmt_print "log" $INFO "[PMBUS] Set Command : $exec_cmd" + fi } # Do pmbus test if plugin avalible @@ -1597,7 +1610,7 @@ start_get_sensor(){ *) fmt_print "console" $ERROR "Unsupport Sensor Type !!! - $sensor_type" fmt_print "console" $INFO "Support list: $Support_Sensor_List" - print_usage + print_usage 1 ;; esac } @@ -1772,6 +1785,7 @@ start_detect_device(){ *) fmt_print "console" $ERROR "Unsupport Server Type - $server_type" fmt_print "console" $INFO "Support list : $Support_Server_List" + print_usage 2 ;; esac } diff --git a/readme.md b/readme.md index cb84144..1e85f71 100644 --- a/readme.md +++ b/readme.md @@ -5,6 +5,23 @@ ## 快速使用 +### 脚本部署 + +> [!Important] +> +> 1.11 版本的nicsensor支持了 `setup.sh` 脚本。 + +操作步骤: + +1. 将整个压缩包nicsensor-{version}.zip在本地解压 +2. 如果针对板卡硬件参数需要修改,对应修改 `project.config` 文件(无需修改`nicsensor.sh`本体) +3. 使用scp命令将代码包传递到服务器BMC上:`scp -r nicsensor/ sysadmin@{bmc ip}:/tmp/` +4. ssh登录进入服务器BMC,后执行 `/tmp/nicsensor/setup.sh` 即可完成工具初始化 + +完成上述工作后即可正常使用该工具,脚本默认目录:`/extlog/nicsensor/nicsensor.sh` + +### 脚本命令 + 工具Usage :`./nicsensor.sh help` 工具版本查询 :`./nicsensor.sh version` @@ -22,7 +39,7 @@ - [2.3 命令透传](#2_3_命令透传) - [2.4 服务器网卡通道I2C信息扫描](#2_4_服务器网卡通道I2C信息扫描) - [2.5 调试模式](#2_5_调试模式) - - [2.6 扩展功能](#2_6_扩展功能) + - [2.6 扩展功能(已停用)](#2_6_扩展功能) - [2.7 参数配置](#2_7_参数配置) - [2.8 PMBUS功能测试](#2_8_pmbus功能) - [2.9 压力测试stress](#2_9_压力测试stress) @@ -30,6 +47,7 @@ - [3.1 ADC128传感器读值为0](#3_1_adc128传感器读值为0) - [3.2 脚本执行时出现大批量语法错误](#3_2_脚本执行时出现大批量语法错误) - [3.3 传感器读值不正确](#3_3_传感器读值不正确) + - [3.4 插件升级](#3_4_插件升级) - [4.附属工具](#4_附属工具) - [4.1 FruParse](#4_1_fruparse) - [4.2 nicsensor\_s(已停用)](#4_2_nicsensor_s) @@ -67,7 +85,11 @@ nicsensor工具是在带有i2ctool工具(i2ctransfer、i2cdetect)的BMC下用于 ## 2_使用方法 > [!warning] -> 在使用时针对网卡的硬件特性需要定制化修改脚本的 `Project Varible` ,变量的对应关系及说明见[Project变量说明](#6_1_project变量说明) +> ~~在使用时针对网卡的硬件特性需要定制化修改脚本的 Project Varible~~ , +> +> V1.11之后的脚本:修改 project.config即可,无需修改脚本本体 +> +> 变量的对应关系及说明见[Project变量说明](#6_1_project变量说明) ### 2_1_传感器读取 @@ -192,11 +214,11 @@ nicsensor工具是在带有i2ctool工具(i2ctransfer、i2cdetect)的BMC下用于 ### 2_6_扩展功能 -脚本中预留了函数 `handle_reserve` 用于扩展功能。针对有特殊需求的项目可能会使用。 - -在 `handle_reserve` 中可以自定义需要对网卡实现的功能。在调用该函数之前脚本会将 PCA9641及PCA9548选通。扩展功能时无需考虑PCA9641和PCA9548的状态。 +该功能已在v1.11之后脚本舍弃 ,如果需要对脚本进行功能性的自定义修改,参照文档[扩展说明](docs/扩展脚本说明.md) +~~脚本中预留了函数 `handle_reserve` 用于扩展功能。针对有特殊需求的项目可能会使用。~~ +~~在 `handle_reserve` 中可以自定义需要对网卡实现的功能。在调用该函数之前脚本会将 PCA9641及PCA9548选通。扩展功能时无需考虑PCA9641和PCA9548的状态。~~ ### 2_7_参数配置 @@ -229,10 +251,13 @@ nicsensor工具是在带有i2ctool工具(i2ctransfer、i2cdetect)的BMC下用于 > [!warning] > 支持的脚本版本:v1.9及以上 -> PMBUS功能属于额外的功能,需要将 [pmbus_cmd_list.sh](./pmbus_cmd_list.sh) 拷贝到和nicsensor脚本相同的目录。 -> 如果不添加该脚本, 该功能无法正常使用 +> ~~PMBUS功能属于额外的功能,需要将 [pmbus_cmd_list.sh](./pmbus_cmd_list.sh) 拷贝到和nicsensor脚本相同的目录。~~ +> ~~如果不添加该脚本, 该功能无法正常使用~~ +> +> v1.11版本执行setup.sh会自动将`pmbus_cmd_list.sh`拷贝到正确的位置,无需手动拷贝 **命令格式** + ``` shell ./nicsensor.sh pmbus ``` @@ -255,9 +280,11 @@ nicsensor工具是在带有i2ctool工具(i2ctransfer、i2cdetect)的BMC下用于 > > 支持的脚本版本:v1.10及以上 > -> 压力测试属于额外的功能,需要将 [stress_test.sh](./stress_test.sh) 拷贝到和nicsensor脚本相同的目录。 +> ~~压力测试属于额外的功能,需要将 [stress_test.sh](./stress_test.sh) 拷贝到和nicsensor脚本相同的目录。~~ > -> 如果不添加该脚本,该功能无法正常使用 +> ~~如果不添加该脚本,该功能无法正常使用~~ +> +> v1.11版本执行setup.sh会自动将`stress_test.sh`拷贝到正确的位置,无需手动拷贝 **功能介绍** @@ -295,7 +322,7 @@ nicsensor工具是在带有i2ctool工具(i2ctransfer、i2cdetect)的BMC下用于 -## 3_常见问题 +## 3_常见问题FAQ @@ -315,6 +342,10 @@ ADC128传感器在使用时需要初始化, 因此第一次读取时传感器可 常见于ina3221传感器读值明显不正确, 因为ina3221的i2c slave地址比较敏感, 容易和pca9641产生冲突, 可首先按照i2c地址冲突的方向去排查问题。 +### 3_4_插件升级 + +如果插件功能,例如 pmbus , stress 需要更新功能,通常更新对应 nicsensor/extension 目录下的插件本体即可,无需修改nicsensor脚本本体。通过 `nicsensor.sh help ex` 可以查询当前所有插件脚本的版本信息。 + ## 4_附属工具