Kernel Exception导致手机重启案例分析

f51c16c842a0197d2b03edb64a443253.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、高温触发 Kernel Exception 重启问题
二、解决方案
三、提高电池温度方案

一、 高温触发 Kernel Exception 重启问题

手机 电池温度 默认60度以上高温会触发手机安全机制,让手机管家或者重启。

由温度异常导致手机重启的部分 Log 如下:

fbce35822f3e221f67fe9a971140128f.jpeg

高温情况下,Kernel Exception引起的重启问题

二、解决方案

此问题 需要驱动同事修改底层battery.c 文件中的一个地址,不让其写为dead,就不会重启。或者提高电池温度参数。

三、提高电池温度方案

提高电池温度的方案如下:

1.修改mtk_battery_table.h

/alps/kernel-4.4/drivers/misc/mediatek/include/mt-plat/mt6739/include/mach/mtk_battery_table.h

* ============================================================

  */

+//#define SPROCOMM_NTC //wang add

+#ifdef SPROCOMM_NTC

+#define NTC_COMP_RES 42

+#endif

+

 /* Qmax for battery  */

 #define Q_MAX_L_CURRENT 0

 #define Q_MAX_H_CURRENT 10000

@@ [-111,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/kernel-4.4/drivers/misc/mediatek/include/mt-plat/mt6739/include/mach/mtk_battery_table.h;h=7cb7b5e7e735a1907b941a6df5755c582ffca0ac;hb=7cb7b5e7e735a1907b941a6df5755c582ffca0ac#l111) [+116,8](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/kernel-4.4/drivers/misc/mediatek/include/mt-plat/mt6739/include/mach/mtk_battery_table.h;h=76ef73904571e7abf677cf9b73783b52131c467a;hb=76ef73904571e7abf677cf9b73783b52131c467a#l116) @@ int g_QMAX_SYS_VOL_T4[TOTAL_BATTERY_NUMBER] = {36000, 36010, 36020, 36030};

 #define BIF_NTC_R 16000

 #if (BAT_NTC_10 == 1)

-struct FUELGAUGE_TEMPERATURE Fg_Temperature_Table[21] = {

+#define NTC_NUM 25 //wang add 20180528

+struct FUELGAUGE_TEMPERATURE Fg_Temperature_Table[NTC_NUM] = {

                {-40, 195652},

                {-35, 148171},

                {-30, 113347},

@@ [-132,12](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.
<think>嗯,用户的问题是关于CentOS 7登录后系统自动重启原因和解决方法。这看起来是个系统级故障,需要从多个角度分析。 用户提供的引用信息很有价值,特别是引用[2]提到PAM模块损坏可能导致登录异常,引用[4]讨论了MBR故障等启动问题。不过用户的问题更特殊,是登录后立即重启,需要重点排查登录环节的触发机制。 我注意到几个关键排查方向:首先是硬件问题,特别是内存故障可能导致随机重启;其次是内核崩溃,CentOS 7的kdump服务记录会很有用;还有PAM认证异常,引用[2]中提到的pam_limits.so模块损坏案例就很典型;另外像用户环境配置错误也可能触发,引用[5]中用户目录权限问题虽然表现不同但思路可借鉴。 具体到诊断步骤,应该建议用户先检查系统日志,特别是/var/log/messages和dmesg。如果能看到oops错误信息就指向内核问题,如果是PAM相关报错就按引用[2]的方法修复。对于硬件问题,需要运行memtest86+测试。 解决方案要分层次:如果是软件配置问题,进入救援模式修复;内核问题则考虑降级或更新;硬件故障自然要更换部件。最后要提醒关键配置备份的重要性,比如引用[3]修改密码时也强调备份。 用户可能还隐藏着更复杂的环境因素,比如是否在用特殊硬件驱动或安全加固方案,所以相关问题的设计要覆盖这些可能性。第一个问题聚焦日志分析,第二个考虑安全模块影响,第三个则针对硬件兼容性,这样形成完整排查链条。</think>CentOS 7登录后系统自动重启是一个严重的系统故障,通常由硬件、内核或关键系统服务问题引起。以下是常见原因及解决方法: --- ### **一、常见原因分析** 1. **硬件故障** - **内存故障**:坏内存条会导致系统不稳定(触发内核保护性重启)[^4]。 - **CPU/电源问题**:过热或供电不足时系统强制重启- **硬盘故障**:系统分区损坏或I/O错误可能触发重启。 2. **内核崩溃(Kernel Panic)** - 驱动冲突(如显卡、RAID卡驱动)或内核漏洞会导致崩溃,系统自动重启[^4]。 - **诊断命令**: ```bash dmesg | grep -i "panic\|oops" # 检查内核崩溃记录 journalctl -p 3 -xb # 查看系统级错误日志 ``` 3. **关键服务崩溃** - **PAM认证模块损坏**:如引用[2]中`pam_limits.so`模块异常,可能引发连锁反应。 - **系统守护进程(systemd)故障**:关键服务(如`dbus`、`login`)崩溃可能触发重启。 4. **用户环境配置错误** - 错误的`~/.bashrc`或`/etc/profile`脚本(如无限循环、致命命令),引用[5]中目录权限问题虽表现不同,但原理类似。 5. **文件系统损坏** - 根分区(`/`)或关键目录(`/etc`, `/lib`)损坏,导致系统无法维持运行状态。 --- ### **二、解决方法** #### **步骤1:进入救援模式** 1. 重启系统,在GRUB菜单按 **`e`** 进入编辑模式。 2. 找到 `linux16` 行,将 `ro` 改为 **`rw init=/bin/bash`**(参考引用[3][^3])。 3. 按 **Ctrl+X** 启动至`bash`环境。 #### **步骤2:关键排查与修复** ```bash # 1. 检查文件系统完整性 fsck -y /dev/sda1 # sda1替换为实际系统分区 # 2. 检查系统日志(救援模式下需挂载真实根目录) mount -o remount,rw /sysroot chroot /sysroot vi /var/log/messages # 查看重启前最后日志 # 3. 修复PAM模块(参考引用[2][^2]) vi /etc/pam.d/login # 注释异常行,如:`#session required pam_limits.so` cp /backup/pam_limits.so /lib64/security/ # 从备份恢复损坏模块 # 4. 恢复用户环境配置 mv ~/.bashrc ~/.bashrc.bak # 临时重命名用户配置文件 mv /etc/profile /etc/profile.bak ``` #### **步骤3:内核与驱动修复** ```bash # 1. 回退有问题的内核 sudo yum list installed kernel-* # 查看已安装内核 sudo yum remove kernel-3.10.0-123.el7 # 移除问题版本 # 2. 更新或降级显卡/硬件驱动 sudo yum update mesa* # 更新显卡驱动 sudo yum downgrade megaraid_sas # 回退RAID卡驱动 ``` #### **步骤4:硬件诊断** - **内存测试**:从CentOS安装盘启动,选择 **`Memory Test`** 运行`memtest86+`。 - **硬盘检测**: ```bash smartctl -a /dev/sda # 查看SMART健康状态 badblocks -v /dev/sda # 扫描坏道 ``` --- ### **三、预防措施** 1. **定期备份关键配置**: ```bash sudo tar -czvf /backup/etc.tar.gz /etc /boot /lib64/security ``` 2. **启用kdump**: ```bash sudo yum install kexec-tools sudo systemctl start kdump sudo systemctl enable kdump ``` 3. **监控硬件状态**: ```bash sudo yum install lm_sensors sensors-detect && sensors # 监控温度/电压 ``` --- **典型案例**: > 某用户因升级`nouveau`显卡驱动后登录即重启,通过**救援模式降级驱动**解决。日志显示: > ```log > kernel: nouveau 0000:01:00.0: gr: TRAP chid 1 [0000:01:00.0 GRAPH] > kernel: Kernel panic - not syncing: Fatal exception > ``` --- **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值