嵌入式linux 内核关机函数实现

arch/arm/kernel/process.c

实现pm_power_off = 关机函数

参考

board-omap3touchbook.c 文件中

pm_power_off = omap3_touchbook_poweroff;

static void omap3_touchbook_poweroff(void)
{
    int pwr_off = TB_KILL_POWER_GPIO;
    if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "DVI reset") < 0)
        printk(KERN_ERR "Unable to get kill power GPIO\n");
}

https://lkml.org/lkml/2012/8/17/111

+static struct i2c_client *tps65910_i2c_client;
+static void tps65910_power_off(void)
+{
+   struct tps65910 *tps65910;
+
+   tps65910 = dev_get_drvdata(&tps65910_i2c_client->dev);
+
+   if (tps65910_reg_set_bits(tps65910, TPS65910_DEVCTRL,
+           DEVCTRL_PWR_OFF_MASK) < 0)
+       return;
+
+   tps65910_reg_clear_bits(tps65910, TPS65910_DEVCTRL,
+           DEVCTRL_DEV_ON_MASK);
+}
+
 static __devinit int tps65910_i2c_probe(struct i2c_client *i2c,
                    const struct i2c_device_id *id)
 {
@@ -267,6 +284,11 @@ static __devinit int tps65910_i2c_probe(struct i2c_client *i2c,
    tps65910_ck32k_init(tps65910, pmic_plat_data);
    tps65910_sleepinit(tps65910, pmic_plat_data);

+   tps65910_i2c_client = i2c;
+
+   if (pmic_plat_data->pm_off && !pm_power_off)
+       pm_power_off = tps65910_power_off;
+
    return ret;
 }

http://blog.csdn.net/linux_devices_driver/article/details/8666059

kernel power off流程分析

嵌入式linux 内核关机函数实现

时间: 2024-10-23 03:18:28

嵌入式linux 内核关机函数实现的相关文章

嵌入式Linux内核tasklet机制(附实测代码)

Linux 中断编程分为中断顶半部,中断底半部 中断顶半部: 做紧急,耗时短的事情,同时还启动中断底半部.中断底半部: 做耗时的事件,这个事件在执行过程可以被中断.中断底半部实现方法: tasklet,工作队列,软中断等机制实现.实际上是把耗时事件推后执行,不在中断程序执行. 什么是tasklet? Tasklet 一词的原意是"小片任务"的意思,这里是指一小段可执行的代码,且通常以函数的形式出现.这个 tasklet 绑定的函数在一个时刻只能在一个 CPU 上运行 ,tasklet(

维护嵌入式 Linux 内核——So Easy

安全漏洞只发生在 Windows 上的好日子正在快速过去.恶意软件黑客和拒绝服务老手们正在越来越多地瞄准过时的嵌入式 Linux 设备,因此在 10 月的欧洲嵌入式 Linux 会议(ELCE)上的几个演讲的主题就与修复 Linux 安全漏洞相关. 最值得去听的讲演之一是 Pengutronix 内核黑客 Jan Lübbe 的<长期维护或管理(或免管理)嵌入式系统 10 年以上>.在总结嵌入式 Linux 中不断增长的安全威胁后,Lübbe 制定了一项计划,以确保长期设备的安全和功能完整.

嵌入式Linux内核制作【转】

本文转载自:http://blog.csdn.net/coding__madman/article/details/51291316 1. Linux体系结构 从整体上来分,linux可以分为User Space和Kernel Space构成,即用户空间和内核空间 用户空间:应用程序 C库 系统配置文件等 内核空间:在内存中,用户一般不能直接接触到(系统调用接口,体系结构相关的一些代码等等) 这样划分的的好处: 其实内核空间与用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用

嵌入式Linux内核制作

一.Linux内核简介 Linux系统架构分为内核空间和用户空间.它们之间切换条件:1.系统调用 2.硬件中断. 内核架构:1.系统调用接口 2.进程管理块 3.内存管理 4.体系结构相关代码 4.虚拟文件系统 5.网络栈 6.设备驱动 二.制作Linux内核 1.修改配置文件 make config --文本模式交互式的配置 make menuconfig --基于文本模式的菜单型配置(直观.简单.高效.推荐) 配置文件的选择:1.默认   2.已有的配置文件,Linux系统下的/boot/目

linux内核---嵌入式linux内核的五个子系统

转自:https://blog.csdn.net/qq_27522735/article/details/63251168 Linux内核主要由进程调度(SCHED).内存管理(MM).虚拟文件系统(VFS).网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示. 图1 Linux内核的组成部分与关系 1.进程调度 进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中"微观串行,宏观并行"地执行.进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为

Linux内核d_path函数应用的经验总结

问题背景 一个内核模块中,需要通过d_path接口获取文件的路径,然后与目标文件白名单做匹配. 在生产环境中,获取的文件是存在的,但是与文件白名单中的文件总是匹配失败. 问题定位: 通过打印d_path返回的字符串,发现获得的路径后面多了一个" (deleted)"字符串,在做完全匹配时不通过. 看了d_path函数说明:如果entry被删除了,会添加" (deleted)"字符串. * Convert a dentry into an ASCII path nam

7、嵌入式linux内核制作

前面我们已经制作了uboot,接下来是制作kernel. 首先进入内核源码,执行make distclean.清除先前编译产生的文件. 注意配置内核的时候多了一个ARCH=arm的条件. 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会去找一个配置好的配置文件: 把config-file拷贝到我们的内核代码目录下: 然后把config-file拷贝成.config. 重新进入配置界面,发现配置生效了. 接下来就是内核的编译: 在编译的过程中会出现这样的一个错误: 这

【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】

本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加内核启动Hello World 任务: 内核启动的时候加载Hello驱动,并打印出Hello World 步骤: (1)在drivers目录下新建hello文件夹,在里面实现相应的hello.c.Makefile.Kconfig (2)修改上一级(Linux-3.4.2/drivers下)的Make

3.4.嵌入式linux内核制作

? ? ? 前面我们已经制作了uboot,接下来是制作kernel. 首先进入内核源码,执行make distclean.清除先前编译产生的文件. 注意配置内核的时候多了一个ARCH=arm的条件. 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会去找一个配置好的配置文件: 把config-file拷贝到我们的内核代码目录下: 然后把config-file拷贝成.config. 重新进入配置界面,发现配置生效了. 接下来就是内核的编译: ? ? ? 在编译的过程中会