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

181 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 如何扩展脚本?
## 一、前言
> [!tip]
>
> 脚本扩展一般涉及到两部分内容的扩充,包含对于支持服务器类型的扩充,或者对支持读取的传感器类型的扩充。
不论如何修改脚本,请在完成后主要修改后,修改 `SCRIPT_VERSION` 用于和主线脚本进行版本区分。
例如:
- `SCRIPT_VERSION="1.6.5 for project"` 代表基于脚本1.6.5版本为某个项目做特殊定制
## 二、新增支持服务器
### 修改点1-Support_Server_List
``````sh
# 可以在这里添加对应的服务器型号
Support_Server_List="5280m7, 5468m7, 5688m7, donghu, yichun, qiandaohu"
``````
### 修改点2-添加服务器配置入口
``````sh
# 修改函数 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拓扑适配函数
``````sh
# 在脚本中找到函数 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扫描函数可选
``````sh
# 类似 修改点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
``````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 中完成逻辑调用即可。