本文共 20980 字,大约阅读时间需要 69 分钟。
更多相关文章:
《高通Qualcomm平台lk(light kernel)启动流程1——aboot_init()之前》:
《高通Qualcomm平台lk(light kernel)启动流程2——aboot_init()》: 《高通Qualcomm平台lk(light kernel)启动流程3——到高通lcm屏点亮》:《[lcm] Qualcomm Android Display Subsystem 架构》
《[lcm] Qualcomm平台的显示屏lcd驱动移植步骤》:
《[lcm] Qualcomm平台兼容多显示屏lcd的方法&并从lk传输到kernel过程》: 《[lcm] Qualcomm平台显示屏lcd添加I2C读取功能》:下面是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#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if USE_RPMB_FOR_DEVINFO#include #endif#if ENABLE_WBC#include #endif#if DEVICE_TREE#include #include #endif#if WDOG_SUPPORT#include #endif#include #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 #include #include "fastboot_test.h"#ifdef CONFIG_LK_CUSTOM_P3588#include #endif#include 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()》如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。