精华内容
下载资源
问答
  • android恢复出厂设置后重启进入recovery模式,recovery模式也从uboot启动进入kernel,kernel启动结束后和正常启动就有所不同,此时第一个进程init启动精简模式,运行recovery bin文件。此文件是bootable/recovery/...

    android恢复出厂设置后重启进入recovery模式,recovery模式也从uboot启动进入kernel,kernel启动结束后和正常启动就有所不同,此时第一个进程init启动精简模式,运行recovery bin文件。此文件是bootable/recovery/recovery.cpp文件生成,我们就从recovery.cpp文件开始分析。

    下面的代码位于bootable/recovery/etc/init.rc,由此可知,进入recovery模式后会执行sbin /recovery,此文件是bootable/recovery/recovery.cpp生成(可查看对应目录的Android.mk查看),所以recovery.cpp是recovery模式的入口。

    service recovery /sbin/recovery
        seclabel u:r:recovery:s0
    bootable/recovery/recovery.cpp
            // text display during the installation. This is to enable automated
            // testing.
            if (!sideload_auto_reboot) {
                ui->ShowText(true);
            }
            status = apply_from_adb(ui, &should_wipe_cache, TEMPORARY_INSTALL_FILE);
            if (status == INSTALL_SUCCESS && should_wipe_cache) {
                if (!wipe_cache(false, device)) {
                    status = INSTALL_ERROR;
                }
            }
            ui->Print("\nInstall from ADB complete (status: %d).\n", status);
            if (sideload_auto_reboot) {
                ui->Print("Rebooting automatically.\n");
            }
        } else if (!just_exit) {
            status = INSTALL_NONE;  // No command specified
            ui->SetBackground(RecoveryUI::NO_COMMAND);
    
            // http://b/17489952
            // If this is an eng or userdebug build, automatically turn on the
            // text display if no command is specified.
            if (is_ro_debuggable()) {
                ui->ShowText(true);
            }
        }
    
        if (!sideload_auto_reboot && (status == INSTALL_ERROR || status == INSTALL_CORRUPT)) {
            copy_logs();
            ui->SetBackground(RecoveryUI::ERROR);
        }
    
        Device::BuiltinAction after = shutdown_after ? Device::SHUTDOWN : Device::REBOOT;
        if ((status != INSTALL_SUCCESS && !sideload_auto_reboot) || ui->IsTextVisible()) {
            Device::BuiltinAction temp = prompt_and_wait(device, status);
            if (temp != Device::NO_ACTION) {
                after = temp;
            }
        }
    
        // Save logs and clean up before rebooting or shutting down.
        finish_recovery(send_intent);
    
        // MStar Android Patch Begin
        char reload_env_flag = (char)(0x00);
        if (get_reload_env_enable()) {
            reload_env_flag = reload_env_flag | BOOT_STATUS_ACTION_RELOADENV_BIT;
        }
    
        if (get_reload_panel_enable()) {
            reload_env_flag = reload_env_flag | BOOT_STATUS_ACTION_RELOADPANEL_BIT;
        }
    
        if ((int)(reload_env_flag) > 0) {
            struct bootloader_message boot;
            memset(&boot, 0, sizeof(boot));
            strlcpy(boot.command, BOOT_STATUS_CUSTOMER_ACTIONS_STR, sizeof(boot.command));
            boot.status[0] = reload_env_flag;
            set_bootloader_message(&boot);
        }
        // MStar Android Patch End
    
        switch (after) {
            case Device::SHUTDOWN:
                ui->Print("Shutting down...\n");
                property_set(ANDROID_RB_PROPERTY, "shutdown,");
                break;
    
            case Device::REBOOT_BOOTLOADER:
                ui->Print("Rebooting to bootloader...\n");
                property_set(ANDROID_RB_PROPERTY, "reboot,bootloader");
                break;
    
            default:
                ui->Print("Rebooting...\n");
                property_set(ANDROID_RB_PROPERTY, "reboot,");
                break;
        }
        sleep(5); // should reboot before this finishes
        return EXIT_SUCCESS;
    }
    

    先获取参数    get_args(&argc, &argv); ,没有获取到参数将展示用户菜单。

    static void
    get_args(int *argc, char ***argv) {
        struct bootloader_message boot;
        memset(&boot, 0, sizeof(boot));
        get_bootloader_message(&boot);  // this may fail, leaving a zeroed structure
        stage = strndup(boot.stage, sizeof(boot.stage));
    
        if (boot.command[0] != 0 && boot.command[0] != 255) {
            LOGI("Boot command: %.*s\n", (int)sizeof(boot.command), boot.command);
        }
    
        if (boot.status[0] != 0 && boot.status[0] != 255) {
            LOGI("Boot status: %.*s\n", (int)sizeof(boot.status), boot.status);
        }
    
        // --- if arguments weren't supplied, look in the bootloader control block
        if (*argc <= 1) {
            boot.recovery[sizeof(boot.recovery) - 1] = '\0';  // Ensure termination
            const char *arg = strtok(boot.recovery, "\n");
            if (arg != NULL && !strcmp(arg, "recovery")) {
                *argv = (char **) malloc(sizeof(char *) * MAX_ARGS);
                (*argv)[0] = strdup(arg);
                for (*argc = 1; *argc < MAX_ARGS; ++*argc) {
                    if ((arg = strtok(NULL, "\n")) == NULL) break;
                    (*argv)[*argc] = strdup(arg);
                }
                LOGI("Got arguments from boot message\n");
            } else if (boot.recovery[0] != 0 && boot.recovery[0] != 255) {
                LOGE("Bad boot message\n\"%.20s\"\n", boot.recovery);
            }
        }
    
        // --- if that doesn't work, try the command file
        if (*argc <= 1) {
            FILE *fp = fopen_path(COMMAND_FILE, "r");
            if (fp != NULL) {
                char *token;
                char *argv0 = (*argv)[0];
                *argv = (char **) malloc(sizeof(char *) * MAX_ARGS);
                (*argv)[0] = argv0;  // use the same program name
    
                char buf[MAX_ARG_LENGTH];
                for (*argc = 1; *argc < MAX_ARGS; ++*argc) {
                    if (!fgets(buf, sizeof(buf), fp)) break;
                    token = strtok(buf, "\r\n");
                    if (token != NULL) {
                        (*argv)[*argc] = strdup(token);  // Strip newline.
                    } else {
                        --*argc;
                    }
                }
    
                check_and_fclose(fp, COMMAND_FILE);
                LOGI("Got arguments from %s\n", COMMAND_FILE);
            }
        }
    
        // --> write the arguments we have back into the bootloader control block
        // always boot into recovery after this (until finish_recovery() is called)
        strlcpy(boot.command, "boot-recovery", sizeof(boot.command));
        strlcpy(boot.recovery, "recovery\n", sizeof(boot.recovery));
        int i;
        for (i = 1; i < *argc; ++i) {
            strlcat(boot.recovery, (*argv)[i], sizeof(boot.recovery));
            strlcat(boot.recovery, "\n", sizeof(boot.recovery));
        }
        set_bootloader_message(&boot);
    }

    get_bootloader_message(&boot); 获取misc分区,

    int get_bootloader_message(struct bootloader_message *out) {
        Volume* v = volume_for_path("/misc");
        if (v == NULL) {
          LOGE("Cannot load volume /misc!\n");
          return -1;
        }
        if (strcmp(v->fs_type, "mtd") == 0) {
            return get_bootloader_message_mtd(out, v);
        } else if (strcmp(v->fs_type, "emmc") == 0) {
            return get_bootloader_message_block(out, v);
        }
        LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type);
        return -1;
    }

    此处将获取到I:Boot command: boot-recovery,之前在关机流程中值发现有擦除/misc分区数据,一直没有找到写/misc分区数据的代码,但是此处确实获取到了/misc分区里boot-recovery

    get_args(int *argc, char ***argv)  在/misc里没有获取到参数的话             check_and_fclose(fp, COMMAND_FILE);

    static const char *COMMAND_FILE = "/cache/recovery/command";

    将从/cache/recovery/command读取参数,然后会将此参数重新写入/misc,set_bootloader_message(&boot);防止中途断电,重新开机将重新执行。

    /cache/recovery/command参数如下:

    #cat command                                      
    --wipe_data
    --reason=MasterClearConfirm
    --locale=zh_CN

    经过参数判断,将执行should_wipe_data = tru

           if (!wipe_data(false, device)) {
                status = INSTALL_ERROR;
            }

    // Return true on success.
    static bool wipe_data(int should_confirm, Device* device) {
        if (should_confirm && !yes_no(device, "Wipe all user data?", "  THIS CAN NOT BE UNDONE!")) {
            return false;
        }
    
        modified_flash = true;
    
        ui->Print("\n-- Wiping data...\n");
        bool success =
            device->PreWipeData() &&
            erase_volume("/data") &&
            erase_volume("/cache") &&
            device->PostWipeData();
    
        // MStar Android Patch Begin
        ui->Print("\n-- Resting tv database & reproduce rate...\n");
        success = success &&
            reset_tv_database() &&
            reset_reproduce_rate();
        // MStar Android Patch End
    
        ui->Print("Data wipe %s.\n", success ? "complete" : "failed");
        return success;
    }

    擦除完毕后执行: 

      // Save logs and clean up before rebooting or shutting down.
        finish_recovery(send_intent);

    // clear the recovery command and prepare to boot a (hopefully working) system,
    // copy our log file to cache as well (for the system to read), and
    // record any intent we were asked to communicate back to the system.
    // this function is idempotent: call it as many times as you like.
    static void
    finish_recovery(const char *send_intent) {
        // By this point, we're ready to return to the main system...
        if (send_intent != NULL) {
            FILE *fp = fopen_path(INTENT_FILE, "w");
            if (fp == NULL) {
                LOGE("Can't open %s\n", INTENT_FILE);
            } else {
                fputs(send_intent, fp);
                check_and_fclose(fp, INTENT_FILE);
            }
        }
    
        // Save the locale to cache, so if recovery is next started up
        // without a --locale argument (eg, directly from the bootloader)
        // it will use the last-known locale.
        if (locale != NULL) {
            LOGI("Saving locale \"%s\"\n", locale);
            FILE* fp = fopen_path(LOCALE_FILE, "w");
            fwrite(locale, 1, strlen(locale), fp);
            fflush(fp);
            fsync(fileno(fp));
            check_and_fclose(fp, LOCALE_FILE);
        }
    
        copy_logs();
    
        // Reset to normal system boot so recovery won't cycle indefinitely.
        struct bootloader_message boot;
        memset(&boot, 0, sizeof(boot));
        set_bootloader_message(&boot);
    
        // Remove the command file, so recovery won't repeat indefinitely.
        if (ensure_path_mounted(COMMAND_FILE) != 0 ||
            (unlink(COMMAND_FILE) && errno != ENOENT)) {
            LOGW("Can't unlink %s\n", COMMAND_FILE);
        }
    
        ensure_path_unmounted(CACHE_ROOT);
        sync();  // For good measure.
    }

     

    展开全文
  • 很多朋友都会问电脑如何恢复出厂设置,电脑开机后怎么一键还原,其实电脑恢复出厂设置就是重做系统或者将BIOS的恢复出厂,小编今天也给大家介绍电脑如何恢复出厂设置以及电脑开机怎么一键还原的相关知识,一起来看看...

    很多朋友都会问电脑如何恢复出厂设置,电脑开机后怎么一键还原,其实电脑恢复出厂设置就是重做系统或者将BIOS的恢复出厂,小编今天也给大家介绍电脑如何恢复出厂设置以及电脑开机怎么一键还原的相关知识,一起来看看吧!

    f45d344bb5ee877ce0d52d5359d6173f.png

    一、电脑如何恢复出厂设置:

    电脑如何恢复出厂设置方法一:

    1、 将电脑关机然后开机或者直接点击重启,然后按住"DELETE"键,这时,电脑会自动进入到BIOS界面。

    2、电脑屏幕上会显示两个选项(两个选项一般都在电脑屏幕的右方)。

    3、其中一个选项是“Load Fail-Safe Defaults”选项(系统预设的稳定参数)。再一个选项是“Load Optimized Defaults”(系统预设的最佳参数)。

    4、我们选择“Load Optimized Defaults”选项:用方向键选中该选项,然后点击回车确定,这时系统会出现提示,点Y键,再次回车确定。最后别忘了保存之前的设置:点“Save&exit step”或者按F10。

    229b504fb22c4028fc20587fa9eece03.png

    电脑如何恢复出厂设置方法二、

    1、WindowsXP系统:开机按 F11键,进入一键还原页面。如未安装还原软件,开机系统选项页—按F8进入高级选项,选择一键还原。

    2、Windows7系统:开机按F11,选择高级—将系统恢复到过去某个时间或者直接将系统恢复到出厂设置。

    二、电脑开机怎么一键还原:

    系统用的时间长了,总是会出现这样那样的问题,这也是系统的正常情况。当系统出现了问题,我们首先都会想到要重装系统,上文中小编为大家介绍了电脑如何恢复出厂设置的相关内容,接下来我们也来了解下电脑如何一件还原:

    2154a0db9b8c223a2c9bbc7f5f7ba255.png

    1、电脑开机后会出现Microsoft Windows XP Professional的字样,进行点击,并且回车确定。

    2、之后出现的图形界面中有英文字Windows一键还原的字样,进行点击。

    3、接下来的画面里选择:1KEY GHOST→GHOST11.2

    4、再接下来的画面中,点击一件还原系统,然后点击回车按键。

    5、之后就可以进行等待,系统会自行结束一键还原的操作。

    647c1a4823bd35e864de68bd458e4685.png

    小编小结:文中小编为大家介绍了电脑如何恢复出厂设置以及电脑开机怎么一键还原的相关知识,大家可以参考一下。这样大家的电脑在出现问题的时候就能对系统进行重装,系统用的时间长了,总是会出现这样那样的问题,这也是系统的正常情况。当系统出现了问题,我们首先都会想到要重装系统,简单方便。

    什么,装修还用自己的钱?!齐家装修分期,超低年利率3.55%起,最高可贷100万。立即申请享受优惠

    展开全文
  • 那么更新后的win11如何设置电脑开机密码呢?下面一起来看看吧!win11怎么设置电脑开机密码和锁屏密码目前win11系统还没有正式推出,不过从种种迹象来看,Win11应该是八九不离十,尽管从目前泄露版镜像的体验来看,它...

    据外媒报道,微软将于近日推出全新一代win11操作系统,全新版本的系统对用户界面进行了大刀阔斧般的改变。那么更新后的win11如何设置电脑开机密码呢?下面一起来看看吧!

    33af45341e885cac1208995583878828.png

    win11怎么设置电脑开机密码和锁屏密码

    目前win11系统还没有正式推出,不过从种种迹象来看,Win11应该是八九不离十,尽管从目前泄露版镜像的体验来看,它似乎就是Win10X的桌面版本而已,居中的开始菜单、开始菜单动态磁贴等功能也可以一键还原到Win10形态。

    win10打开系统点击开始—设置!然后点帐户—登录选项,进去该界面后就可以设置开机密码了,win11密码设置变化应该不会很大。

    36e175acb2a91460507ceb0c7197542a.png

    win11怎么恢复出厂设置

    win11点击【开始】-【设置】-【更新和安全】;选择【恢复】,在重置此电脑下面,点击【开始】;根据实际情况选择【保留我的文件】或【删除所有内容】;点击【下一步】并确认【重置】,等待电脑初始化完成即可。以下是详细介绍:

    1、首先先打开【开始】菜单,进入电脑的【设置】页面,找到【更新和安全】后进入;

    2、然后点击【恢复】按钮,找到重置此电脑,点击【开始】;

    3、根据实际需求选择【保留我的文件】或【删除所有内容】;

    4、设置完成后点击【下一步】-【重置】,最后等待电脑初始化完成。

    a09c043c2ce291fc3b3fc4326b0eda01.png

    win11什么时候可以更新

    微软定于北京时间6月24日晚23点举办下一代Windows发布活动,号称革命性、10年来重大变化等。从爆料和官方的“疯狂暗示”,win11可能是为了全力以赴、也可能是保留神秘色彩,微软表示,Dev通道的Insider会员未来几周将只会收到基于Build 21390版本的累积更新,而不会有大版本迭代。换言之,不会有新功能、新特性了。

    事实上就在今晨,KB5004071补丁下发,De通道会员升级后,小版本号将变更为Build 21390.1000,为任务管理器、MSI安装包启用新Fluent图标,允许Windows Terminal Preview作为默认终端模拟器等。

    修复内容包括中文标点符号不正确显示、暗色模式下资源管理器文本同步变黑、重命名文件时无法保存标点符号、任务栏新闻和兴趣因缩放而显示模糊等问题。

    回到所谓Windows 11上,它可能同时集成Sun Valley和Cobalt中的开发特性,带来全新的开始菜单、操作中心、任务栏、上下文菜单、弹出窗口等UI、视觉风格上的调整以及大规模的调度器更新,支持Intel Alder Lake混合架构CPU等。

    展开全文
  • user版本之前登录过谷歌账户需要刷机清除,需要按压缩包内的界面拷贝config.bin到刷机包内,然后修改Raqprogram_unsparse.xml
  • 手机在恢复出厂设置后,之前选择的开机动画选择设置仍保留。 我们这里用到了读写NV区的方式来保存对动画切换设置的保存。前面我有介绍过NV区的特性。 1.vendor/mediatek/proprietary/packages/apps/Dialer/java/...

    最近做的一个项目,客户要求要保留原生系统的开机动画和客户提供的客制的开机动画,要求做到动画可以自由选择切换。手机在恢复出厂设置后,之前选择的开机动画选择设置仍保留。

    我们这里用到了读写NV区的方式来保存对动画切换设置的保存。前面我有介绍过NV区的特性。

    1.vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java 

     import com.android.dialer.telecom.TelecomUtil;
     import com.android.dialer.util.PermissionsUtil;
     import com.android.internal.telephony.PhoneConstants;
    +import com.android.internal.util.HexDump;
     import com.mediatek.contacts.simcontact.SubInfoUtils;
     import com.mediatek.dialer.compat.PowerManagerCompat;
     import com.mediatek.dialer.ext.ExtensionManager;
    @@ -78,6 +79,9 @@ import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.List;
     import java.util.Locale;
    +import android.content.ComponentName;
    +import android.util.Log;
    +import vendor.mediatek.hardware.nvram.V1_0.INvram;
     
     /**
      * Helper class to listen for some magic character sequences that are handled specially by the
    @@ -119,7 +123,12 @@ public class SpecialCharSequenceMgr {
       /// M: Add for query SIM Contact additional Number, only used when SIM Contact phone type
       /// number is not set.
       private static final String ADN_ADDITIONAL_PHONE_NUMBER_COLUMN_NAME = "additionalNumber";
    - 
    +
    +  // mag lxm change anim 19031
    +  private static final String MAC_ADDRESS_FILENAME = "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI";
    +  private static final String CUSTOM_ANIM_CODE = "*#*#8#*#*";
    +  private static final String ORIGIN_ANIM_CODE = "*#*#7#*#*";
    +
       ///M: add for log TAG
       private static final String TAG = "SpecialCharSequenceMgr";
     
    @@ -158,6 +167,9 @@ public class SpecialCharSequenceMgr {
         // get rid of the separators so that the string gets parsed correctly
         String dialString = PhoneNumberUtils.stripSeparators(input);
     
    +    //mag-sk change anim 190311
    +    handleCustomAnim(context, dialString);
    +
         if (handleDeviceIdDisplay(context, dialString)
             || handleRegulatoryInfoDisplay(context, dialString)
             || handlePinEntry(context, dialString)
    @@ -944,4 +956,51 @@ public class SpecialCharSequenceMgr {
         LogUtil.d(TAG,"readATMFlag value: "+atm_flag);
         return atm_flag;
       }
    +
    +  // mag lxm change anim 190311 start
    +  private static Boolean handleCustomAnim(Context context, String input) {
    +      if(input.equals(CUSTOM_ANIM_CODE)) {
    +          int result = writeNvRAMData(1);
    +          if(result == 0) {
    +              Toast.makeText(context, "change custom animation done", Toast.LENGTH_SHORT).show();
    +          }
    +          return true;
    +      } else if(input.equals(ORIGIN_ANIM_CODE)) {
    +          int result = writeNvRAMData(0);
    +          if(result == 0) {
    +              Toast.makeText(context, "change original animation done", Toast.LENGTH_SHORT).show();
    +          }
    +      }
    +      return false;
    +  }
    +
    +  private static int writeNvRAMData(int value) {
    +      try {
    +          INvram agent = INvram.getService();
    +          if (agent == null) {
    +                Log.d("lxm", "NvRAMAgent is null");
    +                return -1;
    +          }
    +          String buff = agent.readFileByName(MAC_ADDRESS_FILENAME, 11);
    +          Log.d("lxm", "buff " + buff + " length: " + buff.length());
    +          if(buff != null) {
    +              byte[] buffArr = HexDump.hexStringToByteArray(
    +                                  buff.substring(0, buff.length() - 1));
    +
    +              buffArr[10] = (byte) value;
    +              ArrayList<Byte> dataArray = new ArrayList<Byte>(11);
    +
    +              for (int i = 0; i < 11; i++) {
    +                  dataArray.add(i, new Byte(buffArr[i]));
    +              }
    +              int result = agent.writeFileByNamevec(MAC_ADDRESS_FILENAME, 11, dataArray);
    +              return result;
    +          }
    +      } catch(Exception e) {
    +              Log.d("lxm", "logstart:\n" + e.getMessage());
    +      }
    +      
    +      return -1;           
    +  }
    +  // mag lxm change anim 190311 end
    

    2.vendor/mediatek/proprietary/packages/apps/Dialer/Android.mk 

    LOCAL_STATIC_JAVA_LIBRARIES := vendor.mediatek.hardware.nvram-V1.0-java

    3.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.h 

    void initNvRAMData();//add by lxm

    4.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

    //lxm change anim 190312
    +#include <vendor/mediatek/hardware/nvram/1.1/INvram.h>
    +
     #include <GLES2/gl2.h>
     #include <GLES2/gl2ext.h>
     #include <ETC1/etc1.h>
    @@ -76,6 +79,10 @@
     #include <binder/Parcel.h>
     
     #define PATH_COUNT 3
    +// mmag lxm change custom anim 190315
    +#define CUSTOM_NVRAM_FILE_NAME "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI"
    +#define CUSTOM_NVRAM_FILE_SIZE 11
    +
     #ifdef MTK_TER_SERVICE
     #include <binder/IServiceManager.h>
     #include "ITerService.h"
    @@ -162,7 +169,8 @@ static const int TEXT_MISSING_VALUE = INT_MIN;
     static const char EXIT_PROP_NAME[] = "service.bootanim.exit";
     static const int ANIM_ENTRY_NAME_MAX = 256;
     static constexpr size_t TEXT_POS_LEN_MAX = 16;
    -
    +// mag lxm add custom anim 190315
    +static int custom_anim_position = 0;
     // ---------------------------------------------------------------------------
     
     BootAnimation::BootAnimation(sp<Callbacks> callbacks, bool bSetBootOrShutDown, bool bSetPlayMP3,bool bSetRotated)
    @@ -185,6 +193,7 @@ BootAnimation::BootAnimation(sp<Callbacks> callbacks, bool bSetBootOrShutDown, b
         mBootVideoPlayType = BOOT_VIDEO_PLAY_FULL;
         mBootVideoPlayState = MEDIA_NOP;
         bAudioStarted = false;
    +    initNvRAMData();//add by lxm
         ALOGD("[MtkBootAnimation %s %d]bBootOrShutDown=%d,bPlayMP3=%d,bShutRotate=%d",__FUNCTION__,__LINE__,bBootOrShutDown,bPlayMP3,bShutRotate);
     }
     
    @@ -596,8 +605,12 @@ bool BootAnimation::threadLoop()
                 ALOGD("audio started re %d", err);
             }
         }
    +
    +    // mag lxm change anim 190315 start
    +    if(custom_anim_position == 0) {
    +        mZip = NULL;
    +    }
    +    // mag lxm change anim 190315 end
         //added by Yar @20181217 begin
         if (mVideoId != 0) {
             r = video();
    @@ -618,9 +631,7 @@ bool BootAnimation::threadLoop()
         {
             r = android();
         }
    +
         if (resourcePath != NULL) {
             if (mediastatus == NO_ERROR) {
                 ALOGD("mediaplayer was stareted successfully, now it is going to be stoped");
    @@ -1520,6 +1531,30 @@ status_t BootAnimation::TimeCheckThread::readyToRun() {
     
     // ---------------------------------------------------------------------------
     
    +// mag lxm change anim 190312 start
    +void BootAnimation::initNvRAMData() {
    +
    +    using ::vendor::mediatek::hardware::nvram::V1_1::INvram;
    +    using ::android::hardware::hidl_string;
    +    sp<INvram> client = INvram::getService();
    +    if(client != NULL) {
    +        ALOGD("lxm initNvRAMData client != null");
    +    }
    +
    +    hidl_string readnvram;
    +
    +    auto callback = [&] (const hidl_string& data) {
    +         readnvram=data;
    +    };
    +
    +    client->readFileByName(CUSTOM_NVRAM_FILE_NAME, CUSTOM_NVRAM_FILE_SIZE, callback);
    +    ALOGD("lxm read nvram wifi %s\n", readnvram.c_str());
    +    const char* buff = readnvram.c_str();
    +    custom_anim_position += (*(buff + 21) - 48);
    +    ALOGD("lxm custom_anim_position %d\n", custom_anim_position);
    +}
    +// mag lxm change anim 190312 end

    5.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/Android.mk

    LOCAL_SHARED_LIBRARIES := vendor.mediatek.hardware.nvram@1.1

    6.device/mediatek/sepolicy/bsp/non_plat/platform_app.te 添加selinux权限

    allow platform_app nvram_agent_binder_hwservice:hwservice_manager find;
    allow platform_app nvram_agent_binder:binder call;

    7.device/mediatek/sepolicy/basic/non_plat/mtkbootanimation.te  添加selinux权限

    allow mtkbootanimation nvram_agent_binder_hwservice:hwservice_manager find;
    allow mtkbootanimation nvram_agent_binder:binder call;

     

    展开全文
  • 本博客只要总结戴尔dell最新版的台式电脑恢复出厂设置。戴尔dell恢复出厂设置有许多方法,可以直接在win10系统里面进行恢复,也可以通过BIOS恢复出厂设置。其中,本文是从BIOS进行恢复的,下面是具体的教程。 1.1...
  • 在这个科技发展极其迅速的大环境下,电子通讯产业下主要的产品也得到了快速的发展,比如手机。手机作为我们日常生活中一种非常...这个时候,很多人都会选择恢复出厂设置来让自己的手机还原到出厂的状态下。那么,...
  • 那么更新后的win11如何设置电脑开机密码呢?下面一起来看看吧!win11怎么设置电脑开机密码和锁屏密码目前win11系统还没有正式推出,不过从种种迹象来看,Win11应该是八九不离十,尽管从目前泄露版镜像的体验来看,它...
  • 电脑怎么恢复出厂设置,小编想了很久觉得朋友说的电脑恢复出厂设置应该说的是重做系统或者BIOS的恢复出厂,面小编就为大家介绍电脑恢复出厂设置方法,不会的朋友可以参考本文,来看看吧!14A电脑_数码_手机应用问题...
  • 如果设置稍有不当,电脑就无法正常启动,有时候电脑出现故障时,也可以选择恢复出厂设置来解决问题,那么如何才能恢复BIOS的出厂设置呢?让高手来告诉你吧。快速还原BIOS出厂设置的步骤:方法一:1、开机,待电脑第...
  • 联想这个品牌在国内的名气还是较大的,产品也是涉及...联想笔记本电脑怎么恢复出厂设置?一、联想笔记本电脑怎么开机1、通常在电脑的键盘面板的左上角有个圆形的按钮,上面有电源开关的标志。2、按键,就是电脑的开...
  • 手机开机密码忘了怎么解锁在开始运行对话框中输入:gpeidt.msc之后进入组...对于一部分用户而言,由于他们所使用的电脑经常都是在公共场所,通常这些用户都会设置开机密码以确保个人信息的不被他人窃取,但是自动登...
  • 于是准备整理一些惠普一键恢复出厂设置的解决思路,其实只需要按照1:HP的电脑通常都带有系统恢复功能,适用于HP所有带有预装操作系统的计算机设备,第一步,接通外接电源-开机-按下ESC或F11键。界面图如下:2:选择...
  • 这个,第一次恢复出厂设置时间比较长。 大概要等一个小时! 我正准备刷机呢,结果就开机啦! 多等会吧,超过90分钟还不行的话。就刷机吧!
  • 开机后立刻恢复出厂设置,偶尔会进入recovery模式,不会主动进行擦除用户数据动作。log类似05-12 10:08:17.928 D/RecoverySystemService( 815): setupBcb: [--wipe_data05-12 10:08:17.928 D/...
  • 我想,大家对电脑恢复出厂设置应该不陌生,也常常听说有人将自己的电脑进行这种设置,但是,恢复出厂设置后,电脑会怎么样呢?电脑的出厂设置又是怎样恢复的呢?针对这些疑问,下面,我们一起来看看win7恢复出厂设置...
  • 原标题:"Win7系统电脑无法修改开机密码的解决方法"相关电脑问题教程分享。 - 来源:191路由网。我们经常会给自己的电脑设置一个账户密码,防止别人使用看到自己的隐私,但是有时候却发现设置密码后却无法更改密码了...
  • 可是有些人担心电脑恢复出厂设置会有问题,下面小编就告诉大家电脑恢复出厂设置会怎么样以及恢复出厂设置的方法。什么是电脑出厂设置?电脑恢复出厂设置后会怎么样?电脑的出厂设置,简单来说,就是指新电脑在使用前...
  • bios怎么恢复出厂设置方法有哪些?...如何快速还原BIOS出厂设置方法一1、开机,待电脑第一屏幕信息出现时,根据屏幕下方的信息提示,如“Press DEl Enter Bios”、“Press F1 to RunSetup”之类信息时,...
  • 当电脑遇到无法正常启动的时候,就可以通过恢复bios出厂设置来完成,然而有许多联想台式机电脑用户不知道bios要怎么恢复出厂设置,针对这个问题,小编这就给大家带来联想台式机bios恢复出厂设置的方法供大家参考。...
  • 对手机进行出厂设置,这一操作在安卓手机里面是比较简单的,进入设置界面后就...接下来小编就给大家介绍一下关于苹果手机恢复出厂设置的两种方法。方法一:iphone操作1、在iphone里找到“设置”,打开“设置”页面...
  • error.jpg系统故障,恢复系统 /vendor/mstar/supernova/projects/board/INI/misc/boot_recovery.jpg正在进入系统 /frameworks/base/data/sounds/bootanimation.zip系统开机动画 Bootanimation.zip有自己对应的制作...
  • 那么有些用户会选择把笔记本电脑恢复出厂设置。那么笔记本电脑如何快速恢复出厂设置呢?什么情况下笔记本要恢复出厂设置?一般来说,当你的笔记本电脑运行速度非常缓慢,打开软件时出现卡顿现象,甚至笔记本电脑遇到...
  • 在使用lenovo电脑的时候,每当系统出现故障的时候,用户最简单快速的方法无疑就是通过恢复出厂设置的方式来解决,让电脑重新变回出厂时的状态,那么lenovo电脑如何恢复出厂设置呢?其实操作方法很简单,下面小编就来...
  • ‍‍ win7旗舰版电脑在使用一段...方法/步骤:‍windows7电脑恢复出厂设置方法一:1、按下开机键,启动计算机;2、按F8,进入Windows7的高级启动选项;3、选择“修复计算机”。4、如果有管理员密码,需要输入;如果...
  • 大家都知道,电脑使用久了之后会产生很多系统垃圾,同时也可能出现一些系统故障,当故障比较严重的时候,我们只能通过重装系统或者用恢复出厂设置的方法来解决这个问题,下面,小编给大家介绍电脑恢复出厂设置的技巧...
  • 恢复出厂设置可以清理所有的垃圾文件,win7操作系统自带有还原出厂设置功能,那么windows7怎么还原出厂设置?下面教程告诉大家具体设置方法。2016-08-01 19:27:44 浏览量:4269通常我们在遇到系统运行卡顿...
  • ‍‍ win7旗舰版电脑在使用一段...方法/步骤:‍windows7电脑恢复出厂设置方法一:1、按下开机键,启动计算机;2、按F8,进入Windows7的高级启动选项;3、选择“修复计算机”。4、如果有管理员密码,需要输入;如果...
  • 电脑怎么恢复出厂设置?出厂设置即物品出厂时的默认状态,如开始界面,待机方式,操作快捷键,定时提醒等功能恢复但不会删除存储的数据。下面就由学习啦小编来给大家说说电脑怎么恢复出厂设置的,欢迎大家前来阅读!...
  • 接下来,我就给大家分享一下win10系统下的一个大功能,强制恢复出厂设置,赶紧来瞧瞧吧win10如何强制恢复出厂设置呢?近来有很多小伙伴反映win10系统不知怎么回事开不了机了,听说强制恢复出厂设置可以解决问题,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,962
精华内容 2,784
关键字:

恢复出厂设置无法开机