#!/bin/sh total_i2c_bus=`/app/bin/i2cdetect_count -l | wc -l` #echo $total_i2c_bus if [ $total_i2c_bus -lt 1 ];then echo "No I2C Bus Detected." exit 1 fi drv_cnt=0 dev_cnt=0 for i in $(seq 0 $(expr $total_i2c_bus - 1)) do `/app/bin/i2cdetect_count -y $i > .i2c_bus$i.log` ((drv_cnt=$(grep Drivers .i2c_bus$i.log | awk '{print $1;}')+$drv_cnt)) ((dev_cnt=$(grep Devices .i2c_bus$i.log | awk '{print $1;}')+$dev_cnt)) done echo "Total I2C Buses: $total_i2c_bus" echo "Total I2C Drivers detected: $drv_cnt" echo "Total I2C Devices detected: $dev_cnt" rm .i2c_bus*.log逐行解读这段代码
时间: 2024-03-02 09:48:01 浏览: 87
这段代码的作用是检测系统中连接的 I2C 总线,以及连接到这些总线上的驱动和设备数量。
首先,使用命令 `/app/bin/i2cdetect_count -l` 获取系统中 I2C 总线的数量,并使用管道符 `|` 将输出结果传递给 `wc -l` 命令来计算行数,从而得到总线数量。这个结果保存在变量 `total_i2c_bus` 中。
接下来,使用 `if` 条件语句判断总线数量是否小于 1,如果是,输出 "No I2C Bus Detected.",并结束脚本的执行。
然后,使用 `for` 循环遍历每个总线。使用命令 `/app/bin/i2cdetect_count -y $i > .i2c_bus$i.log` 获取第 $i 条总线上连接的设备信息,并将输出结果保存到以 `.i2c_bus$i.log` 命名的日志文件中。
在循环中,使用 `grep` 命令和 `awk` 命令分别从日志文件中提取驱动和设备数量,然后使用算术表达式 `$(...)` 将这些数量累加到变量 `drv_cnt` 和 `dev_cnt` 中。
最后,输出总线数量、驱动数量和设备数量,并使用 `rm` 命令删除所有的日志文件。
需要注意的是,这段代码中的警告信息:
```
Warning: Can't use SMBus Quick Write command, will skip some addresses
```
是 `/app/bin/i2cdetect_count` 命令本身输出的警告信息,而不是脚本代码中的错误。这个警告信息提示了一些设备地址可能无法访问,但是这并不会影响脚本的执行结果。
阅读全文