接上文【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯按钮项目
一、实验名称
1、开发板板载资源系统性能、网络配置、安全检
2:温度采集
3 、红绿灯按钮项目红绿灯进入PWM1 CH通道降低能耗
二、实验目的
1、熟悉开发板系统性能、网络配置、安全检。
2、熟悉开发板板载资源。
三、实验背景
知晓Linux常用的基本命令。
四、实验设备和工具
1、 红绿灯板 ,。
2、嵌入式开发板。
3、 wifi路由器 。
实验过程
xj.sh内容如下:
#!/bin/bash
LOG_FILE="/opt/巡检报告_$(date +%F_%T).log"
echo"系统巡检报告" > $LOG_FILE
echo"生成时间: $(date)" >> $LOG_FILE
log() {
echo"$1" | tee -a $LOG_FILE
}
log""
log""
log"======================[1] 系统基本信息========================"
log"主机名: $(hostname)"
log"IP地址: $(hostname -I | cut -d' ' -f1)"
log"操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut
-d= -f2 | tr -d '\\\\\\\\\\\\\\\\"')"
log"内核版本: $(uname -r)"
log"启动时间: $(uptime -s)"
log"运行时长: $(uptime -p)"
log"系统负载: $(uptime | awk -F'load average:' '{print $2}')"
log"当前时间: $(date)"
log""
log"======================[2] CPU 信息==========================:"
log"CPU 型号: $(lscpu | grep 'Model name' | awk -F: '{print
$2}' | sed 's/^ *
log"逻辑CPU核数:
$(grep "processor" /proc/cpuinfo|sort
-u|wc -l)"
log"物理CPU核数:
$(grep "physical id" /proc/cpuinfo
|sort -u|wc -l)"
log"CPU 使用率: $(top -bn1 | grep '%Cpu' | awk '{print $2}')%"
log""
log"======================[3] 内存使用情况=========================="
free -h | tee -a $LOG_FILE
log"总共内存: $(free -mh|awk "NR==2"|awk '{print
$2}')"
log"使用内存: $(free -mh|awk "NR==2"|awk '{print
$3}')"
log"剩余内存: $(free -mh|awk "NR==2"|awk '{print
$7}')"
log"内存使用占比: $(free | grep -i mem |awk '{print $6/$2*100}'|cut
-c1-5)"
log""
log"======================[4] 磁盘使用情况=========================="
df -hT | tee -a $LOG_FILE
log""
log"======================[5] 网络配置和连接=========================="
log"IP 地址: $(hostname -I)"
log"默认网关: $(ip route | grep default | awk '{print $3}')"
log"网络接口状态:"
ifconfig | tee -a $LOG_FILE
log""
log"网络连接状态:"
ss -tunlp | tee -a $LOG_FILE
log""
log"======================[6] 服务状态检查=========================="
log"检查特定服务状态 (Firewalld,SSH,Nginx,,Apache,,MySQL):"
for service in firewalld sshd nginx apache2 mysqld; do
if systemctl
is-active --quiet $service; then
log"$service 服务状态:
正在运行"
else
log"$service 服务状态:
未运行"
fi
done
log""
log"========================[7] 安全检查============================"
log"SSH 配置:"
grep -E "^#?PermitRootLogin|^#?PasswordAuthentication" /etc/ssh/sshd_config | tee -a $LOG_FILE
log""
log"系统用户:"
awk -F: '{if ($3 >= 1000) print $1}' /etc/passwd | tee -a $LOG_FILE
log""
log"========================[8] 登录记录============================"
log"当前登录用户:"
who | tee -a $LOG_FILE
log""
log"最近登录记录:"
last -a | head -10 | tee -a $LOG_FILE
log""
log"========================[9] 系统日志检查============================"
log"登录失败日志:"
grep "Failed password" /var/log/auth.log
| tail -10 | tee -a $LOG_FILE || log"未检测到
auth.log 文件"
log""
log"检查系统重启记录:"
last reboot | head -5 | tee -a $LOG_FILE
log""
log"========================[10] 性能分析============================"
log"内存占用排行前5:"
ps aux --sort=-%mem | head -6 | tee -a $LOG_FILE
log""
log"CPU 占用排行前5:"
ps aux --sort=-%cpu | head -6 | tee -a $LOG_FILE
log""
log"=============================巡检完成============================"
log"巡检报告生成完成,保存路径: $LOG_FILE"
log"请根据巡检内容检查系统状态!"
log""
加x权限# chmod u+x
执行shell脚本
sh ./xj.sh
产生信息如下:
./xj.sh: 41: log======================[1] ϵͳ»ù±¾ÐÅÏ¢========================: not found
./xj.sh: 43: logÖ÷»úÃû: EASY-EAI-NANO-TB: not found
./xj.sh: 45: logIPµØÖ·: 192.168.1.3: not found
cut: you must specify a list of bytes, characters, or fields
Try 'cut --help' for more information.
./xj.sh: 48: -d=: not found
./xj.sh: 48: log²Ù×÷ϵͳ: : not found
./xj.sh: 50: logÄں˰汾: 6.1.118: not found
./xj.sh: 52: logÆô¶¯Ê±¼ä: 2025-11-05 08:04:17: not found
./xj.sh: 54: logÔËÐÐʱ³¤: up 3 hours, 55 minutes: not found
./xj.sh: 56: logϵͳ¸ºÔØ: 0.00, 0.00, 0.12: not found
./xj.sh: 58: logµ±Ç°Ê±¼ä: 2025å¹´ 11æ 05æ¥ ææä¸ 11:59:33 CST: not found
./xj.sh: 64: log======================[2] CPU ÐÅÏ¢==========================:: not found
./xj.sh: 67: logCPU ÐͺÅ: Model name: Cortex-A53: not found
./xj.sh: 71: -u: not found
./xj.sh: 71: logÂß¼CPUºËÊý:
processor : 0
processor : 1
processor : 2
processor : 3
0: not found
./xj.sh: 81: log======================[3] ÄÚ´æÊ¹ÓÃÇé¿ö==========================: not found
total used free shared buff/cache available
Mem: 986Mi 166Mi 522Mi 1.0Mi 297Mi 802Mi
Swap: 0B 0B 0B
./xj.sh: 86: log×ܹ²ÄÚ´æ: Mem: 986Mi 166Mi 522Mi 1.0Mi 297Mi 802Mi: not found
./xj.sh: 89: logʹÓÃÄÚ´æ: Mem: 986Mi 167Mi 521Mi 1.0Mi 297Mi 802Mi: not found
./xj.sh: 92: logÊ£ÓàÄÚ´æ: Mem: 986Mi 167Mi 521Mi 1.0Mi 297Mi 802Mi: not found
cut: you must specify a list of bytes, characters, or fields
Try 'cut --help' for more information.
./xj.sh: 95: -c1-5: not found
./xj.sh: 95: logÄÚ´æÊ¹ÓÃÕ¼±È: : not found
./xj.sh: 101: log======================[4] ´ÅÅÌʹÓÃÇé¿ö==========================: not found
Filesystem Type Size Used Avail Use% Mounted on
/dev/mmcblk0p6 ext4 58G 2.7G 52G 5% /
tmpfs tmpfs 494M 0 494M 0% /dev/shm
tmpfs tmpfs 198M 1.4M 197M 1% /run
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 494M 8.0K 494M 1% /tmp
tmpfs tmpfs 99M 0 99M 0% /run/user/1000
./xj.sh: 109: log======================[5] ÍøÂçÅäÖúÍÁ¬½Ó==========================: not found
./xj.sh: 111: logIP µØÖ·: 192.168.1.3 2409:8a14:865:57f0:ee30:8eff:fe29:f928 : not found
./xj.sh: 113: logĬÈÏÍø¹Ø: 192.168.1.1: not found
./xj.sh: 115: logÍøÂç½Ó¿Ú״̬:: not found
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 5e:1c:06:54:b3:c9 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 80
eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 12:de:f1:15:5c:3f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 120790 bytes 10991428 (10.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 120790 bytes 10991428 (10.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 2409:8a14:865:57f0:ee30:8eff:fe29:f928 prefixlen 64 scopeid 0x0<global>
inet6 fe80::ee30:8eff:fe29:f928 prefixlen 64 scopeid 0x20<link>
ether ec:30:8e:29:f9:28 txqueuelen 1000 (Ethernet)
RX packets 47483 bytes 3140807 (3.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78870 bytes 60535305 (60.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
./xj.sh: 123: logÍøÂçÁ¬½Ó״̬:: not found
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp UNCONN 0 0 127.0.0.1:760 0.0.0.0:* users:(("rpc.statd",pid=584,fd=5))
udp UNCONN 0 0 0.0.0.0:51560 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=12))
udp UNCONN 0 0 0.0.0.0:35242 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=8))
udp UNCONN 0 0 0.0.0.0:47105 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=4))
udp UNCONN 0 0 0.0.0.0:32785 0.0.0.0:* users:(("rpc.statd",pid=584,fd=8))
udp UNCONN 0 0 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolve",pid=325,fd=13))
udp UNCONN 0 0 192.168.1.3:68 0.0.0.0:* users:(("systemd-network",pid=247,fd=20))
udp UNCONN 0 0 0.0.0.0:37988 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=283,fd=5),("systemd",pid=1,fd=31))
udp UNCONN 0 0 *:50407 *:*
udp UNCONN 0 0 *:60204 *:* users:(("rpc.mountd",pid=580,fd=6))
udp UNCONN 0 0 *:52244 *:* users:(("rpc.mountd",pid=580,fd=14))
udp UNCONN 0 0 [fe80::ee30:8eff:fe29:f928]:546 *:* users:(("systemd-network",pid=247,fd=23))
udp UNCONN 0 0 *:37927 *:* users:(("rpc.statd",pid=584,fd=10))
udp UNCONN 0 0 *:42601 *:* users:(("rpc.mountd",pid=580,fd=10))
udp UNCONN 0 0 *:111 *:* users:(("rpcbind",pid=283,fd=7),("systemd",pid=1,fd=33))
tcp LISTEN 0 0 127.0.0.1:5037 0.0.0.0:* users:(("adbd",pid=451,fd=5))
tcp LISTEN 0 0 0.0.0.0:48739 0.0.0.0:* users:(("rpc.statd",pid=584,fd=9))
tcp LISTEN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=283,fd=4),("systemd",pid=1,fd=30))
tcp LISTEN 0 0 0.0.0.0:38423 0.0.0.0:*
tcp LISTEN 0 0 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=599,fd=3))
tcp LISTEN 0 0 0.0.0.0:2049 0.0.0.0:*
tcp LISTEN 0 0 0.0.0.0:34319 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=9))
tcp LISTEN 0 0 0.0.0.0:39999 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=13))
tcp LISTEN 0 0 0.0.0.0:36063 0.0.0.0:* users:(("rpc.mountd",pid=580,fd=5))
tcp LISTEN 0 0 127.0.0.1:4894 0.0.0.0:* users:(("rkaiq_3A_server",pid=212,fd=16))
tcp LISTEN 0 0 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolve",pid=325,fd=14))
tcp LISTEN 0 0 *:111 *:* users:(("rpcbind",pid=283,fd=6),("systemd",pid=1,fd=32))
tcp LISTEN 0 0 *:22 *:* users:(("sshd",pid=599,fd=4))
tcp LISTEN 0 0 *:2049 *:*
tcp LISTEN 0 0 *:59125 *:* users:(("rpc.mountd",pid=580,fd=15))
tcp LISTEN 0 0 *:57515 *:* users:(("rpc.statd",pid=584,fd=11))
tcp LISTEN 0 0 *:40281 *:*
tcp LISTEN 0 0 *:55151 *:* users:(("rpc.mountd",pid=580,fd=11))
tcp LISTEN 0 0 *:40435 *:* users:(("rpc.mountd",pid=580,fd=7))
tcp LISTEN 0 0 *:5555 *:* users:(("adbd",pid=451,fd=11))
./xj.sh: 131: log======================[6] ·þÎñ״̬¼ì²é==========================: not found
./xj.sh: 135: log¼ì²éÌØ¶¨·þÎñ״̬ (Firewalld£¬SSH£¬Nginx,£¬Apache,£¬MySQL):: not found
./xj.sh: 144: Syntax error: "else" unexpected
nano@EASY-EAI-NANO-TB:~$ sudo sh ./xj.sh
./xj.sh: 5: *#: not found
./xj.sh: 7: *#: not found
./xj.sh: 9: *#: not found
./xj.sh: 17: *#: not found
./xj.sh: 19: echoϵͳѲ¼ì±¨¸æ: not found
./xj.sh: 21: echoÉú³Éʱ¼ä: 2025å¹´ 11æ 05æ¥ ææä¸ 12:00:13 CST: not found
./xj.sh: 27: *#: not found
运行4小时后通过cat /sys/devices/virtual/thermal/thermal_zone0/temp命令芯片温度:40.4℃中心结温
40400
```运行4小时后
43290
查询设定值cat /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp超过trip_point_0_temp设定值(本固件默认+115℃)超过trip_point_0_hyst设定的时间(2000),整个芯片则会自动重启运行4小时后cpu温度采集43.29℃。
开发板PWM资源

查找PWM节点
rv1126b的pwm资源表如下:

【PWM1 CH0】对应的是pwm1_4ch_0,寄存地址为 20700000 。
【PWM1 CH1】对应的是pwm1_4ch_1,寄存地址为 20710000 。
pwm驱动加载成功后,在文件系统/sys/class/pwm/下会产生pwm节点(pwmchip*),通过下方命令,可得知pwm节点与pwm资源的对应关系。

【PWM1 CH0】对应的节点为【pwmchip1】
【PWM1 CH1】对应的节点为【pwmchip2】
操作PWM节点
红绿灯板 :

连接2
红绿灯板与RV11 26 B板连接如下
- 红绿灯板 3V3 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 1 针EASY EAI Nano-TB(RV1126B)开发板 功能3V3
红绿灯板 GND 接EASY EAI Nano-TB(RV1126B)开发板 P1的 6 针EASY EAI Nano-TB(RV1126B)开发板 功能 GND
红绿灯板 LEDr 红 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 32 针 EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C0
红绿灯板 LEDg 绿 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 33 针 EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C1
红绿灯板 LEDy 接EASY EAI Nano-TB(RV1126B)开发板 P1 的 37 针EASY EAI Nano-TB(RV1126B)开发板 功能 GPIO5_C2
【PWM1 CH0】----【pwmchip1】----红绿灯板 LEDr 红
【PWM1 CH1】----【pwmchip2】 ----红绿灯板 LEDg 绿
GPIO5_C2----gpio178 ----红绿灯板 LEDy 黄
脚本编写
脚本内容
- 文件名 :/etc/init.d/S99_v.sh
- 脚本内容 :
#!/bin/sh
k_v=0
k_s=1
k_c=0
program=1
p_sleep=50
p_s=1
# 等待特定按键
wait_for_key() {
local target_key=$(cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw)
# echo "in目标k_v $k_v ?"
# echo "in目标k_c $k_c ?"
# echo "in目标按键 $target_key "
# echo "in目标program $program "
if [ $target_key -lt 200 ]; then
if [ $k_v -eq 0 ]; then
k_c=$(( $k_c+1 ))
if [ $k_c -eq 2 ]; then
# echo "目标按键 $target_key 已按下"
k_s=0
program=$(( $program+1 ))
if [ $program -eq 2 ]; then
program=0
fi
fi
if [ $k_c -eq 3 ]; then
k_c=2
fi
else
k_v=0
k_c=0
fi
else
if [ $k_v -eq 1 ]; then
k_c=$(( $k_c+1 ))
if [ $k_c -eq 2 ]; then
# echo "目标按键 $target_key 已up"
k_s=1
fi
if [ $k_c -eq 3 ]; then
k_c=2
fi
else
k_v=1
k_c=0
fi
fi
}
# 等待rgb1
wait_rgb1_t() {
p_sleep=$(( $p_sleep-1 ))
case $k_s in
1)
sudo echo 0 > /sys/class/gpio/gpio178/value
if [ $program -eq 1 ]; then
cd /sys/class/pwm/pwmchip1/pwm0
echo 900000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
##sudo echo 1 > /sys/class/gpio/gpio176/value
else
cd /sys/class/pwm/pwmchip1/pwm0
echo 1000000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
##sudo echo 0 > /sys/class/gpio/gpio176/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=50
k_s=2
fi
;;
2)
sudo echo 0 > /sys/class/gpio/gpio176/value
if [ $program -eq 1 ]; then
cd /sys/class/pwm/pwmchip2/pwm0
echo 900000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
##sudo echo 1 > /sys/class/gpio/gpio177/value
else
cd /sys/class/pwm/pwmchip2/pwm0
echo 1000000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
##sudo echo 0 > /sys/class/gpio/gpio177/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=3
fi
;;
3)
cd /sys/class/pwm/pwmchip2/pwm0
echo 1000000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
##sudo echo 0 > /sys/class/gpio/gpio177/value
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio178/value
else
sudo echo 0 > /sys/class/gpio/gpio178/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=4
fi
;;
4)
sudo echo 0 > /sys/class/gpio/gpio178/value
if [ $p_sleep -eq 0 ]; then
p_sleep=5
k_s=5
fi
;;
5)
if [ $program -eq 1 ]; then
sudo echo 1 > /sys/class/gpio/gpio178/value
else
sudo echo 0 > /sys/class/gpio/gpio178/value
fi
if [ $p_sleep -eq 0 ]; then
p_sleep=50
k_s=1
fi
;;
esac
}
filename="gpio178"
if [ -e "$filename" ]; then
#if test -d /sys/class/gpio/gpiol78 ;then
echo "alread exported gpiol78!"
else
sudo echo 178 > /sys/class/gpio/export
fi
cd /sys/class/pwm/pwmchip1
echo 0 > /sys/class/pwm/pwmchip1/export
cd pwm0
echo 1000000 > period ##设置定时器1个周期内的脉冲个数
echo 500000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
echo 900000 > duty_cycle ##.....1...........
echo 1 > enable ##使能pwm定时器
echo 1000000 > duty_cycle ##.....1...........
cd /sys/class/pwm/pwmchip2
echo 0 > /sys/class/pwm/pwmchip2/export
cd pwm0
echo 1000000 > period ##设置定时器1个周期内的脉冲个数
echo 500000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
echo 900000 > duty_cycle ##.....1...........
echo 1 > enable ##使能pwm定时器
echo 1000000 > duty_cycle ##.....1...........
sudo echo out > /sys/class/gpio/gpio176/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo out > /sys/class/gpio/gpio177/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo out > /sys/class/gpio/gpio178/direction ## gpio_direction_output 设置相应gpio为输出方向
sudo echo 0 > /sys/class/gpio/gpio176/value ## gpio_set_value 设置输出低电平
sudo echo 0 > /sys/class/gpio/gpio177/value ## gpio_set_value 设置输出低电平
sudo echo 0 > /sys/class/gpio/gpio178/value ## gpio_set_value 设置输出低电平
while true
do
{
wait_for_key
wait_rgb1_t
sleep 0.05
};
done

export:用于导出pwm定时器设备
unexport:用于释放pwm定时器设备
向export文件写入0,就会打开pwm定时器,会产生一个pwm0目录。
echo 0 > export

进入到pwm0定时器,就能设置它的各种属性,如周期、占空比等。
cd pwm0

echo 1000000 > period ##设置定时器1个周期内的脉冲个数
echo 500000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数
echo 1 > enable ##使能pwm定时器
echo 0 > enable ##禁能pwm定时器
相反往unexport文件写入0,就会关闭pwm定时器,同时pwm0目录会被删除。
cd ..
echo 0 > unexport

加x权限# chmod u+x有达到预期。
脚本运行
nano@EASY-EAI-NANO-TB:~$ sudo sh /etc/init.d/S99_v.sh
[sudo] password for nano:

红绿灯PWM1 CH通道明显降低能耗,红绿亮度达到要求。