完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 kjfd 于 2015-9-21 09:52 编辑 这一期呢我们来学习一下Android的启动脚本,也就是init.rc,那么我们首先来看一下我们的init.rc中都包含有哪些内容 我们来看一下init.rc中都包含了哪些内容,先打开init.rc 首先是录入了一些其他的脚本,有我们的init.environ.rc 、init.u***.rc等,剩下的就是我们脚本真正所做的内容了,首先是有一个on early-init ,在后面是一些命令,有write命令、setcon命令、start命令等,后面呢还有一些service , 我们的service其实就是当我们启动Android时的一些后台服务,那么接下来我们来看一下import Import就是导入一些其他的脚本,在上面那幅图片中我们就可以看到,import导入了一些其他的脚本。接下来我们使用grep命令来看一下init.environ.rc是在哪里定义的 我们可以看到我们的init.environ.rc是动态生成的,我们来打开这个文件 可以看到他是由我们的init.environ.rc.in经过一些命令生成的,那么我们来看一下init.environ.rc.in这个文件 他呢主要是设置一些我们的环境变量,还定义了一些其他的环境变量 那我们再来看一下init.u***.rc 他在这里主要是做一些相关命令,改一下我们第一个文件的用户和用户组,并且修改一些权限,这就是init.u***.rc所做的事情 那我们再来看一下我们的init.${ro.hardware}.rc , 也就是我们当前应用平台所对应的rc ,他在device/softwinner/fiber-a31stm/init.sun6i.rc 目录下,我们来看一下他所做的事情 首先是创建一些目录,然后设置了一些环境变量,创建一些软连接,插入一些设备的驱动,这个驱动是在我们系统启动之后,在脚本中动态插入的,这些动态插入的驱动只和我们的硬件平台相关,也就是和我们的一些外设是相关的,所以说他在这里插入的驱动,是在脚本中自动插入的,如果说我们换了一外设,那我们要去修改相应的驱动,这就是我们init.${ro.hardware}.rc所做的事情 我们再来看一下init.trace.rc ,他是在我们的system/core/rootdir/init.trace.rc 目录下,我们打开它来看一下, 他在这里所做的就是修改一些文件的权限,这就是他所做的事情了。 那么接下来我们来看一下on 这个选项的具体含义, 我们的on 选项可以分成下面几个小选项,on early-init 、on early-boot 、on boot 、on init , 这四种方式下面都会跟一些相关的命令,在我们的init.c文件中会解析这个相关的on选项, 然后根据后边设置的这些字段来定义后面这些命令所执行的时间。On语法还有另外一种用法,就是on trigger事件,其中这个trigger是我们的一个条件变量,比如我们设置的环境变量,比如我们设置的环境变量是真的话,那么我们就会执行下面的命令,这个就是on字段所做的事情。 那么接下来我们来看一下我们的services这个字段 Services字段后面会加一些参数,其中name这个参数呢是指我们系统服务的名称,path参数他是我们可执行文件的一个路径,arg参数就是我们path后面所跟的一个启动参数,我们的services是一种系统的服务,这种服务呢,既可以是启动一次的,也可是被我们init进程守护的,在我们services后面呢,我们也可以加一些相关的参数,比如user xxx ,也就是代表这个服务的用户是xxx,后面加一个group xxx ,代表我们的用户组是xxx ,后面加一个oneshot/disable ,分别代表我们只启动一次,或者说我们这个服务是关闭的。 下面我们来看一下我们的netd Netd是我们一个服务的名字,我们netd所对应的可执行文件是、system/bin/netd ,它属于我们的main ,他在这里会建立一些相应的socket,这个是可以被我们init进程所守护的,我们切到我们的adb下,我们来看一下我们的netd他的进程号是1263,现在我们来把这个进程杀掉 kill 1263 然后我们在ps ,就没有我们的netd进程了,我们在通过ps :grep “netd”,就会发现netd又启了一个相关服务,这个服务进程号是5006,和我们刚才那个是 不一样的,这说明我们杀掉一个守护的进程之后,我们的init会把我们所守护的进程重新启动。 那么我们使用stop netd 来把进程给stop掉我们在使用ps :grep “netd”就会发现当我们使用stop时,我们的netd就不会重启了,现在我们只有使用start netd才能重新启动,而这所有的相关事情,都是由我们的init进程来做的 下面我们来看一下我们的cmd,我们的cmd包括写文件,启动服务,插入我们的驱动,建立一些软连接,修改我们的权限,修改我们的用户,以及用户组,然后挂载一些分区和目录, 还有就是setprop 我们所有的一些环境变量都是在我们的启动脚本中事先设置好的,而这个设置的字段就是我们的setprop,我们可以在adb下看一下我们设置的net.tcp.buffersize.wifi ,是不是和我们设置的值一样 我们可以看到和我们设置的环境变量是一样的,而这个设置的过程也是由我们的启动脚本所定义的,但是是由我们init进程所设置的,这就是我们cmd所做的事情 我们init脚本主要分为四种类型,第一个是我们的import导入其他的脚本,第二个是我们的on字段,他用来设置我们某一些操作所用的时间,通过early-init 、init 等字段来设置,还有就是使用我们的on trigger变量,来决定我们的操作是否执行,第三种就是我们的services, Services是启动我们的一些服务,这些服务是可以被我们init进程所守护的,最后就是我们所执行的一些操作,比如:write等操作,这些就是我们init脚本的一些基本语法了。 ` |
|
|
|
787 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
888 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
608 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
905 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
821 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:39 , Processed in 0.619963 second(s), Total 69, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号