您的位置:首页 > 移动开发 > Android开发

android从sd卡启动(MTK)(工作内容)

2016-12-13 16:54 197 查看
看这篇文章之前可能会遇到关于SELINUX权限问题可以参考这篇文章 http://blog.csdn.net/morixinguan/article/details/53353427
还可能会遇到程序中自己的程序中printf()打印不能显示,这时可以先在自己的程序的main()中加入这条语句system(“reboot”);来确定自己的服务是否正确加入其中,为什么要用reboot因为reboot在系统服务中比较靠前,加这个成功的概率高些,确定系统每次运行到rebootzhe就重启后,再来解决printf()打印消息问题,这个是关于重新定向标准输入输出的问题,可以参考这篇文章
http://blog.csdn.net/morixinguan/article/details/53469818
文章的最下面讲了如何重新定向标准输入输出

(如果没有了其他问题开始进入正题了)

  先将自己的需要启动的程序放在源码目录的/external/下(我的程序是runexec)在源码根目录下执行(可以将需要生成的文件的包加在源码下的build/target/product/xxx.mk下,这样编译源码的时候就一起编译了)

source build/envsetup.sh

lunch

20 (以eng版为例)

mmm external/runexec/

执行完后会在对应的目录下生成可执行文件(我的是runexec,具体看你的Android.mk文件中生成对应得可执行文件)

生成文件在/out/target/product/em_t8530_emmmc/system/bin/

在源码的

system/core/rootdir/init.rc中添加自己的服务

我的添加过程如下

on vtech

service CalibrateTest /system/bin/runexec /system/bin/gsensorCalibrate  noexit ignoreerr

         class core

         oneshot

on property:sys.bnd.checkexec=0     //这个属性下的所有服务都将它的启动模式
//改为disabled
//这下面的所有服务就是开机自 android
//这个logo出现及其后面相关的服务

        start nand //自己的服务放在这个on property之前

        start servicemanager //就可以启动自己的服务并判断什么条件下

        start vold //启动android自己的文件系统

        start surfaceflinger

        start zygote

        start media

        start sethdmimode

然后再init.rc中适当的位置(也就是自己需要启
a94e
动服务的位置)将自己的vtech加入,加入方式如下

trigger vtech

添加完这个之后还需要在自己的程序的main()函数中添加设置属性 

#define SET_PROPERTY

#ifdef SET_PROPERTY

static void set_property(void)

{
LOGD("set sys.bnd.checkexec=0\n");
property_set("sys.bnd.checkexec", "0");

}

#endif

在main()函数中需要的地方调用这个函数,就是系统正常启动界面,不调用这个函数就可以启动自己的服务,服务下有自己的可执行程序

(系统的不同,加入方法不同)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: