android init.rc修改问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android init.rc修改问题相关的知识,希望对你有一定的参考价值。

现在需要实现这两个步骤
1.The library is ready. but your usb-file system is almost certainly not mounted yet.
In your init.rc of the RFS add the following command to mount your USBFS.

mount usbfs none /proc/bus/usb -o devmode=0666

Add the line somewhere below the “on boot” event.

2.Add the follow command to add a dir.
mkdir /data/pcsc 01777 root root

root了之后通过re管理器可以修改init.rc,但是每当重启都会被还原,请问大神们这个问题应该如何解决

在启动的时候,程序中主动修改init.rc 试试,这其中好像涉及到权限的控制追问

现在问题是我的程序依赖这两个条指令才能启动,如果开机时无法执行这两条指令的话,我程序就运行不了,而且那程序不是我写的,我改不了

追答

1.如果你的程序运行的环境必须是能够执行这两条指令,那么在你的程序刚启动的时候,你就应该有判断能否执行的处理(就像你要下载文件,如果想下载的路径都不存在,怎么下载,肯定会有异常,其实你说的不是你的程序运行不起来,是程序运行的时候,崩溃了)
2.我不知道是否root了之后,修改了init.rc,能不能永远的改成你程序运行的环境
3.这只是我个人的想法,android这方面的经验还不足,仅供你的参考,祝你顺利哈

参考技术A root了之后通过re管理器可以修改init.rc???init.rc可以直接改么?在把内核解包了改进去就不会变啊

Android 4.4 Init进程分析二:init.rc文件的解析

国际惯例,我们先看一下源码:

http://androidxref.com/4.4_r1/xref/system/core/init/init.c#1039

1 init_parse_config_file("/init.rc");

在init进程的main()函数里,会调用init_parse_config_file()方法解析init.rc脚本,注意这里传递的参数是根目录下的 "/init.rc"文件路径。

 

 

init_parse_config_file()方法定义如下:

http://androidxref.com/4.4_r1/xref/system/core/init/init_parser.c#404

 1 int init_parse_config_file(const char *fn)
 2 {
 3     char *data;
 4     data = read_file(fn, 0); //读取/init.rc文件内容到内存,并返回起始地址存入data
 5     if (!data) return -1;
 6 
 7     parse_config(fn, data); //解析读入的字符内容
 8     DUMP();
 9     return 0;
10 }

read_file()方法的定义非常简单,作用就是把指定的文件以字符的形式读入到内存中,并返回起始地址及读入的数据大小。

其源码如下:

http://androidxref.com/4.4_r1/xref/system/core/init/util.c#142

 1 /* reads a file, making sure it is terminated with 
  */
 2 
 3 //该方法接收两个参数:
 4 // fn: 要读取的文件路径
 5 // _sz:unsigned int类型的指针,用于返回读入的字符个数
 6 // 该方法返回读取的字符内容的起始地址,如果读取失败则返回 0
 7 
 8 void *read_file(const char *fn, unsigned *_sz)
 9 {
10     char *data;
11     int sz;
12     int fd;
13     struct stat sb;
14 
15     data = 0;
16     fd = open(fn, O_RDONLY); //以只读的方式打开文件
17     if(fd < 0) return 0;
18 
19     // for security reasons, disallow world-writable
20     // or group-writable files
21     if (fstat(fd, &sb) < 0) {
22         ERROR("fstat failed for ‘%s‘
", fn);
23         goto oops;
24     }
25     if ((sb.st_mode & (S_IWGRP | S_IWOTH)) != 0) {
26         ERROR("skipping insecure file ‘%s‘
", fn);
27         goto oops;
28     }
29 
30     sz = lseek(fd, 0, SEEK_END); // 获取文件长度,有多少个字节
31     if(sz < 0) goto oops;
32 
33     if(lseek(fd, 0, SEEK_SET) != 0) goto oops; // 定位到文件开头
34 
35     data = (char*) malloc(sz + 2); //分配存储空间
36     if(data == 0) goto oops;
37 
38     if(read(fd, data, sz) != sz) goto oops; // 读取文件内容
39     close(fd); // 关闭文件
40     data[sz] = 
; // 设置结尾字符
41     data[sz+1] = 0;
42     if(_sz) *_sz = sz;
43     return data;
44 
45 oops:
46     close(fd);
47     if(data != 0) free(data);
48     return 0;
49 }

将文件的内容读入内存后,接下来就可以进行解析了,调用parse_config()方法来解析init.rc的内容。

http://androidxref.com/4.4_r1/xref/system/core/init/init_parser.c#347

以上是关于android init.rc修改问题的主要内容,如果未能解决你的问题,请参考以下文章

Android6.0 init.rc中创建符号链接失败问题

想要修改init.rc文件怎么做呢?

mtk平台修改init.rc后如何快速编译啊

如何修改init.rc开机启动脚本

adb push init.rc /

Android源码分析(十七)----init.rc文件添加脚本代码