786487837 786487837
淘宝zombiz
关注数: 37 粉丝数: 46 发帖数: 507 关注贴吧数: 32
taraWs 工控主板装黑裙,定时卡死问题定位解决方案 (就是工控主板有看门狗,能进BIOS的进去关,不能进去的参考我的定位解决思路) 一、 遇到的问题 这台 i3-6100U ITX-NVR38工控主板,不管是装 Windows 还是黑群晖,只要开机满 60 分钟,就会准时卡死。 但是我U盘做了Ubuntu,就不会卡死,另外商家说飞牛OS也没问题(但是他给我发的盘里装的不是飞牛OS 卡死时有一个很特殊的现象:机器没有断电,风扇还在转,整机功耗卡在 40W 不动,但屏幕、网络和系统响应全部切断。(同时群晖日志也没有关机记录,群晖会认为是类似断电的异常关机,有警告) 另外,主板 BIOS 被设置了密码无法进入(应该是shabiTara定制的默认有密码BIOS),拔掉 CMOS 电池放电也清不掉密码。用改BIOS软件不会整,差点改的不开机。 二、 解决思路是怎么推导的? 一开始很容易以为是 Intel ME(管理引擎)的问题,因为 ME 也有个著名的“看门狗机制”。但 ME 超时通常是30 分钟直接断电(功耗掉到 0W)。而我们这台是60 分钟卡死(功耗维持 40W),这说明 CPU 和主板其实一直通着电,只是总线被强制锁死了。(其实也试过屏蔽Intel ME的部分模块定制BIOS,无效。) 既然不是 ME 断电,思路转向第二种可能:CPU 进入深度节能状态后唤醒失败,或者系统触发了电源管理 Bug。但我们在 Windows 和黑群晖里强行关掉 CPU 节能(C-State)和 PCIe 休眠后,机器依然整整 1 小时准点卡死。 这就把范围缩小到了硬件层:主板上大概率有一颗独立的工控看门狗芯片。开机时,BIOS 给它写入了 60 分钟的倒计时。如果操作系统里没有对应的驱动去定时“喂狗”,倒计时一归零,芯片就会向 CPU 发送物理信号,把机器直接卡死。 因为进不去 BIOS 修改配置,主板上又找不到物理跳线,最后的解决思路就是:直接在系统里,通过底层端口指令去改写看门狗芯片的硬件寄存器,强行把这个倒计时给关掉。 三、 怎么一步步排查和定位的? 1. 排除 Intel ME用 me_cleaner 工具对 BIOS 文件进行处理。试过把 ME 模块全删,结果主板发不出网卡信号还响警报,说明这块板子强依赖 ME 初始化。后来只开启 HAP(休眠位),刷入后网卡恢复了,但 60 分钟卡死依旧存在。至此彻底排除 ME。 2. 排除操作系统节能在黑群晖引导项里加入 intel_idle.max_cstate=1 和 pcie_aspm=off,强行禁止 CPU 和 PCIe 总线进入休眠。挂机测试依然卡死,说明不是软件休眠导致的死锁。(这里也尝试过在引导项里加nowatchdog,屏蔽watchdog驱动什么的,没用,AI解释说因为看门狗比RR引导先加载好开始倒计时的...俺暂且信他) 3. 寻找硬件看门狗芯片在 Ubuntu 系统下安装 lm-sensors 运行扫描,成功在 ISA 总线上抓出了主板的 Super I/O 芯片型号:ITE IT8728F。同时查看主板说明书,也确认了主板自带 256 级的看门狗功能。(感觉这里才是转折点,不是我去翻说明书,这傻AI还在那边研究me和魔改BIOS密码呢,同时也确认了主板没有看门狗相关的硬件插座排针啥的。 4. 抓取寄存器,拿到直接证据写了个 Python 脚本,直接读取 Linux 的 /dev/port 接口,向 0x2E 端口发送控制指令,查看 ITE IT8728F 的看门狗寄存器(逻辑设备 0x07): 读到 0x73 寄存器的值为 0x3C:十六进制的 0x3C 换算成十进制就是60。读到 0x72 寄存器的值为 0x40:展开二进制是 0100 0000。最高位 Bit 7 是 0 代表单位为分钟;Bit 6 是 1 代表开启了KRST 硬件复位输出。 到这里彻底破案:BIOS 在每次开机时,都会往看门狗芯片里写入一个 60 分钟的倒计时。黑群晖系统里没有驱动去定期重置它,倒计时一完,芯片直接拉低复位引脚,机器瞬间死锁在 40W。 四、 最终解决方法 (因为我进不去BIOS,所以只能这么玩,能进BIOS的直接去BIOS搞) 在群晖系统里写了一个 Python 脚本,利用 root 权限直接对硬件端口操作: 向 0x2E 端口写入密钥,进入 ITE 芯片配置模式。切换到看门狗逻辑设备(LDN 0x07)。把 0x71、0x72、0x73、0x74 这几个控制看门狗的寄存器全部写入 0x00(同时关闭倒计时和硬件复位信号)。退出配置模式。 把这个脚本存为文件,挂在群晖的“任务计划”里,设置成开机自动以 root 权限运行。这样每次开机,系统都会在第一秒把硬件看门狗彻底关掉,彻底解决了 60 分钟死机的问题。
1 下一页