Commit a2ad0545 authored by liumg's avatar liumg
Browse files

update readme

parent 7a40c814
#!/bin/bash
# 检查是否具有root权限
if [ "$EUID" -ne 0 ]; then
echo "错误:该脚本需要root权限运行(请使用sudo执行)" >&2
exit 1
fi
# 检查dmidecode命令是否存在
if ! command -v dmidecode &> /dev/null; then
echo "错误:未找到dmidecode命令,请先安装dmidecode工具" >&2
exit 1
fi
# 获取主板序列号
baseboard_SN=$(dmidecode -t 2 | grep -i "Serial Number" | awk '{print $3}' )
# 检查是否成功获取序列号
if [ -z "$baseboard_SN" ]; then
echo "错误:无法获取主板序列号" >&2
exit 1
fi
# 型号判断逻辑
case $baseboard_SN in
*AS*)
echo "检测到主板型号:[${baseboard_SN}] 太老,满负载情况会出现掉卡" >&2
exit 1
;;
*BH*)
echo "检测到主板型号:[${board_model}] 符合要求"
exit 0
;;
*)
echo "未知主板型号,需要进一步查看"
exit 2
;;
esac
#!/bin/bash
#huangjun@hygon.cn
#v0.2
DEVICE_ID="1d94:(5|6)[0-9a-z]{3,3}"
pn["5"]="zifang"
pn["6"]="kongming"
dev=($(lspci -nn | grep -oE "1d94:(5|6)[0-9a-z]{3,3}" | awk -F: '{print $2}' | grep -o [56]))
devname=${pn[${dev[0]}]}
echo "===THIS SCRIPT JUST FOR 5.16.21 5.2 V1.10 and later==="
function ko_is_loaded()
{
local st=$(lsmod | grep "\<$1\>")
local ret=yes
if [ "$st" = "" ];then
ret="no"
fi
echo $ret
}
function have_mod()
{
echo "$(modinfo $1)"
}
function check_iommu()
{
if [ "$(ko_is_loaded iommu_v2)" = "yes" ];then
echo "use iommu_v2, ready"
return 0
fi
if [ "$(ko_is_loaded amd_iommu_v2)" = "yes" ];then
echo "use amd_iommu_v2, ready"
return 0
fi
if [ "$(have_mod iommu_v2)" != "" ];then
echo "have iommu_v2 in disk, but not loaded"
return -1
fi
if [ "$(have_mod amd_iommu_v2)" != "" ];then
echo "have amd_iommu_v2 in disk, but not loaded"
return -2
fi
echo "no iommu driver on this system"
return -3
}
function check_vfio_pci()
{
if [ "$(ko_is_loaded vfio-pci)" = "yes" ];then
echo "Some device have attach to VM"
echo "pls check it"
fi
}
function _have_read_perm()
{
[[ -r $1 ]] && echo "yes"
}
function _find_ucode_in_path()
{
local u=$2
local p=$1
local au=""
local tc=0
local cnt=0
au="$(find $p -name ${devname}_$u.bin 2> /dev/null)"
tc=$(find $p -name ${devname}_$u.bin 2> /dev/null | wc -l)
cnt=$(($cnt + $tc))
echo $au
return $cnt
}
function check_ucode()
{
local ucodes="sdma sdma1 mec mec2 rlc smu"
local v=$(uname -r)
local paths="/lib/firmware/updates/$v /lib/firmware/updates/ /lib/firmware/$v"
local cnt=0
local au=""
local e=
local u
local p
local rp
for u in $ucodes;do
for p in $paths;do
au="$au $(_find_ucode_in_path $p $u)"
cnt=$(($cnt + $?))
done
if [[ $cnt -gt 1 ]];then
echo "our firmware is local:[/lib/firmware/$v]"
echo "pls rmove the other firmware."
echo "all:[$au]"
e="yes"
fi
if [ "$cnt" = "0" ];then
echo "no ${devname}_$u.bin found! pls reinstall driver."
e="yes"
fi
for p in $au;do
local r=$(_have_read_perm $p)
if [ "$r" != "yes" ];then
echo "no read perm on firmware: $p"
e="yes"
fi
done
au=""
cnt=0
done
if [ "$e" = "yes" ];then
exit -1
fi
echo "firmware, ready"
}
function check_ko()
{
local kos="hydcu.ko hydcu-sched.ko hydrm_ttm_helper.ko hy-extra.ko hykcl.ko hyttm.ko"
local dir="/opt/hyhal/dkms/"
local ret=
for k in $kos;do
local r=$(_have_read_perm $dir/$k)
if [ "$r" != "yes" ];then
ret="$ret $k"
fi
done
if [ "$ret" != "" ];then
echo "no driver installed or loss read perm"
echo "pls check[$kos] in $dir"
exit -1
fi
echo "dcu ko, ready"
}
function check_cuser_if_video()
{
local r=$(cat /etc/group | grep video | grep $USER)
if [ "$r" = "" ];then
echo "you should add user:$USER to video group. sudo usermod -aG video $USER"
exit -1
fi
echo "user group, ready"
}
function check_system_cap()
{
if [ -r /sys/fs/selinux/enforce ] && [ "$(semodule -l | grep hydcu)" = "" ];then
echo "system service no cap to load module"
echo "pls install driver again"
exit -1
fi
echo "system service policy, ready"
}
#0
if [ "$(ko_is_loaded hydcu)" = "yes" ];then
echo "driver loaded"
exit 0
fi
#1
check_iommu
check_vfio_pci
#2
check_ko
#3
check_ucode
#4
check_system_cap
#5
check_cuser_if_video
echo "驱动检查结束,没有发现明显问题"
File deleted
#!/bin/bash
# 检查是否具有root权限
if [ "$EUID" -ne 0 ]; then
echo "错误:该脚本需要root权限运行(请使用sudo执行)" >&2
exit 1
fi
# 获取主板序列号
speed=$(./hydcutune -pciestatus | grep -i speed | awk '{print $5'})
# 检查是否成功获取序列号
if [ -z "$speed" ]; then
echo "没有获取到当前pcie 速率" >&2
exit 1
fi
# 型号判断逻辑
case $speed in
Gen1|Gen2|Gen3)
echo "当前PCIe 速率偏低,需要检查vbios或者使用hydcutune修复" >&2
exit 1
;;
Gen4|Gen5)
echo "PCIe速率正常"
exit 0
;;
*)
echo "未检测到PCIe速率"
exit 2
;;
esac
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment