高通Qualcomm平台lk(light kernel)启动流程2——aboot_init()

来源:互联网 发布:白左圣母毁灭欧洲 知乎 编辑:程序博客网 时间:2024/06/07 04:55

  • 0lk 启动总体流程
  • 1lk启动流程代码
    • lk app aboot abootc

更多相关文章:

《高通Qualcomm平台lk(light kernel)启动流程1——aboot_init()之前》:
http://blog.csdn.net/u014134180/article/details/78133916
《高通Qualcomm平台lk(light kernel)启动流程2——aboot_init()》:
http://blog.csdn.net/u014134180/article/details/78132580
《高通Qualcomm平台lk(light kernel)启动流程3——到高通lcm屏点亮》:
http://blog.csdn.net/u014134180/article/details/78177040

《[lcm] Qualcomm Android Display Subsystem 架构》
http://blog.csdn.net/u014134180/article/details/78129502

《[lcm] Qualcomm平台的显示屏lcd驱动移植步骤》:
http://blog.csdn.net/u014134180/article/details/78129499
《[lcm] Qualcomm平台兼容多显示屏lcd的方法&并从lk传输到kernel过程》:
http://blog.csdn.net/u014134180/article/details/78166978
《[lcm] Qualcomm平台显示屏lcd添加I2C读取功能》:
http://blog.csdn.net/u014134180/article/details/78176160

0、lk 启动总体流程

这里写图片描述

1、lk启动流程代码

lk/ app/ aboot/ aboot.c

下面是aboot.c的部分代码,核心代码在的aboot_init()函数开始:void aboot_init(const struct app_descriptor *app)

/* * Copyright (c) 2009, Google Inc. * All rights reserved. * * Copyright (c) 2009-2016, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: *     * Redistributions of source code must retain the above copyright *       notice, this list of conditions and the following disclaimer. *     * Redistributions in binary form must reproduce the above copyright *       notice, this list of conditions and the following disclaimer in the *       documentation and/or other materials provided with the distribution. *     * Neither the name of The Linux Foundation nor *       the names of its contributors may be used to endorse or promote *       products derived from this software without specific prior written *       permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */#include <app.h>#include <debug.h>#include <arch/arm.h>#include <string.h>#include <stdlib.h>#include <limits.h>#include <kernel/thread.h>#include <arch/ops.h>#include <dev/flash.h>#include <dev/flash-ubi.h>#include <lib/ptable.h>#include <dev/keys.h>#include <dev/fbcon.h>#include <baseband.h>#include <target.h>#include <mmc.h>#include <partition_parser.h>#include <platform.h>#include <crypto_hash.h>#include <malloc.h>#include <boot_stats.h>#include <sha.h>#include <platform/iomap.h>#include <boot_device.h>#include <boot_verifier.h>#include <image_verify.h>#include <decompress.h>#include <platform/timer.h>#include <sys/types.h>#if USE_RPMB_FOR_DEVINFO#include <rpmb.h>#endif#if ENABLE_WBC#include <pm_app_smbchg.h>#endif#if DEVICE_TREE#include <libfdt.h>#include <dev_tree.h>#endif#if WDOG_SUPPORT#include <wdog.h>#endif#include <reboot.h>#include "image_verify.h"#include "recovery.h"#include "bootimg.h"#include "fastboot.h"#include "sparse_format.h"#include "meta_format.h"#include "mmc.h"#include "devinfo.h"#include "board.h"#include "scm.h"#include "mdtp.h"#include "secapp_loader.h"#include <menu_keys_detect.h>#include <display_menu.h>#include "fastboot_test.h"#ifdef CONFIG_LK_CUSTOM_P3588#include <smb1360.h>#endif#include <lct/lct_config.h>extern  bool target_use_signed_kernel(void);extern void platform_uninit(void);extern void target_uninit(void);extern int get_target_boot_params(const char *cmdline, const char *part,                  char **buf);void *info_buf;void write_device_info_mmc(device_info *dev);void write_device_info_flash(device_info *dev);static int aboot_save_boot_hash_mmc(uint32_t image_addr, uint32_t image_size);static int aboot_frp_unlock(char *pname, void *data, unsigned sz);/* fastboot command function pointer */typedef void (*fastboot_cmd_fn) (const char *, void *, unsigned);struct fastboot_cmd_desc {    char * name;    fastboot_cmd_fn cb;};#define EXPAND(NAME) #NAME#define TARGET(NAME) EXPAND(NAME)#define DISPLAY_PANEL_HDMI "hdmi"#ifdef MEMBASE#define EMMC_BOOT_IMG_HEADER_ADDR (0xFF000+(MEMBASE))#else#define EMMC_BOOT_IMG_HEADER_ADDR 0xFF000#endif#ifndef MEMSIZE#define MEMSIZE 1024*1024#endif#define MAX_TAGS_SIZE   1024/* make 4096 as default size to ensure EFS,EXT4's erasing */#define DEFAULT_ERASE_SIZE  4096#define MAX_PANEL_BUF_SIZE 196#define FOOTER_SIZE 16384#define DISPLAY_DEFAULT_PREFIX "mdss_mdp"#define BOOT_DEV_MAX_LEN  64#define IS_ARM64(ptr) (ptr->magic_64 == KERNEL64_HDR_MAGIC) ? true : false#define ADD_OF(a, b) (UINT_MAX - b > a) ? (a + b) : UINT_MAX//Size of the header that is used in case the boot image has//a uncompressed kernel + appended dtb#define PATCHED_KERNEL_HEADER_SIZE 20//String used to determine if the boot image has//a uncompressed kernel + appended dtb#define PATCHED_KERNEL_MAGIC "UNCOMPRESSED_IMG"#if USE_BOOTDEV_CMDLINEstatic const char *emmc_cmdline = " androidboot.bootdevice=";#elsestatic const char *emmc_cmdline = " androidboot.emmc=true";#endifstatic const char *usb_sn_cmdline = " androidboot.serialno=";#ifdef CONFIG_LCT_CUSTOM_LX_COMMONstatic const char *lenovo_sn2_cmdline = " androidboot.lenovosn2=";#endifstatic const char *androidboot_mode = " androidboot.mode=";static const char *alarmboot_cmdline = " androidboot.alarmboot=true";static const char *loglevel         = " quiet";static const char *battchg_pause = " androidboot.mode=charger";static const char *androidboot = " androidboot.";//static const char *country_code = "countrycode=";static const char *auth_kernel = " androidboot.authorized_kernel=true";static const char *secondary_gpt_enable = " gpt";static const char *mdtp_activated_flag = " mdtp";static const char *baseband_apq     = " androidboot.baseband=apq";static const char *baseband_msm     = " androidboot.baseband=msm";static const char *baseband_csfb    = " androidboot.baseband=csfb";static const char *baseband_svlte2a = " androidboot.baseband=svlte2a";static const char *baseband_mdm     = " androidboot.baseband=mdm";static const char *baseband_mdm2    = " androidboot.baseband=mdm2";static const char *baseband_sglte   = " androidboot.baseband=sglte";static const char *baseband_dsda    = " androidboot.baseband=dsda";static const char *baseband_dsda2   = " androidboot.baseband=dsda2";static const char *baseband_sglte2  = " androidboot.baseband=sglte2";static const char *warmboot_cmdline = " qpnp-power-on.warm_boot=1";static const char *baseband_apq_nowgr   = " androidboot.baseband=baseband_apq_nowgr";#if VERIFIED_BOOT#if !VBOOT_MOTAstatic const char *verity_mode = " androidboot.veritymode=";static const char *verified_state= " androidboot.verifiedbootstate=";static const char *keymaster_v1= " androidboot.keymaster=1";//indexed based on enum values, green is 0 by defaultstruct verified_boot_verity_mode vbvm[] ={#if ENABLE_VB_ATTEST    {false, "eio"},#else    {false, "logging"},#endif    {true, "enforcing"},};struct verified_boot_state_name vbsn[] ={    {GREEN, "green"},    {ORANGE, "orange"},    {YELLOW,"yellow"},    {RED,"red" },};#endif#endif/*As per spec delay wait time before shutdown in Red state*/#define DELAY_WAIT 30000static unsigned page_size = 0;static unsigned page_mask = 0;static unsigned mmc_blocksize = 0;static unsigned mmc_blocksize_mask = 0;static char ffbm_mode_string[FFBM_MODE_BUF_SIZE];static char area_code_string[AREA_CODE_BUF_SIZE];static bool boot_into_ffbm;static bool get_area_code;static char *target_boot_params = NULL;static bool boot_reason_alarm;static bool devinfo_present = true;bool boot_into_fastboot = false;static uint32_t dt_size = 0;/* Assuming unauthorized kernel image by default */static int auth_kernel_img = 0;#if VBOOT_MOTAstatic device_info device = {DEVICE_MAGIC, 0, 0, 0, 0, {0}, {0},{0}};#elsestatic device_info device = {DEVICE_MAGIC, 0, 0, 0, 0, {0}, {0},{0}, 1};#endifstatic bool is_allow_unlock = 0;static char frp_ptns[2][8] = {"config","frp"};static const char *critical_flash_allowed_ptn[] = {    "aboot",    "rpm",    "tz",    "sbl",    "sdi",    "sbl1",    "xbl",    "hyp",    "pmic",    "bootloader",    "devinfo",    "partition"};struct atag_ptbl_entry{    char name[16];    unsigned offset;    unsigned size;    unsigned flags;};/* * Partition info, required to be published * for fastboot */struct getvar_partition_info {    const char part_name[MAX_GPT_NAME_SIZE]; /* Partition name */    char getvar_size[MAX_GET_VAR_NAME_SIZE]; /* fastboot get var name for size */    char getvar_type[MAX_GET_VAR_NAME_SIZE]; /* fastboot get var name for type */    char size_response[MAX_RSP_SIZE];        /* fastboot response for size */    char type_response[MAX_RSP_SIZE];        /* fastboot response for type */};/* * Right now, we are publishing the info for only * three partitions */struct getvar_partition_info part_info[] ={    { "system"  , "partition-size:", "partition-type:", "", "ext4" },    { "userdata", "partition-size:", "partition-type:", "", "ext4" },    { "cache"   , "partition-size:", "partition-type:", "", "ext4" },};char max_download_size[MAX_RSP_SIZE];char charger_screen_enabled[MAX_RSP_SIZE];char sn_buf[13];char lenovo_sn2_buf[32];char display_panel_buf[MAX_PANEL_BUF_SIZE];char panel_display_mode[MAX_RSP_SIZE];#if CHECK_BAT_VOLTAGEchar battery_voltage[MAX_RSP_SIZE];char battery_soc_ok [MAX_RSP_SIZE];#endifchar get_variant[MAX_RSP_SIZE];extern int emmc_recovery_init(void);#if NO_KEYPAD_DRIVERextern int fastboot_trigger(void);#endif。。。 。。。void aboot_init(const struct app_descriptor *app){   dprintf(INFO, "** [wuchengbing] %s %d %s **.\n", __FILE__, __LINE__, __func__);    unsigned reboot_mode = 0;    dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);          ///reboot_mode    dprintf(INFO, "** [wuchengbing] %d: boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);            ///reboot_mode    /* Initialise wdog to catch early lk crashes */#if WDOG_SUPPORT    msm_wdog_init();#endif    /* Setup page size information for nv storage */    if (target_is_emmc_boot())    {   dprintf(INFO, "** [wuchengbing] %d: if(target_is_emmc_boot()): %d**.\n", __LINE__, target_is_emmc_boot());        page_size = mmc_page_size();        page_mask = page_size - 1;        mmc_blocksize = mmc_get_device_blocksize();        mmc_blocksize_mask = mmc_blocksize - 1;    }    else    {   dprintf(INFO, "** [wuchengbing] %d: else:%d**.\n", __LINE__, target_is_emmc_boot());        page_size = flash_page_size();        page_mask = page_size - 1;    }    ASSERT((MEMBASE + MEMSIZE) > MEMBASE);    dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);          ///reboot_mode    dprintf(INFO, "** [wuchengbing] %d: boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);            ///boot_into_fastboot#ifdef CONFIG_LK_CUSTOM_P3588    smb1360_init();#endif    read_device_info(&device);    read_allow_oem_unlock(&device);    dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);          ///reboot_mode    dprintf(INFO, "** [wuchengbing] %d: boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);            ///boot_into_fastboot    target_serialno((unsigned char *) sn_buf);    get_sn(sn_buf);    dprintf(SPEW,"serial number: %s\n",sn_buf);#ifdef CONFIG_LCT_CUSTOM_LX_COMMON    get_lenovo_sn2();    dprintf(INFO,"lenovo serial number: %s\n",lenovo_sn2_buf);#endif    memset(display_panel_buf, '\0', MAX_PANEL_BUF_SIZE);    /*     * Check power off reason if user force reset,     * if yes phone will do normal boot.     */    if (is_user_force_reset())    {   dprintf(INFO, "** [wuchengbing] is_user_force_reset():%d**.\n", is_user_force_reset());        dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);          ///reboot_mode        dprintf(INFO, "** [wuchengbing] %d: boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);///boot_into_fastboot        goto normal_boot;    }    /* Check if we should do something other than booting up */    dprintf(INFO, "** [wuchengbing] %d: (KEY_VOLUMEUP):%d , (KEY_VOLUMEDOWN):%d **.\n", __LINE__, (KEY_VOLUMEUP), (KEY_VOLUMEDOWN));    dprintf(INFO, "** [wuchengbing] %d: keys_get_state(KEY_VOLUMEUP):%d && keys_get_state(KEY_VOLUMEDOWN):%d **.\n", __LINE__, keys_get_state(KEY_VOLUMEUP), keys_get_state(KEY_VOLUMEDOWN));    if (keys_get_state(KEY_VOLUMEUP) && keys_get_state(KEY_VOLUMEDOWN))                             ///boot_into_ffbm = true;    {#if 0        dprintf(ALWAYS,"dload mode key sequence detected\n");        reboot_device(EMERGENCY_DLOAD);        dprintf(CRITICAL,"Failed to reboot into dload mode\n");        dprintf(INFO, "** [wuchengbing] boot_into_fastboot ;** if.\n");        boot_into_fastboot = true;#else        dprintf(INFO, "** [wuchengbing] boot_into_ffbm = true;** if.\n");        boot_into_ffbm = true;              ///boot_into_ffbm = true;        strcpy(ffbm_mode_string, "ffbm-00");#endif        dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);              ///reboot_mode        dprintf(INFO, "** [wuchengbing] %d: boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);///boot_into_fastboot    }    else{        dprintf(INFO, "**[wuchengbing] %d: boot_into_ffbm = false;** else.\n", __LINE__);        boot_into_ffbm = false;    //  strcpy(ffbm_mode_string, "nomal");    }    dprintf(INFO, "** [wuchengbing] %d: (boot_into_fastboot):%d && (boot_into_ffbm):%d **.\n", __LINE__, (boot_into_fastboot), (boot_into_ffbm));    dprintf(INFO, "** [wuchengbing] %d: (!boot_into_fastboot):%d && (!boot_into_ffbm):%d **.\n", __LINE__, (!boot_into_fastboot), (!boot_into_ffbm));    if (!boot_into_fastboot&&!boot_into_ffbm )    {        dprintf(INFO, "** [wuchengbing] %d: (KEY_HOME):%d , (KEY_VOLUMEUP):%d **.\n", __LINE__, (KEY_HOME), (KEY_VOLUMEUP));        dprintf(INFO, "** [wuchengbing] %d: keys_get_state(KEY_HOME):%d || keys_get_state(KEY_VOLUMEUP):%d **.\n", __LINE__, keys_get_state(KEY_HOME), keys_get_state(KEY_VOLUMEUP));        if (keys_get_state(KEY_HOME) || keys_get_state(KEY_VOLUMEUP))                               ///boot_into_recovery = 1;        {            dprintf(INFO, "** [wuchengbing] if(usb_exist):%d **.\n", (usb_exist));            if(usb_exist) ///lc mike_zhu 2016121f13             ///boot_into_recovery = 1;            {                dprintf(INFO, "** [wuchengbing] (EMERGENCY_DLOAD):%d **.if\n", (EMERGENCY_DLOAD));                reboot_device(EMERGENCY_DLOAD);            }            else            {   dprintf(INFO, "** [wuchengbing] boot_into_recovery = 1;  **.else\n");                boot_into_recovery = 1;            }        }        dprintf(INFO, "** [wuchengbing] %d: boot_into_recovery:%d , (KEY_BACK):%d , (KEY_VOLUMEDOWN):%d **.\n", __LINE__, boot_into_recovery, (KEY_HOME), (KEY_VOLUMEDOWN));        dprintf(INFO, "** [wuchengbing] %d: if( !boot_into_recovery==%d || ( keys_get_state(KEY_BACK)==%d || keys_get_state(KEY_VOLUMEDOWN)==%d) ) **.\n", __LINE__, !boot_into_recovery, keys_get_state(KEY_BACK), keys_get_state(KEY_VOLUMEDOWN));        if (!boot_into_recovery &&  (keys_get_state(KEY_BACK) || keys_get_state(KEY_VOLUMEDOWNlp)))///boot_into_fastboot = true;        {            dprintf(INFO, "** [wuchengbing] boot_into_fastboot = true;  **.if\n");            boot_into_fastboot = true;        }    }    #if NO_KEYPAD_DRIVER    dprintf(INFO, "** [wuchengbing] fastboot_trigger():%d **\n", fastboot_trigger());    if (fastboot_trigger())                                     {   dprintf(INFO, "** [wuchengbing] boot_into_fastboot = true;  **.if\n");                      ///boot_into_fastboot = true;        boot_into_fastboot = true;    }    #endif    //dprintf(INFO, "** [wuchengbing] USE_PON_REBOOT_REG:%d **\n", USE_PON_REBOOT_REG);#if USE_PON_REBOOT_REG    reboot_mode = check_hard_reboot_mode();#else    reboot_mode = check_reboot_mode();    dprintf(INFO, "** [wuchengbing] %d:check_reboot_mode() reboot_mode:%#x **       \n", __LINE__, reboot_mode);            ///reboot_mode    dprintf(INFO, "** [wuchengbing] %d:check_reboot_mode() boot_into_fastboot:%#x **\n", __LINE__, boot_into_fastboot);     ///boot_into_fastboot#endif    dprintf(INFO, "** [wuchengbing] %d: reboot_mode:%#x **\n", __LINE__, reboot_mode);          ///reboot_mode    dprintf(INFO, "** [wuchengbing] RECOVERY_MODE:%#x **\n", RECOVERY_MODE);    dprintf(INFO, "** [wuchengbing] FASTBOOT_MODE:%#x **\n", FASTBOOT_MODE);                    ///FASTBOOT_MODE    dprintf(INFO, "** [wuchengbing] ALARM_BOOT:%#x **\n", ALARM_BOOT);    dprintf(INFO, "** [wuchengbing] DM_VERITY_ENFORCING:%#x **\n", DM_VERITY_ENFORCING);    dprintf(INFO, "** [wuchengbing] DM_VERITY_EIO:%#x **\n", DM_VERITY_EIO);    dprintf(INFO, "** [wuchengbing] ALARM_BOOT:%#x **\n", ALARM_BOOT);    //dprintf(INFO, "** [wuchengbing] DM_VERITY_LOGGING:%#x **\n", DM_VERITY_LOGGING);    dprintf(INFO, "** [wuchengbing] DM_VERITY_KEYSCLEAR:%#x **\n\n", DM_VERITY_KEYSCLEAR);    dprintf(INFO, "** [wuchengbing] VERIFIED_BOOT:%d ...**\n\n", VERIFIED_BOOT);    if (reboot_mode == RECOVERY_MODE)    {   dprintf(INFO, "** [wuchengbing] RECOVERY_MODE:%d **\n", RECOVERY_MODE);        boot_into_recovery = 1;    }    else if(reboot_mode == FASTBOOT_MODE)    {   dprintf(INFO, "** [wuchengbing] FASTBOOT_MODE:%d **\n", FASTBOOT_MODE);        boot_into_fastboot = true;    }    else if(reboot_mode == ALARM_BOOT)    {   dprintf(INFO, "** [wuchengbing] ALARM_BOOT:%d **\n", ALARM_BOOT);        boot_reason_alarm = true;    }#if VERIFIED_BOOT //1    //dprintf(INFO, "** [wuchengbing] !VBOOT_MOTA:%d **\n", !VBOOT_MOTA);#if !VBOOT_MOTA    else if (reboot_mode == DM_VERITY_ENFORCING)    {   dprintf(INFO, "** [wuchengbing] DM_VERITY_ENFORCING:%d **\n", DM_VERITY_ENFORCING);        device.verity_mode = 1;        write_device_info(&device);    }    //dprintf(INFO, "** [wuchengbing] ENABLE_VB_ATTEST:%d **\n", ENABLE_VB_ATTEST);#if ENABLE_VB_ATTEST    else if (reboot_mode == DM_VERITY_EIO)#else    else if (reboot_mode == DM_VERITY_LOGGING)#endif    {   dprintf(INFO, "** [wuchengbing] DM_VERITY_EIO:%d **\n", DM_VERITY_EIO);        //dprintf(INFO, "** [wuchengbing] DM_VERITY_LOGGING:%d **\n", DM_VERITY_LOGGING);        device.verity_mode = 0;        write_device_info(&device);    }    else if (reboot_mode == DM_VERITY_KEYSCLEAR)    {   dprintf(INFO, "** [wuchengbing] DM_VERITY_KEYSCLEAR:%d **\n", DM_VERITY_KEYSCLEAR);        if(send_delete_keys_to_tz())            ASSERT(0);    }#endif#endif    dprintf(INFO, "** [wuchengbing] %d: normal_boot:** before\n", __LINE__);normal_boot:    dprintf(INFO, "** [wuchengbing] %d: normal_boot:** after.\n", __LINE__);    /* Display splash screen if enabled */    dprintf(INFO, "** [wuchengbing] DISPLAY_SPLASH_SCREEN:%d **\n", DISPLAY_SPLASH_SCREEN);#if DISPLAY_SPLASH_SCREEN //    //dprintf(INFO, "** [wuchengbing] NO_ALARM_DISPLAY:%d **\n", NO_ALARM_DISPLAY);#if NO_ALARM_DISPLAY ///NO_ALARM_DISPLAY    if (!check_alarm_boot()) {#endif        dprintf(INFO, "Display Init: Start\n");    //dprintf(INFO, "** [wuchengbing] DISPLAY_HDMI_PRIMARY:%d **\n", DISPLAY_HDMI_PRIMARY);#if DISPLAY_HDMI_PRIMARY    if (!strlen(device.display_panel))        strlcpy(device.display_panel, DISPLAY_PANEL_HDMI,            sizeof(device.display_panel));#endif    //dprintf(INFO, "** [wuchengbing] ENABLE_WBC:%d **\n", ENABLE_WBC);#if ENABLE_WBC        /* Wait if the display shutdown is in progress */        while(pm_app_display_shutdown_in_prgs());        if (!pm_appsbl_display_init_done())            target_display_init(device.display_panel);        else            display_image_on_screen();#else        target_display_init(device.display_panel);#endif        dprintf(INFO, "Display Init: Done\n");    //dprintf(INFO, "** [wuchengbing] NO_ALARM_DISPLAY:%d **\n", NO_ALARM_DISPLAY);#if NO_ALARM_DISPLAY ///NO_ALARM_DISPLAY    }#endif#endif //DISPLAY_SPLASH_SCREEN    dprintf(INFO, "** [wuchengbing] if(!boot_into_fastboot == %d)**\n", !boot_into_fastboot);    if (!boot_into_fastboot)    {        dprintf(INFO, "** [wuchengbing] if(target_is_emmc_boot = %d)**\n", target_is_emmc_boot());        if (target_is_emmc_boot())        {   dprintf(INFO, "** [wuchengbing] %d: if(target_is_emmc_boot == %d)** if \n", __LINE__, target_is_emmc_boot());            dprintf(INFO, "** [wuchengbing] if(emmc_recovery_init == %d)**\n", emmc_recovery_init());            if(emmc_recovery_init())            {                dprintf(ALWAYS,"error in emmc_recovery_init\n");            }            dprintf(INFO, "** [wuchengbing] if(target_use_signed_kernel == %d)**\n", target_use_signed_kernel());            if(target_use_signed_kernel())            {                dprintf(INFO, "** [wuchengbing] if((device.is_unlocked == %d) || (device.is_tampered == %d))**\n", (device.is_unlocked) , (device.is_tampered));                if((device.is_unlocked) || (device.is_tampered))                {                //dprintf(INFO, "** [wuchengbing] TZ_TAMPER_FUSE:%d **\n", TZ_TAMPER_FUSE);                     #ifdef TZ_TAMPER_FUSE                    set_tamper_fuse_cmd();                #endif                //dprintf(INFO, "** [wuchengbing] USE_PCOM_SECBOOT:%d **\n", USE_PCOM_SECBOOT);                #if USE_PCOM_SECBOOT                    set_tamper_flag(device.is_tampered);                #endif                }            }            boot_linux_from_mmc();//        }        else        {   dprintf(INFO, "** [wuchengbing] %d: if(target_is_emmc_boot == %d)** else \n", __LINE__, target_is_emmc_boot());            recovery_init();            //dprintf(INFO, "** [wuchengbing] USE_PCOM_SECBOOT:%d **\n", USE_PCOM_SECBOOT);                 #if USE_PCOM_SECBOOT                dprintf(INFO, "** [wuchengbing] if((device.is_unlocked = %d) || (device.is_tampered = %d))**\n", (device.is_unlocked) , (device.is_tampered));                if((device.is_unlocked) || (device.is_tampered))                {                    set_tamper_flag(device.is_tampered);                }            #endif            boot_linux_from_flash();        }        dprintf(CRITICAL, "ERROR: Could not do normal boot. Reverting "            "to fastboot mode.\n");    }    /* We are here means regular boot did not happen. Start fastboot. */    dprintf(INFO, "** [wuchengbing] aboot_fastboot_register_commands();**before\n");            /* register aboot specific fastboot commands */    aboot_fastboot_register_commands();    dprintf(INFO, "** [wuchengbing] Upartition_dump(); **before\n");            /* dump partition table for debug info */    partition_dump();    dprintf(INFO, "** [wuchengbing] fastboot_init(target_get_scratch_address(), target_get_max_flash_size()); **before\n");         /* initialize and start fastboot */    fastboot_init(target_get_scratch_address(), target_get_max_flash_size());    dprintf(INFO, "** [wuchengbing] FBCON_DISPLAY_MSG:%d **\n", FBCON_DISPLAY_MSG);     #if FBCON_DISPLAY_MSG    dprintf(INFO, "** [wuchengbing] display_fastboot_menu(); **before\n");          display_fastboot_menu();#endif    dprintf(INFO, "** [wuchengbing] %d: aboot() end **\n", __LINE__);       }。。。 。。。APP_START(aboot)    .init = aboot_init,APP_END

Wu_Being 博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《高通Qualcomm平台lk(light kernel)启动流程2——aboot_init()》
http://blog.csdn.net/u014134180/article/details/78132580

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

阅读全文
0 0
原创粉丝点击