User版本开机异常/无法开机,如何抓取log
时间:10-02
整理:3721RD
点击:
首先需要确认开机异常发生在哪个阶段。
1. 没有任何LOGO 显示; 在 LK 或者以前就出现异常,此时直接拉出UART 抓取uart log 即可。 因默认uart log, 到进入kernel 后才关闭,所以case 1, 只需要直接拉 出uart, 接入即可抓到LOG。
2. 只显示第一个LOGO:
可能卡在LK 或者kenrel 启动过程中,此时需要拉出uart ,并且打开kernel 的uart log.
参考[FAQ: 如何在User版本开启串口(Uart),开启输入控制台,抓取上层Log].
3. 显示第二个Loading LOGO:
卡在init 进程以后,到开机动画之前,此时需要拉出uart, 并且抓取android 上层main log.
4. 进入开机动画及以后:
卡在android 上层启动过程中,此时需要抓取android 上层main log(必要),以及uart log(不是必须). 针对Case 3, 4, 可以按照下面的流程 执行:
(1).
(1.1).如果是JB 4.1 以及以后版本,直接修改函数should_drop_privileges() 函数, 清空这个函数,直接返回 0 即可。返回0 即开启root 权 限。
static init should_drop_privileges(){
#ifndef ALLOW_ADBD_ROOT
return 0; //mtk71029 Update for release root role.
#else
……….
}
(1.2).如果是JB 4.1 以前版本,直接修改函数adb_main 函数,在
/* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_struct header;
struct __user_cap_data_struct cap; if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
exit(1);
}
在这段代码前加一行: secure = 0; //mtk71029 add for root forever. /* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_struct header;
struct __user_cap_data_struct cap; if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
exit(1);
}
(1.3) Uart 控制台的开启以及adb debug 默认启动,决定于System property ro.debuggable,默认如果ro.debuggable=1 则开启(Eng 版本),User 版本 ro.debuggable=0 则关闭。
想在User 版本中打开,需要更新alps/mediatek/config/mt65xx/init.rc, 在init.rc 的触发器代码:
on property:ro.debuggable=1
start console
后面增加:
假如是android 4.0 以及以后的版本:
on property:ro.debuggable=0
start console
setprop persist.sys.usb.config mass_storage,adb
假如是android 4.0 以前的版本:
on property:ro.debuggable=0
start console
setprop persist.service.adb.enable 1
(2). 编译对应手机user 版本的bootimage, 如 MT6577v2_phone 即为你的project name 时:
./mk -o=TARGET_BUILD_VARIant=user mt6577v2_phone bootimage new (3). 通过FlashTool 只刷这个新编译的bootimage
(4). 插入USB adb 就默认以root 权限连接上,插入UART(UART 已经拉出), 输入aee -k 6 即可看到kernel log, 以及输入. adb 也默认已经开启。
1. 没有任何LOGO 显示; 在 LK 或者以前就出现异常,此时直接拉出UART 抓取uart log 即可。 因默认uart log, 到进入kernel 后才关闭,所以case 1, 只需要直接拉 出uart, 接入即可抓到LOG。
2. 只显示第一个LOGO:
可能卡在LK 或者kenrel 启动过程中,此时需要拉出uart ,并且打开kernel 的uart log.
参考[FAQ: 如何在User版本开启串口(Uart),开启输入控制台,抓取上层Log].
3. 显示第二个Loading LOGO:
卡在init 进程以后,到开机动画之前,此时需要拉出uart, 并且抓取android 上层main log.
4. 进入开机动画及以后:
卡在android 上层启动过程中,此时需要抓取android 上层main log(必要),以及uart log(不是必须). 针对Case 3, 4, 可以按照下面的流程 执行:
(1).
(1.1).如果是JB 4.1 以及以后版本,直接修改函数should_drop_privileges() 函数, 清空这个函数,直接返回 0 即可。返回0 即开启root 权 限。
static init should_drop_privileges(){
#ifndef ALLOW_ADBD_ROOT
return 0; //mtk71029 Update for release root role.
#else
……….
}
(1.2).如果是JB 4.1 以前版本,直接修改函数adb_main 函数,在
/* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_struct header;
struct __user_cap_data_struct cap; if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
exit(1);
}
在这段代码前加一行: secure = 0; //mtk71029 add for root forever. /* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_struct header;
struct __user_cap_data_struct cap; if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
exit(1);
}
(1.3) Uart 控制台的开启以及adb debug 默认启动,决定于System property ro.debuggable,默认如果ro.debuggable=1 则开启(Eng 版本),User 版本 ro.debuggable=0 则关闭。
想在User 版本中打开,需要更新alps/mediatek/config/mt65xx/init.rc, 在init.rc 的触发器代码:
on property:ro.debuggable=1
start console
后面增加:
假如是android 4.0 以及以后的版本:
on property:ro.debuggable=0
start console
setprop persist.sys.usb.config mass_storage,adb
假如是android 4.0 以前的版本:
on property:ro.debuggable=0
start console
setprop persist.service.adb.enable 1
(2). 编译对应手机user 版本的bootimage, 如 MT6577v2_phone 即为你的project name 时:
./mk -o=TARGET_BUILD_VARIant=user mt6577v2_phone bootimage new (3). 通过FlashTool 只刷这个新编译的bootimage
(4). 插入USB adb 就默认以root 权限连接上,插入UART(UART 已经拉出), 输入aee -k 6 即可看到kernel log, 以及输入. adb 也默认已经开启。
顶顶,学习了
什么问题
学习一下。
