wake

wake up on lan 安卓手机控制局域网唤醒开机+远程关机

可紊 提交于 2020-04-04 20:52:48
1、bios 开启远程唤醒,具体自行百度(Power On by PCIE devices 与 Power On by Onboard ) 2、记录MAC地址 3、手机装软件 ,看好图上的字 安卓手机控制端(小米6开发版亲测可用) 下载地址: https://www.7down.com/soft/163710.html 手机上我装的是 remote desktop manager 超专业的,自行百度手机版 局域网远程控制 关机是个事,有这个轻松解决 电脑关机软件(win7亲测可用,双击就关机) 下载地址: https://www.lanzous.com/i3h9gdi 来源: 51CTO 作者: zhangbest5 链接: https://blog.51cto.com/1143560/2484852

Linux内核多线程(一)

孤者浪人 提交于 2020-03-06 08:14:05
Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFSET(3G)的地址空间。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。 内核线程(thread)或叫守护进程(daemon),在操作系统中占据相当大的比例,当Linux操作系统启动以后,你可以用”ps -ef”命令查看系统中的进程,这时会发现很多以”d”结尾的进程名,确切说名称显示里面加 "[]"的,这些进程就是内核线程。 创建内核线程最基本的两个接口函数是: kthread_run (threadfn, data, namefmt, ...) 和 kernel_thread (int(* fn)(void *),void * arg,unsigned long flags) 这里我们主要介绍kthread_run,后面会专门分析这两个函数的异同。

Android电源管理简介(下)

核能气质少年 提交于 2020-02-07 00:15:37
文章转载自:http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx Kernel层 其主要代码在下列位置 : drivers/android/power.c 其对 Kernel提供的接口函数有 EXPORT_SYMBOL(android_init_suspend_lock); //初始化 Suspend lock,在使用前必须做初始化 EXPORT_SYMBOL(android_uninit_suspend_lock); //释放 suspend lock相关的资源 EXPORT_SYMBOL(android_lock_suspend); //申请 lock,必须调用相应的 unlock来释放它 EXPORT_SYMBOL(android_lock_suspend_auto_expire);//申请 partial wakelock, 定时时间到后会自动释放 EXPORT_SYMBOL(android_unlock_suspend); //释放 lock EXPORT_SYMBOL(android_power_wakeup); //唤醒系统到 on EXPORT_SYMBOL(android_register_early_suspend); //注册 early suspend的驱动 EXPORT_SYMBOL

Android PM suspend&resume

人盡茶涼 提交于 2020-02-07 00:14:29
Android PM suspend&resume 电源 管理 主要体现在以下方面: 1.低功耗模式:对于现在的嵌入式芯片,都提供了各种低功率模式,如:提供了STOP,WAIT,DEEP SLEEP等功率状态,为不同的 系统 应用 使用不同的功率模式提供了很好的 解决 方案 。同时,除DEEP SLEEP模式外,在动态电源管理中,大大提高了其他模式之间的转换速度。 2.动态电压与频率调整模式:在动态功率模式中,通过提供不同的电压,不同的系统时钟频率,芯片可以工作于不同的主频上,可以根据系统的负载情况,动态调 整芯片的工作状态,只要能满足系统运行需要即可,从而避免了系统一直高速运行下的功率浪费。 3.时钟与电源开关:对于一嵌入式系统,可能存在很多外围设备,但它们不需要同时使用,对于不需要使用的设备,可以停止给它们提供时钟与电源,或让相应的 设备进入DEEP SLEEP状态,仅仅提供最基本的时钟和电压,达到减少功耗的目的。 Android的电源管理还是比较简单的, 主要就是通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理架构图如下: (注该图来自Steve Guo) Kernel层[针对Android Linux 2.6.28内核]: 1、初始化 suspend 和resume函数 static struct platform_driver mxcbl

等待队列

北慕城南 提交于 2020-02-02 08:56:38
  等待队列在内核中很有用途,尤其用在中断处理、进程同步及定时。   等待队列实现了在事件上的条件等待:希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制权。因为,等待队列表示一组睡眠的进程,当某一条件变为真时,由内核唤醒他们。 1.每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_queue_head_t的数据结构: struct __wait_queue_head { spinlock_t lock; struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t;   因为等待队列是由中断处理程序和主要内核函数修改的,因此必须对其双向链表进行保护以免对其进行同时访问,因为同时访问会导致不可预测的后果。同步是通过等待队列头中的lock自旋锁达到的。task_list字段是等待进程链表的头。 2.等待队列链表中的元素类型为wait_queue_t: struct __wait_queue { unsigned int flags; #define WQ_FLAG_EXCLUSIVE 0x01 void *private; wait_queue_func_t func; struct list_head task_list; }

LINUX内核-等待队列

微笑、不失礼 提交于 2020-02-02 08:15:38
LINUX内核-等待队列【转】 一、定义: /include/linux/wait.h struct __wait_queue_head { spinlock_t lock; struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t; 二、作用: 在内核里面,等待队列是有很多用处的,尤其是在中断处理、进程同步、定时等场合 。 可以使用等待队列在实现阻塞进程的唤醒。它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制,同步对系统资源的访问等。 三、字段详解: 1 、 spinlock_t lock; /*--> */ /*--> */ 在对 task_list 与操作的过程中,使用该锁实现对等待队列的互斥访问。 2 、 srtuct list_head_t task_list; 双向循环链表,存放等待的进程。 三、操作: 1 、定义并初始化: (1) wait_queue_head_t my_queue; init_waitqueue_head(&my_queue); 直接定义并初始化。 init_waitqueue_head() 函数会将自旋锁初始化为未锁,等待队列初始化为空的双向循环链表。 (2) DECLARE_WAIT_QUEUE_HEAD

linux 等待队列

余生颓废 提交于 2020-02-02 06:32:21
inux内核中等待队列 在 Linux 内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。 等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_queue_head_t的 数据结构 (1)定义等待队列头(相关内容可以在linux/include/wait.h中找到) 等待队列头结构体的定义: struct __wait_queue_head {   spinlock_t lock; //自旋锁变量,用于在对等待队列头   struct list_head task_list; // 指向等待队列的list_head }; typedef struct __wait_queue_head wait_queue_head_t ; 使用等待队列时首先需要定义一个wait_queue_head,这可以通过DECLARE_WAIT_QUEUE_HEAD宏来完成,这是静态定义的方法。该宏会定义一个wait_queue_head,并且初始化结构中的锁以及等待队列。当然

Android系统消息处理机制

会有一股神秘感。 提交于 2020-01-19 12:09:55
Android系统消息处理机制 前言 在Android应用开发中,主线程一般都是UI操作,子线程去完成一些耗时操作。主线程会一直等待系统或者用户的响应,从而完成对UI的渲染和显示。在学些之前,先了解两个linux的知识点: 管道(pipe):管道是一种IPC机制,作用于有血缘关系的进程之间,完成数据传递,调用pipe系统函数可创建一个管道。其本质是一个虚拟文件(实际为内核缓冲区),采用半双工通信方式,数据只能在一个方向流动。 int pipe ( int pipefd [ 2 ] ) ; //成功:0;失败:-1,设置errno 函数调用成功后返回r/w两个文件描述符,无需open,但要显示的close,fd[0] --> r,fd[1] --> w,向管道文件读写数据实际上是在读写内核缓冲区。下面是完成进程间通信的调用逻辑: 父进程调用pipe函数创建管道,得到两个文件描述符fd[0]、fd[1]指向管道的读写端。 父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。 3)父进程关闭管道读端,子进程关闭管道写端。父进程可以向管道中写入数据,子进程向管道中的数据读出,由于管道是利用环形缓冲区实现得,数据从写端流入管道,从读端流出,这样就实现了进程间通信。 epoll 机制:epoll是linux内核的一种可拓展的IO事件处理机制

linux内核wait_queue深入分析

℡╲_俬逩灬. 提交于 2019-12-21 05:35:25
前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。 首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。在生成进程的时候将会分配一个task_struct结构,之后将通过这个结构对进程进行管理。 task_struct结构存在于平坦地址空间内,任何时候Linux内核都可以参照所有进程的所有管理情报。内核堆栈也同样位于平坦地址空间内。(平坦的意思是"独立的连续区间") 下面是tesk_struct的主要成员: -------------------------------------------------------------------------------- struct task_struct { struct files_struct* files; //文件描述符 struct signal_struct* sig; //信号控制signal handler struct mm_struct* mm; //内存管理模块 long stat //进程状态 struct list

Android 关于休眠的几个坑点

我是研究僧i 提交于 2019-12-07 09:12:13
首先看一下Android Powermanager Class Overview,对Android的几种不同的休眠模式有个大致了解。 如果不进行特别的设置,Android会在一定时间后屏幕变暗,在屏幕变暗后一定时间内,约几分钟,CPU也会休眠,大多数的程序都会停止运行,从而节省电量。但你可以在代码中通过对Powmanager API的调用来设置不同的休眠模式。 Flag Value CPU Screen Keyboard PARTIAL_WAKE_LOCK On* Off Off SCREEN_DIM_WAKE_LOCK On Dim Off SCREEN_BRIGHT_WAKE_LOCK On Bright Off FULL_WAKE_LOCK On Bright Bright 如上表,最高等级的休眠是屏幕,键盘等,cpu都全部休眠。可以设置不同的模式,让其产生不同的休眠,比如让cpu保持运行。 设置代码如下: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); wl.acquire(); ..screen