2017年6月1日 星期四

[Android] [Recovery]

===========================================================
Recovery klog
===========================================================
If you find : denied  { write } for  pid=183 comm="recovery" name="kmsg"

Moditfy : myandroid/external/sepolicy/recovery.te

Add : allow recovery kmsg_device:chr_file rw_file_perms;
----------------------------------------------------------------------------------------------------
recovery.cpp
#define RECOVERY_KLOG_LEVEL KLOG_INFO_LEVEL

in main to add :
    klog_init();
    klog_set_level(RECOVERY_KLOG_LEVEL

common.h
#include <cutils/klog.h>
#define LOGE(...) KLOG_INFO("<recovery>E", __VA_ARGS__); fprintf(stdout, "E:" __VA_ARGS__)
#define LOGW(...) KLOG_WARNING("<recovery>W", __VA_ARGS__); fprintf(stdout, "W:" __VA_ARGS__)
#define LOGI(...) KLOG_INFO("<recovery>I", __VA_ARGS__); fprintf(stdout, "I:" __VA_ARGS__)
#define LOGV(...) KLOG_INFO("<recovery>V", __VA_ARGS__); fprintf(stdout, "V:" __VA_ARGS__)
#define LOGD(...) KLOG_INFO("<recovery>D", __VA_ARGS__); fprintf(stdout, "D:" __VA_ARGS__)

screen_ui.cpp
in ScreenRecoveryUI::Print to add :
KLOG_INFO("<recovery>UI", "%s", buf);





===========================================================
Make /tmp/recovery.log & /tmp/last_install accessible
===========================================================
If you find : denied  { open } for  pid=194 comm="adbd" path="/tmp/recovery.log" dev="tmpfs"

adb pull /tmp/recovery.log
message : failed to copy '/tmp/recovery.log' to './recovery.log': Permission denied

adb pull /tmp/last_install
message : failed to copy '/tmp/last_install' to './last_install': Permission denied

Moditfy : external/sepolicy/adbd.te
Add : allow adbd tmpfs:file { open };
----------------------------------------------------------------------------------------------------
recovery.cpp
in main to add :
+chmod(TEMPORARY_LOG_FILE, 0644);

install.cpp
in main :
if (install_log) {
        fputs(path, install_log);
        fputc('\n', install_log);
      +chmod(install_file, 0644);
}





===========================================================
Support recovery shell console
===========================================================
mksh/reboot/toubox  Android.mk
LOCAL_STATIC_LIBRARIES += libc
LOCAL_FORCE_STATIC_EXECUTABLE := true
----------------------------------------------------------------------------------------------------
build/core/Makefile
recovery_ash_binary := $(call intermediates-dir-for,EXECUTABLES,ash)/ash
recovery_reboot_binary := $(call intermediates-dir-for,EXECUTABLES,rreboot)/rreboot
recovery_toybox_binary := $(call intermediates-dir-for,EXECUTABLES,rtoybox)/rtoybox
recovery_toybox_tools := \
youtools(ex. cat) \

recovery_toybox_symlinks := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(recovery_toybox_tools))


define build-recoveryimage-target
  @echo ----- Making recovery image ------

  $(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/*
  $(hide) cp -f $(recovery_ash_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/
  $(hide) cp -f $(recovery_reboot_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/reboot
  $(hide) cp -f $(recovery_toybox_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/
  $(hide) $(foreach t,$(recovery_toybox_symlinks),ln -sf rtoybox $(t);)

$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
$(INTERNAL_RECOVERYIMAGE_FILES) \
$(recovery_ash_binary) $(recovery_reboot_binary) $(recovery_toybox_binary) \

----------------------------------------------------------------------------------------------------
recovery/etc/init.rc
service console /sbin/ash
    class core
    console
    user root
    group root
    seclabel u:r:recovery:s0

on property:ro.debuggable=1
    start console

on property:service.adb.root=1
    start console






===========================================================

===========================================================
----------------------------------------------------------------------------------------------------






===========================================================

===========================================================
----------------------------------------------------------------------------------------------------