/proc/sysrq-trigger文件的功能

来源:互联网 发布:南京浦口星甸网络问政 编辑:程序博客网 时间:2024/06/05 19:32


立即重启计算机      echo "b" > /proc/sysrq-trigger

立即关闭计算机      echo "o" > /proc/sysrq-trigger

导出内存分配的信息    echo "m"  > proc/sysrq-trigger        (可以用/var/log/message查看)Outputs memory statistics to the console

导出当前CPU寄存器信息和标志位的信息     echo "p"  > proc/sysrq-trigger       (outputs all flags and registers to the console)

导出线程状态信息        echo "t"  > proc/sysrq-trigger          (outputs a list of processes to the console)

故意让系统崩溃            echo "c"  > proc/sysrq-trigger         (crashes the system without first unmounting file systems or syncing disks attached to the system)

立即重新挂载所有的文件系统               echo "s"  > proc/sysrq-trigger     (attempts to sync disks attached to the system)

立即重新挂载所有的文件系统为只读     echo "u"  > proc/sysrq-trigger     (attempts to unmount and remount all file systems as read-only)

此外,还有两个类似于强制注销的功能

e ---- kills all processes except init using SIGTERM

---- kills all processes except init using SIGKILL


Question:When I meet a phone hang issue, how to handle it? how to raise case to Qualcomm?
Answer:
For a phone hang issue, since it is not reboot, there are some possibility:
1. In kernel, there some dead lock between process, while android service also be blocked, but time interrupt and dog kick worker can still running, so phone does not reboot
2. There are deadlock happen in android userspace server, like service manager or serviceflinger
There are also 2 scenario:
1. adb shell can still work
 then could login and retrive some information, like adb bugreport 
 As bugreport may hang if there are some android framework dead lock, so need to get some simple log first, dmesg and logcat log 
 After get dmesg log, try to trigger more information by sysrq interface
 kernel/Documentation/sysrq.txt
 show stack for all active CPU
      echo l > /proc/sysrq-trigger
 show hold lock  
   echo d > /proc/sysrq-trigger
show hrtimer
    echo q > /proc/sysrq-trigger
show tasks that are in disk sleep(uninterruptable sleep), which are like blocked in mutex or hardware register access
   echo w > /proc/sysrq-trigger
 after trigger, get more dmesg log for each to avoid overwrite.
Then trigger a crash dump
   First enable download mode in different platform has different sysfs entry to enable download mode
   May one of the following
  echo 1 >/sys/module/restart/parameters/download_mode
  echo 1 >/sys/module/msm_restart/parameters/download_mode
  echo 1 >/sys/module/msm_poweroff/parameters/download_mode
  
  if adb bugreport done without block, then trigger crash at last
  echo c> /proc/sysrq-trigger

2.no adb port enumerate or adb shell does not work
  Then we need to trigger dump by long press power key or RESET_IN pin that generally connect to powerkey+volumn-
  make sure s2-type is 1 warm reset, not 7 hard reset.
  pon_1 is for power key, pon_3 is for RESET_IN pin
  take 8994 as example, kernel/arch/arm64/boot/dts/qcom/msm-pm8994.dtsi
    qcom,pon_1 {
            qcom,pon-type = <0>;
            qcom,pull-up = <1>;
            linux,code = <116>;
            qcom,support-reset = <1>;
            qcom,s1-timer = <10256>;
            qcom,s2-timer = <2000>;
            qcom,s2-type = <1>;
    };
    qcom,pon_3 {
     qcom,pull-up = <1>;
            qcom,s1-timer = <6720>;
            qcom,s2-timer = <2000>;
            qcom,s2-type = <7>;
            qcom,use-bark;
    };
  If it does not work, then try pull down PS_HOLD in 200ms.


Android常见suspend时file system sync(sys_sync())超时,导致watchdog超时问题:

frameworks/base/services/core/java/com/android/server/Watchdog.java    //android op code

systemserver WDT log :

  native: #00 pc 000169b8  /system/lib/libc.so (syscall+28)
  native: #01 pc 0001bd79  /system/lib/libc.so (sem_wait+62)
  native: #02 pc 000016ab  /system/lib/libsuspend.so (???)
  native: #03 pc 00000e2d  /system/lib/libsuspend.so (autosuspend_disable+24)
  native: #04 pc 00014ed7  /system/lib/libandroid_servers.so (???)
  native: #05 pc 00087ee1  /system/framework/oat/arm/services.odex (Java_com_android_server_power_PowerManagerService_nativeSetAutoSuspend__Z+76)
  at com.android.server.power.PowerManagerService.nativeSetAutoSuspend(Native method)
  at com.android.server.power.PowerManagerService.setHalAutoSuspendModeLocked(PowerManagerService.java:2369)
  at com.android.server.power.PowerManagerService.access$1800(PowerManagerService.java:94)
  at com.android.server.power.PowerManagerService$2.onDisplayStateChange(PowerManagerService.java:2244)


kernel/kernel/power/suspend.c    //kernel code

//kernel log

03-20 12:57:44.042     0     0 I [26238.079199,4] PM: Syncing filesystems ...
03-20 12:57:44.042     0     0 I [26358.606528,4] SysRq: Show Blocked State

解决方法:

static int enter_state(suspend_state_t state)
{
int error;


if (state == PM_SUSPEND_FREEZE) {
} else if (!valid_state(state)) {
return -EINVAL;
}
if (!mutex_trylock(&pm_mutex))
return -EBUSY;


if (state == PM_SUSPEND_FREEZE)
freeze_begin();
#ifdef CONFIG_PM_SYNC_BEFORE_SUSPEND
printk(KERN_INFO "PM: Syncing filesystems ... ");
sys_sync();
printk("done.\n");
#endif


pr_debug("PM: Preparing system for %s sleep\n", pm_states[state].label);


  

0 0