2011-7-27 14:13:19

来源:互联网 发布:网络销售的平台有哪些? 编辑:程序博客网 时间:2024/05/21 17:41
 

 

2011-7-27 14:13:19


首先加载相关的so文件

上来就killall?

[pid  1419] connect(3, {sa_family=AF_FILE, path="/tmp/.X11-unix/X0"...}, 19 <unfinished ...>

poll([{fd=4, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN},

{fd=5, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}], 8, 4059) = 0 (Timeout)

怀疑 usb的恢复手法有问题

${#2233} 用来表示2233的位数

704*480 分辨率的没有图像

先存一个文件看看


直接掉用powermanager的方法

int pm_suspend(suspend_state_t state)
{
 if (state > PM_SUSPEND_ON && state <= PM_SUSPEND_MAX)
  return enter_state(state);
 return -EINVAL;
}

有这样 8种状态

typedef int __bitwise suspend_state_t;

#define PM_SUSPEND_ON  ((__force suspend_state_t) 0)
#define PM_SUSPEND_STANDBY ((__force suspend_state_t) 1)
#define PM_SUSPEND_MEM  ((__force suspend_state_t) 3)
#define PM_SUSPEND_DISK  ((__force suspend_state_t) 4)
#define PM_SUSPEND_LCDREFRESH ((__force suspend_state_t) 5)
#define PM_SUSPEND_DEEPSLEEP ((__force suspend_state_t) 6)
#define PM_SUSPEND_MAX  ((__force suspend_state_t) 7)


如果状态是 PM_SUSPEND_DISK 直接调用 pm_suspend_disk

static const char * const pm_states[PM_SUSPEND_MAX] = {
 [PM_SUSPEND_STANDBY] = "standby",
 [PM_SUSPEND_MEM] = "mem",
#ifdef CONFIG_SOFTWARE_SUSPEND
 [PM_SUSPEND_DISK] = "disk",
#endif
 [PM_SUSPEND_LCDREFRESH] = "lcdrefresh",
 [PM_SUSPEND_DEEPSLEEP] = "deepsleep",
};

电源状态也就4种


判断一个进程是否可以冻结
static inline int freezeable(struct task_struct * p)
{
 if ((p == current) ||
     (p->flags & PF_NOFREEZE) ||
     (p->exit_state == EXIT_ZOMBIE) ||
     (p->exit_state == EXIT_DEAD))
  return 0;
 return 1;
}

防止手机休眠?

typedef struct {
 unsigned long sig[_NSIG_WORDS];
} sigset_t;


2个字节

struct sigpending {
 struct list_head list;
 sigset_t signal;
};

 

 sigset_t blocked, real_blocked;
 sigset_t saved_sigmask;  /* To be restored with TIF_RESTORE_SIGMASK */
 struct sigpending pending;


static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
{
 unsigned long ready;
 long i;

 switch (_NSIG_WORDS) {
 default:
  for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
   ready |= signal->sig[i] &~ blocked->sig[i];
  break;

 case 4: ready  = signal->sig[3] &~ blocked->sig[3];
  ready |= signal->sig[2] &~ blocked->sig[2];
  ready |= signal->sig[1] &~ blocked->sig[1];
  ready |= signal->sig[0] &~ blocked->sig[0];
  break;

 case 2: ready  = signal->sig[1] &~ blocked->sig[1];
  ready |= signal->sig[0] &~ blocked->sig[0];
  break;

 case 1: ready  = signal->sig[0] &~ blocked->sig[0];
 }
 return ready != 0;
}

是不是有额外的信号?