android的init实例

这段时间没事,主要是主管太垃圾,没有合理的安排下属,导致我很闲,刚好,我利用这段时间可以好好学习下android。

今天看了android的init这部分,我自己想能不能自己写个守护进程在andorid启动后就运行起来,这样可以更深刻了解android的init的相关知识,只是看书印象不深刻。

总结了下,大致分成两步完成:

1)编写守护进程相关code,写Android.mk,编译android code,生成守护进程的可执行文件。

2)修改init.rc的相关内容,在init.rc中调用守护进程。

第一步:

守护进程准备写个隔60s记录写文件的进程,这个code主要从网上其它地方copy过来的,因为这里主要是想说明init中如何调用可执行文件,对代码不是很关心。

/*

* init_daemon.cpp

*/

#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

void init_daemon(void)
{
   int pid;
   int i;
   if(pid=fork())
       exit(0);        //是父进程,结束父进程
   else if(pid< 0)
       exit(1);        //fork失败,退出
   //是第一子进程,后台继续执行
   setsid();           //第一子进程成为新的会话组长和进程组长
   //并与控制终端分离
   if(pid=fork())
       exit(0);        //是第一子进程,结束第一子进程
   else if(pid< 0)
       exit(1);        //fork失败,退出
   //是第二子进程,继续
   //第二子进程不再是会话组长
   for(i=0;i< NOFILE;++i)  //关闭打开的文件描述符
       close(i);

chdir("/");      //改变工作目录到/
   umask(0);           //重设文件创建掩模
   return;
}

/*

* mark_log.cpp

*/

#include <stdio.h>
#include <time.h>

void init_daemon(void);//守护进程初始化函数

int main(int nargs,char *args)
{
   FILE *fp;
   time_t t;
   init_daemon();//初始化为Daemon

while(1)//每隔一分钟向test.log报告运行状态
   {
       sleep(60);//睡眠一分钟
       if((fp=fopen("/test.log","a")) >=0){
           t=time(0);
           fprintf(fp,"Im here at %sn",asctime(localtime(&t)) );
           fclose(fp);
       }
   }
   return 0;
}

/*

* Android.mk

*/

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
init_deamon.cpp \
mark_log.cpp

LOCAL_MODULE:= marklog

include $(BUILD_EXECUTABLE)

上述三个文件都放在framework文件夹下的marklog文件夹下(marklog是新建的文件夹)。

第二步:修改init.rc

在init.rc的最后添加

service marklog /system/bin/marklog
   class core
   disabled
   oneshot

表示marklog为一个service,然后在适当地方启动这个service,我是在on post-fs-data section中添加

“start marklog”

当然修改init.rc的方法很多,不是仅限于上面。

然后编译android,生成kernel和rootfs,重新烧kernel和rootfs,android起来了ps -ef就可以看到有marklog进程,并且每隔一分钟会在test.log中记录信息。

android的init实例

时间: 2024-12-23 17:33:12

android的init实例的相关文章

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

[转]Android:布局实例之模仿QQ登录界面

Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布为 4.分析样式选择器 下拉箭头2种样式:点击和默认状态 文本框2种样式:聚焦和默认状态 复选框3种样式:选择.不选择和鼠标点着不放 左下角按钮2种样式:点击和默认 登录按钮2样式:点击和默认 ============================================帖代码===========

android TextView Input 实例

<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_heig

android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http://www.tompda.com/c/article/11778/ 而实际上使用android平台对widget开发的支持,桌面便签类软件是很易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 1.MyNote的终于实现效果 为了提起大家阅读本文的兴趣,先

Android:布局实例之模仿京东登录界面

预览图及布局结构参考: 布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="matc

Android Widget 开发实例:桌面便签程序的实现详解和源码

桌面便签软件是Android上常用软件的一种,比如比较早的Sticky Note,就曾非常流行,而实际上使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 同时本程序提供完整的工程源码下载 免费下载地址在 http://linux.linuxidc.com/ 用户名与密码都是www.linuxidc.com 具体下载目录在 /pub/Android源码集锦/2011年/10月/An

android 用户界面教程实例汇总

1.android用户界面之WebView教程实例汇总http://www.apkbus.com/android-51718-1-1.html 2.android用户界面之Notification教程实例汇总http://www.apkbus.com/android-51696-1-1.html 3.android用户界面之Widget教程实例汇总http://www.apkbus.com/android-51674-1-1.html 4.android用户界面之Gallery教程实例汇总htt

Android进阶(二十三)Android开发过程之实例讲解

Android开发过程之实例讲解 前言 回过头来审视之前做过的Android项目,发觉自己重新开发时忽然间不知所措了,间隔了太长时间没有开发导致自己的Android技能知识急剧下降.温故而知新. 废话少说,进入正题~ 下面主要以自己之前开发过的Android小项目为例,探讨Android开发基本流程,以及其中所涉及到的原理. 项目名称为"我查查",主要的实现功能是查询.添加商品评价,分享购物体验. 主要界面如下: 图1 主功能界面 图2 查看商品信息 图3 添加新评论 图4 扫码操作

Android的init过程详解(一) 转

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An