Android系统启动流程(一)解析init进程 - 简书
Android系统启动流程(一)解析init进程
作为“Android框架层”这个大系列中的第一个系列,我们首先要了解的是Android系统启动流程,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程。
1.init简介
init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属***务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析Init进程。
2.引入init进程
说到init进程,首先要提到Android系统启动流程的前几步:1.启动电源以及系统启动当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序Bootloader到RAM,然后执行。2.引导程序Bootloader引导程序是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。3.linux内核启动内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。4.init进程启动
讲到第四步就发现我们这一节要讲的init进程了。关于Android系统启动流程的所有步骤会在本系列的最后一篇做讲解。
3.init入口函数
init的入口函数为main,代码如下所示。system/core/init/init.cpp
int main(int argc, char** argv) {
if (!strcmp(basename(argv[0]), "ueventd")) {
return ueventd_main(argc, argv);
if (!strcmp(basename(argv[0]), "watchdogd")) {
return watchdogd_main(argc, argv);
add_environment("PATH", _PATH_DEFPATH);
bool is_first_stage = (argc == 1) || (strcmp(argv[1], "--second-stage") != 0);
//创建文件并挂载
if (is_first_stage) {
mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");
mkdir("/dev/pts", 0755);
mkdir("/dev/socket", 0755);
mount("devpts", "/dev/pts", "devpts", 0, NULL);
#define MAKE_STR(x) __STRING(x)
mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC));
mount("sysfs", "/sys", "sysfs", 0, NULL);
open_devnull_stdio();
klog_init();
klog_set_level(KLOG_NOTICE_LEVEL);
NOTICE("init %s started!\n", is_first_stage ? "first stage" : "second stage");
if (!is_first_stage) {
// Indicate that booting is in progress to background fw loaders, etc.
close(open("/dev/.booting", O_WRONLY | O_CREAT | O_CLOEXEC, 0000));
//初始化属性相关资源
property_init();//1
process_kernel_dt();
process_kernel_cmdline();
export_kernel_boot_props();
//启动属***务
start_property_service();//2
const BuiltinFunctionMap function_
Action::set_function_map(&function_map);
Parser& parser = Parser::GetInstance();
parser.AddSectionParser("service",std::make_unique&ServiceParser&());
parser.AddSectionParser("on", std::make_unique&ActionParser&());
parser.AddSectionParser("import", std::make_unique&ImportParser&());
//解析init.rc配置文件
parser.ParseConfig("/init.rc");//3
while (true) {
if (!waiting_for_exec) {
am.ExecuteOneCommand();
restart_processes();
int timeout = -1;
if (process_needs_restart) {
timeout = (process_needs_restart - gettime()) * 1000;
if (timeout & 0)
timeout = 0;
if (am.HasMoreCommands()) {
timeout = 0;
bootchart_sample(&timeout);
int nr = TEMP_FAILURE_RETRY(epoll_wait(epoll_fd, &ev, 1, timeout));
if (nr == -1) {
ERROR("epoll_wait failed: %s\n", strerror(errno));
} else if (nr == 1) {
((void (*)()) ev.data.ptr)();
init的main方法做了很多事情,我们只需要关注主要的几点,在注释1处调用 property_init来对属性进行初始化并在注释2处的 调用start_property_service启动属***务,关于属***务,后面会讲到。注释3处 parser.ParseConfig("/init.rc")用来解析init.rc。解析init.rc的文件为system/core/init/init_parse.cpp文件,接下来我们查看init.rc里做了什么。
init.rc是一个配置文件,内部由Android初始化语言编写(Android Init Language)编写的脚本,它主要包含五种类型语句:Action、Commands、Services、Options和Import。init.rc的配置代码如下所示。system/core/rootdir/init.rc
sysclktz 0
# Mix device-specific information into the entropy pool
copy /proc/cmdline /dev/urandom
copy /default.prop /dev/urandom
# basic network init
hostname localhost
domainname localdomain
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit 13 40 40
这里只截取了一部分代码,其中#是注释符号。on init和on boot是Action类型语句,它的格式为:
on &trigger& [&& &trigger&]*
//设置触发器
//动作触发之后要执行的命令
为了分析如何创建zygote,我们主要查看Services类型语句,它的格式如下所示:
service &name& &pathname& [ &argument& ]*
//&service的名字&&执行程序路径&&传递参数&
//option是service的修饰词,影响什么时候、如何启动services
需要注意的是在Android 7.0中对init.rc文件进行了拆分,每个服务一个rc文件。我们要分析的zygote服务的启动脚本则在init.zygoteXX.rc中定义,这里拿64位处理器为例,init.zygote64.rc的代码如下所示。system/core/rootdir/init.zygote64.rc
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart audioserver
onrestart restart cameraserver
onrestart restart media
onrestart restart netd
writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
其中service用于通知init进程创建名zygote的进程,这个zygote进程执行程序的路径为/system/bin/app_process64,后面的则是要传给app_process64的参数。class main指的是zygote的class name为main,后文会用到它。
5.解析service
接下来我们来解析service,会用到两个函数,一个是ParseSection,它会解析service的rc文件,比如上文讲到的init.zygote64.rc,ParseSection函数主要用来搭建service的架子。另一个是ParseLineSection,用于解析子项。代码如下所示。system/core/init/service.cpp
bool ServiceParser::ParseSection(const std::vector&std::string&& args,
std::string* err) {
if (args.size() & 3) {
*err = "services must have a name and a program";
const std::string& name = args[1];
if (!IsValidName(name)) {
*err = StringPrintf("invalid service name '%s'", name.c_str());
std::vector&std::string& str_args(args.begin() + 2, args.end());
service_ = std::make_unique&Service&(name, "default", str_args);//1
bool ServiceParser::ParseLineSection(const std::vector&std::string&& args,
const std::string& filename, int line,
std::string* err) const {
return service_ ? service_-&HandleLine(args, err) :
注释1处,根据参数,构造出一个service对象,它的classname为"default"。当解析完毕时会调用EndSection:
void ServiceParser::EndSection() {
if (service_) {
ServiceManager::GetInstance().AddService(std::move(service_));
接着查看AddService做了什么:
void ServiceManager::AddService(std::unique_ptr&Service& service) {
Service* old_service = FindServiceByName(service-&name());
if (old_service) {
ERROR("ignored duplicate definition of service '%s'",
service-&name().c_str());
services_.emplace_back(std::move(service));//1
注释1处的代码将service对象加入到services链表中。上面的解析过程总体来讲就是根据参数创建出service对象,然后根据选项域的内容填充service对象,最后将service对象加入到vector类型的services链表中。,
6.init启动zygote
讲完了解析service,接下来该讲init是如何启动service,在这里我们主要讲解启动zygote这个service。在zygote的启动脚本中我们得知zygote的class name为main。在init.rc有如下配置代码:system/core/rootdir/init.rc
on nonencrypted
# A/B update verifier that marks a successful boot.
exec - root -- /system/bin/update_verifier nonencrypted
class_start main
class_start late_start
其中class_start是一个COMMAND,对应的函数为do_class_start。我们知道main指的就是zygote,因此class_start main用来启动zygote。do_class_start函数在builtins.cpp中定义,如下所示。
system/core/init/builtins.cpp
static int do_class_start(const std::vector&std::string&& args) {
/* Starting a class does not start services
* which are explicitly disabled.
* be started individually.
ServiceManager::GetInstance().
ForEachServiceInClass(args[1], [] (Service* s) { s-&StartIfNotDisabled(); });
来查看StartIfNotDisabled做了什么:system/core/init/service.cpp
bool Service::StartIfNotDisabled() {
if (!(flags_ & SVC_DISABLED)) {
return Start();
flags_ |= SVC_DISABLED_START;
接着查看Start方法,如下所示。
bool Service::Start() {
flags_ &= (~(SVC_DISABLED|SVC_RESTARTING|SVC_RESET|SVC_RESTART|SVC_DISABLED_START));
time_started_ = 0;
if (flags_ & SVC_RUNNING) {//如果Service已经运行,则不启动
bool needs_console = (flags_ & SVC_CONSOLE);
if (needs_console && !have_console) {
ERROR("service '%s' requires console\n", name_.c_str());
flags_ |= SVC_DISABLED;
//判断需要启动的Service的对应的执行文件是否存在,不存在则不启动该Service
if (stat(args_[0].c_str(), &sb) == -1) {
ERROR("cannot find '%s' (%s), disabling '%s'\n",
args_[0].c_str(), strerror(errno), name_.c_str());
flags_ |= SVC_DISABLED;
pid_t pid = fork();//1.fork函数创建子进程
if (pid == 0) {//运行在子进程中
umask(077);
for (const auto& ei : envvars_) {
add_environment(ei.name.c_str(), ei.value.c_str());
for (const auto& si : sockets_) {
int socket_type = ((si.type == "stream" ? SOCK_STREAM :
(si.type == "dgram" ? SOCK_DGRAM :
SOCK_SEQPACKET)));
const char* socketcon =
!si.socketcon.empty() ? si.socketcon.c_str() : scon.c_str();
int s = create_socket(si.name.c_str(), socket_type, si.perm,
si.uid, si.gid, socketcon);
if (s &= 0) {
PublishSocket(si.name, s);
//2.通过execve执行程序
if (execve(args_[0].c_str(), (char**) &strs[0], (char**) ENV) & 0) {
ERROR("cannot execve('%s'): %s\n", args_[0].c_str(), strerror(errno));
_exit(127);
通过注释1和2的代码,我们得知在Start方法中调用fork函数来创建子进程,并在子进程中调用execve执行system/bin/app_process,这样就会进入framework/cmds/app_process/app_main.cpp的main函数,如下所示。frameworks/base/cmds/app_process/app_main.cpp
int main(int argc, char* const argv[])
if (zygote) {
runtime.start("com.android.internal.os.ZygoteInit", args, zygote);//1
} else if (className) {
runtime.start("com.android.internal.os.RuntimeInit", args, zygote);
fprintf(stderr, "Error: no class name or --zygote supplied.\n");
app_usage();
LOG_ALWAYS_FATAL("app_process: no class name or --zygote supplied.");
return 10;
从注释1处的代码可以得知调用runtime(AppRuntime)的start来启动zygote。
7.属***务
Windows平台上有一个注册表管理器,注册表的内容采用键值对的形式来记录用户、软件的一些使用信息。即使系统或者软件重启,它还是能够根据之前在注册表中的记录,进行相应的初始化工作。Android也提供了一个类似的机制,叫做属***务。在本文的开始,我们提到在init.cpp代码中和属***务相关的代码有:system/core/init/init.cpp
property_init();
start_property_service();
这两句代码用来初始化属***务配置并启动属***务。首先我们来学习服务配置的初始化和启动。
属***务初始化与启动
property_init函数具体实现的代码如下所示。system/core/init/property_service.cpp
void property_init() {
if (__system_property_area_init()) {
ERROR("Failed to initialize property area\n");
__system_property_area_init函数用来初始化属性内存区域。接下来查看start_property_service函数的具体代码:
void start_property_service() {
property_set_fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK,
, NULL);//1
if (property_set_fd == -1) {
ERROR("start_property_service socket creation failed: %s\n", strerror(errno));
listen(property_set_fd, 8);//2
register_epoll_handler(property_set_fd, handle_property_set_fd);//3
注释1处用来创建非阻塞的socket。注释2处调用listen函数对property_set_fd进行***,这样创建的socket就成为了server,也就是属***务;listen函数的第二个参数设置8意味着属***务最多可以同时为8个试图设置属性的用户提供服务。注释3处的代码将property_set_fd放入了epoll句柄中,用epoll来***property_set_fd:当property_set_fd中有数据到来时,init进程将用handle_property_set_fd函数进行处理。在linux新的内核中,epoll用来替换select,epoll最大的好处在于它不会随着***fd数目的增长而降低效率。因为内核中的select实现是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。
属***务处理请求从上文我们得知,属***务接收到客户端的请求时,会调用handle_property_set_fd函数进行处理:system/core/init/property_service.cpp
static void handle_property_set_fd()
if(memcmp(msg.name,"ctl.",4) == 0) {
if (check_control_mac_perms(msg.value, source_ctx, &cr)) {
handle_control_message((char*) msg.name + 4, (char*) msg.value);
ERROR("sys_prop: Unable to %s service ctl [%s] uid:%d gid:%d pid:%d\n",
msg.name + 4, msg.value, cr.uid, cr.gid, cr.pid);
//检查客户端进程权限
if (check_mac_perms(msg.name, source_ctx, &cr)) {//1
property_set((char*) msg.name, (char*) msg.value);//2
ERROR("sys_prop: permission denied uid:%d
name:%s\n",
cr.uid, msg.name);
freecon(source_ctx);
注释1处的代码用来检查客户端进程权限,在注释2处则调用property_set函数对属性进行修改,代码如下所示。
int property_set(const char* name, const char* value) {
int rc = property_set_impl(name, value);
if (rc == -1) {
ERROR("property_set(\"%s\", \"%s\") failed\n", name, value);
property_set函数主要调用了property_set_impl函数:
static int property_set_impl(const char* name, const char* value) {
size_t namelen = strlen(name);
size_t valuelen = strlen(value);
if (!is_legal_property_name(name, namelen)) return -1;
if (valuelen &= PROP_VALUE_MAX) return -1;
if (strcmp("selinux.reload_policy", name) == 0 && strcmp("1", value) == 0) {
if (selinux_reload_policy() != 0) {
ERROR("Failed to reload policy\n");
} else if (strcmp("selinux.restorecon_recursive", name) == 0 && valuelen & 0) {
if (restorecon_recursive(value) != 0) {
ERROR("Failed to restorecon_recursive %s\n", value);
//从属性存储空间查找该属性
prop_info* pi = (prop_info*) __system_property_find(name);
//如果属性存在
if(pi != 0) {
//如果属性以"ro."开头,则表示是只读,不能修改,直接返回
if(!strncmp(name, "ro.", 3)) return -1;
//更新属性值
__system_property_update(pi, value, valuelen);
//如果属性不存在则添加该属性
int rc = __system_property_add(name, namelen, value, valuelen);
if (rc & 0) {
/* If name starts with "net." treat as a DNS property. */
if (strncmp("net.", name, strlen("net.")) == 0)
if (strcmp("net.change", name) == 0) {
//以net.开头的属性名称更新后,需要将属性名称写入net.change中
property_set("net.change", name);
} else if (persistent_properties_loaded &&
strncmp("persist.", name, strlen("persist.")) == 0) {
* Don't write properties to disk until after we have read all default properties
* to prevent them from being overwritten by default values.
write_persistent_property(name, value);
property_changed(name, value);
property_set_impl函数主要用来对属性进行修改,并对以ro、net和persist开头的属性进行相应的处理。到这里,属***务处理请求的源码就讲到这。
8.init进程总结
讲到这,总结起来init进程主要做了三件事:1.创建文件并挂载2.初始化和启动属***务3.解析init.rc配置文件并启动zygote进程
参考资料:《深入理解Android系统》《深入理解Android卷I》
欢迎关注我的微信公众号,第一时间获得博客更新提醒,以及更多成体系的Android相关技术干货。扫一扫下方二维码即可关注:
enter image description here
Android高级工程师、《Android进阶之光》作者(6月出版)、CSDN博客专家,曾在华...往开发板烧写android时 出现了init: untracked pid 950 exited 跪求高手解救!!!
40分,无满意结帖,结帖人ycw]
往开发板烧写android时 出现了init: untracked pid 950 exited 跪求高手解救!!!
40分,无满意结帖,结帖人ycw]
发布时间: 5:37:12
编辑:www.fx114.net
本篇文章主要介绍了"往开发板烧写android时 出现了init: untracked pid 950 exited 跪求高手解救!!!
40分,无满意结帖,结帖人ycw]",主要涉及到往开发板烧写android时 出现了init: untracked pid 950 exited 跪求高手解救!!!
40分,无满意结帖,结帖人ycw]方面的内容,对于往开发板烧写android时 出现了init: untracked pid 950 exited 跪求高手解救!!!
40分,无满意结帖,结帖人ycw]感兴趣的同学可以参考一下。
request_suspend_state:&wakeup&(3-&0)&at&&(&00:00:20.1974792
init:&untracked&pid&865&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:24.5855712
init:&untracked&pid&914&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:29.6244201
init:&untracked&pid&923&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:34.6636441
init:&untracked&pid&932&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:39.7024843
init:&untracked&pid&941&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:44.7416542
init:&untracked&pid&950&exited进入系统了吗?看“request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:44.7416542
”应该进入系统了,,PID退出。&加载进程的时候错了。我做的文件系统在nand上能正常挂载启动,但是使用nfs挂载时,也出先了这个问题,sh窗口已经进去了,图形界面一直停在android上。引用&2&楼&coollu925&的回复:我做的文件系统在nand上能正常挂载启动,但是使用nfs挂载时,也出先了这个问题,sh窗口已经进去了,图形界面一直停在android上。
nfs&有权限问题。
Android&对权限的要求很严格&。。我的问题已经解决:&&&&&
device=eth0,&addr=192.168.0.61,&mask=255.255.255.0,&gw=192.168.0.1,
&&&&&host=192.168.0.61,&domain=,&nis-domain=(none),
&&&&&bootserver=0.0.0.0,&rootserver=192.168.0.113,&rootpath=
Looking&up&port&of&RPC&&on&192.168.0.113
我使用的NFS来挂载文件系统,而NFS在虚拟机上是可以挂载的,但是在其他电脑上就不能挂载,将防火墙挂掉后,其他电脑能正常挂载。开发板也能成功挂载文件系统。
$sudo&ufw&status&&&//查看防火墙状态
$sudo&&ufw&disable&&//将防火墙关掉引用&3&楼&pottichu&的回复:引用&2&楼&coollu925&的回复:
我做的文件系统在nand上能正常挂载启动,但是使用nfs挂载时,也出先了这个问题,sh窗口已经进去了,图形界面一直停在android上。
nfs&有权限问题。
Android&对权限的要求很严格&。。
我NFS权限已经设置为RW,还要什么权限要设吗?
进入系统后,shell中一直输出
request_suspend_state:&wakeup&(0-&0)&at&&(&00:48:53.355010
init:&untracked&pid&2193&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:49:20.622802
init:&untracked&pid&2267&exited,
LCD上的图像还是停在“android”就不走了……Android&对权限的管理很严格,
启动的时候会创建一些临时目录,并修改权限,
NFS&设置成&RW&权限&也不一定有用,&Android&能在&nfs&目录上创建目录,
但是不一定能修改权限。
不过你也可以在&host&端试试:
chmod&-R&./host端已经全部使用chmod&-R&777设置过了是不是每次烧写之前都要先擦除啊!在init.rc文件里设置权限,&试试.我也遇到同样的问题!
不知有没有解决的方法!楼主的这个问题解决了没有?请教下。。。还没&我怀疑是权限的问题&但试了又不行&之后我用针对我的开发板dm3730&android2.2&编译出来&烧进去不会出现这样的问题引用&4&楼&coollu925&的回复:我的问题已经解决:&&&&&
device=eth0,&addr=192.168.0.61,&mask=255.255.255.0,&gw=192.168.0.1,
&&&&&host=192.168.0.61,&domain=,&nis-domain=(none),
&&&&&bootserver=0.0.0.0,&rootserver=192.168.0.113,&rootpath=
我的防火墙一直都是&inactive的,但是也是这个问题一直困扰,有没有其他解决办法。。楼主解决了没,分享下,谢谢哦引用&9&楼&wenxy1&的回复:在init.rc文件里设置权限,&试试.
怎么设置啊,谢谢我也出现这问题,防火墙是关掉的
*****************start&init&*****************
init:&cannot&open&'/initlogo.rle'
init&(49):&/proc/1/oom_adj&is&deprecated,&please&use&/proc/1/oom_score_adj&inste
init:&cannot&find&'/system/etc/init.OK6410.sh',&disabling&'OK6410-setup'
/system/bin/sh:&can't&access&&job&control&turned&off
/&enabling&adb
s3c-nand:&1&bit(s)&error&detected,&corrected&successfully
warning:&`zygote'&uses&32-bit&capabilities&(legacy&support&in&use)
request_suspend_state:&wakeup&(3-&0)&at&&(&15:08:21.2160228
init:&untracked&pid&58&exited
init:&untracked&pid&62&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&15:08:36.8465413
init:&untracked&pid&92&exited
init:&untracked&pid&91&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&15:08:52.3476466
init:&untracked&pid&112&exited
init:&untracked&pid&113&exited楼主你的问题解决了没啊,我先也是遇到这问题,不知道怎么办,跪求你能帮帮我,我是用sd卡启动的,这个文件系统在人家一样的板子上能跑起来,但在我的板子就和你一样的错误,不知道怎么解决,能帮我的话,引用&5&楼&coollu925&的回复:引用&3&楼&pottichu&的回复:
引用&2&楼&coollu925&的回复:
我做的文件系统在nand上能正常挂载启动,但是使用nfs挂载时,也出先了这个问题,sh窗口已经进去了,图形界面一直停在android上。
nfs&有权限问题。
Android&对权限的要求很严格&。。
我NFS权限已经设置为RW,还要什么权限要设吗?
进入系统后,shell中一直……
请问楼主这个问题有解决没?.....解决了吗,解决了就分享下哦!好期待引用楼主&ycw&的回复:request_suspend_state:&wakeup&(3-&0)&at&&(&00:00:20.1974792
init:&untracked&pid&865&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:24.5855……
可以在/etc/exports&中配置nfs服务,增加no_root_squash,可以解决此问题!在/etc/exports中配置nfs服务,增加no_root_squash,
penghuo兄,你这个具体是怎么做的啊,能说详细点吗,小弟拜谢了!引用&21&楼&yhl2007kaka&的回复:在/etc/exports中配置nfs服务,增加no_root_squash,
penghuo兄,你这个具体是怎么做的啊,能说详细点吗,小弟拜谢了!
yhl2007kaka太客气了,具体步骤如下:
1&编辑/etc/exports文件
2&添加/nfs_root&*(rw,sync,no_root_squash)
其中nfs_root是系统中nfs根目录路径,
增加no_root_squash,允许nfs客户端用root权限执行NFS目录。也就是允许init.rc中配置android文件目录的操作生效编辑/etc/exports文件是在烧写android到开发板之后,然后在终端里面进行修改吗?因为我在rootfs_dir里面没有发现/etc/exports。然后exports是个什么文件啊?可以gedit打开然后添加你所说的内容吗?麻烦讲解一下啊,呵呵。刚修改了exports文件,在最后一行加了/nfs_root&*(rw,sync,no_root_squash)
但是启动android系统后还是卡住了,不停的输出:
warning:&`zygote'&uses&32-bit&capabilities&(legacy&support&in&use)
request_suspend_state:&wakeup&(3-&0)&at&&(&10:08:46.1608760
init:&untracked&pid&59&exited
init:&untracked&pid&63&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:01.895042
init:&untracked&pid&101&exited
init:&untracked&pid&102&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:17.620795
init:&untracked&pid&121&exited
init:&untracked&pid&122&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:33.531782
init:&untracked&pid&142&exited
init:&untracked&pid&143&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:49.360828
屏幕上面除了最左上角一个下划线意外啥都没有,卡在这里了,不知道怎么办了。我这边是这样解决的:在/system/lib/hw/目录下添加gralloc.default.so文件,重新打包fs即可init.rc里面
mount&rootfs&rootfs&/&ro&remount
mount&rootfs&rootfs&/&rw&remount感谢26楼的兄弟顶礼膜拜各位兄弟了!兄弟们:我也遇到这个问题了……怎么解决?????通过nfs挂载文件系统没用问题,能正常启动。&但将文件系统烧写到nandflash&里出现了这种情况怎么解决
-------------------------------------------------------------------------&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
VFS:&Mounted&root&(yaffs&filesystem)&on&device&31:3.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
VFS:&Mounted&root&(yaffs&filesystem)&on&device&31:3.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&6&Freeing&init&memory:&164K&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Freeing&init&memory:&164K&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&3&init:&cannot&open&'/initlogo.rle'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&cannot&open&'/initlogo.rle'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&7&save&exit:&isCheckpointed&1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&3&init:&cannot&find&'/system/etc/install-recovery.sh',&disabling&'flash_recovery'&&&&&&&&&&&&&&&&&&&&
init:&cannot&find&'/system/etc/install-recovery.sh',&disabling&'flash_recovery'&&&&&&&&&&&&&&&&&&&&&&&
sh:&can't&access&&job&control&turned&off&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#&&6&warning:&`rild'&uses&32-bit&capabilities&(legacy&support&in&use)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
warning:&`rild'&uses&32-bit&capabilities&(legacy&support&in&use)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&6&request_suspend_state:&wakeup&(3-&0)&at&&(&00:00:46.&UTC)&&&&&&&&&&&&
request_suspend_state:&wakeup&(3-&0)&at&&(&00:00:46.&UTC)&&&&&&&&&&&&&&&
&3&init:&untracked&pid&1991&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&untracked&pid&1991&exited&&&&&&[&]&init:&untracked&pid&18132&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18138&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18140&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18144&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18164&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18169&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18184&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18188&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18208&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18214&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18218&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18238&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18243&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18258&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18262&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18282&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[&]&init:&untracked&pid&18286&exited&
我这里一直出现这个问题怎么解决啊……而且HDMI输出全是黑屏……我是用22#的方法解决了,非常感谢!
修改完nfs配置文件后最好再重启一下nfs服务:
使用如下命令重启一下服务
#sudo&/etc/init.d/portmap&restart
#sudo&/etc/init.d/nfs-kernel-server&restart各位大哥好,我也在移植android4.0文件系统到开发板时这样的问题,
把ubi.img&烧写到开发板,开启启动时
UBIFS:&mounted&UBI&device&0,&volume&0,&name"rootfs"&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBIFS:&file&system&size:&&&&bytes&(244062&KiB,&238&MiB,&1937&LEBs)&&&&&
UBIFS:&journal&size:&&&&&&&9033728&bytes&(8822&KiB,&8&MiB,&71&LEBs)&&&&&&&&&&&&&
UBIFS:&media&format:&&&&&&&w4/r0&(latest&is&w4/r0)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBIFS:&default&compressor:&lzo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBIFS:&reserved&for&root:&&0&bytes&(0&KiB)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
VFS:&Mounted&root&(ubifs&filesystem)&on&device&0:12.&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Freeing&init&memory:&160K&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Warning:&unable&to&open&an&initial&console.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&cannot&open&'/initlogo.rle'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&cannot&find&'/system/etc/install-recovery.sh',&disabling&'flash_recovery'&
$&warning:&`rild'&uses&32-bit&capabilities&(legacy&support&in&use)&&&&&&&&&&&&&&
enabling&adb&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
adb_open&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&untracked&pid&897&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&untracked&pid&958&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&untracked&pid&974&exited&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
init:&untracked&pid&980&exited
请问如何解决?&请多多指教26楼和27楼的兄弟,修改了init.rc,可还是起不来,能给我说说方法吗?(我QQ)引用&24&楼&yhl2007kaka&的回复:刚修改了exports文件,在最后一行加了/nfs_root&*(rw,sync,no_root_squash)
但是启动android系统后还是卡住了,不停的输出:
warning:&`zygote'&uses&32-bit&capabilities&(legacy&support&in&use)
request_suspend_state:&wakeup&(3-&0)&at&&(&10:08:46.1608760
init:&untracked&pid&59&exited
init:&untracked&pid&63&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:01.895042
init:&untracked&pid&101&exited
init:&untracked&pid&102&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:17.620795
init:&untracked&pid&121&exited
init:&untracked&pid&122&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:33.531782
init:&untracked&pid&142&exited
init:&untracked&pid&143&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&10:09:49.360828
屏幕上面除了最左上角一个下划线意外啥都没有,卡在这里了,不知道怎么办了。
&这位哥们,请问你这个问题最后是怎么解决的呢?为嘛你们解决了问题都不贴上解决办法啊!如果是烧到flash中出现此问题的话,
1).检查打包成ubifs.img前的文件系统权限,全部改成777,sudo&chmod&777&./rootfs&-R&
2).mkfs.ubifs&-r&/rfs/rootfs/&-F&-m&2048&-e&129024&-c&3993&-o&./ubifs.img
注意上面一条命令中的参数特别-c,是你的用于ubi卷的flash大小(3=),我的flash共512M,留给ubi文件系统的500M右右。我也遇到了同样的问题,跪求大家的解决方法!!
init:&cannot&find&'/system/etc/install-recovery.sh',&disabling&'flash_recovery'
init:&cannot&find&'/system/etc/init.godbox.sh',&disabling&'godbox-setup'
:/&warning:&`cameraserver'&uses&32-bit&capabilities&(legacy&support&in&use)
request_suspend_state:&wakeup&(3-&0)&at&&(&00:00:13.&UTC)
init:&untracked&pid&954&exited
init:&untracked&pid&960&exited
init:&untracked&pid&961&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:15.&UTC)
init:&untracked&pid&1094&exited
init:&untracked&pid&1095&exited
init:&untracked&pid&1096&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:20.&UTC)
init:&untracked&pid&1122&exited
init:&untracked&pid&1123&exited
init:&untracked&pid&1124&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:24.&UTC)
init:&untracked&pid&1152&exited
init:&untracked&pid&1153&exited
init:&untracked&pid&1154&exited
request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:30.&UTC)
init:&untracked&pid&1181&exited
init:&untracked&pid&1182&exited
init:&untracked&pid&1183&exited
:/&request_suspend_state:&wakeup&(0-&0)&at&&(&00:00:35.&UTC)
init:&untracked&pid&1210&exited
init:&untracked&pid&1211&exited
init:&untracked&pid&1212&exited
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接: