为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

究浅意深_Android_3

2011-11-08 26页 pdf 951KB 20阅读

用户头像

is_438530

暂无简介

举报
究浅意深_Android_3 Android(3) 林耕书 Qualcomm MSM7627 平台 Boot浅析(1) 究浅意深android之实战篇系列 Mail:booklinbook@hotmail.com TEL :13167032980 Agenda ™ 大致介绍一下bootloader的概念 ™偷偷看一眼Qct Download的时候都烧了哪些东 西 ™结合代码顺一遍ARM9,ARM11的启动(boot) 流程 ™根据现有查到的资料,罗列启动代码需要修改的 地方,并连猜带蒙谈谈各个修改点的作用。 ™ Bootload...
究浅意深_Android_3
Android(3) 林耕书 Qualcomm MSM7627 平台 Boot浅析(1) 究浅意深android之实战篇系列 Mail:booklinbook@hotmail.com TEL :13167032980 Agenda ™ 大致介绍一下bootloader的概念 ™偷偷看一眼Qct Download的时候都烧了哪些东 西 ™结合代码顺一遍ARM9,ARM11的启动(boot) ™根据现有查到的资料,罗列启动代码需要修改的 地方,并连猜带蒙谈谈各个修改点的作用。 ™ Bootloader是什么,为什么需要bootloader? (白板上说明,ppt以后补上) QCT Download ™ 看截图,听我说,大家点评。 Appsboot Qcsbl boot Oemsbl boot Amss Arm9端的烧写 ™Arm11 android端,用fastboot命令行来烧 Arm11 android 端的烧写 就两条命令:第一个命令中的boot.img不是 bootloader,而是linux kernel和ram disk。 名字取的不好。第二个命令烧的system.img 就是Android Root FS ™谁生了谁,谁是谁生的? Amss Arm9 的代码生成的Image们 Android Arm11 的代码生成的Image们 copy Appsboot.mbn和bootloader两个文件 是一模一样的,重命名了 一下而已。 ™ 上面罗列了一堆,现在结合 Qualcomm提供的这幅图, 我小结一下。听我口述。 ™QCSBL的主要工作是: -Continue to setup the hardware. 继续对硬件进行设置。 - For NAND, find active multi-image boot block. 从nand中,查找出激 活的多镜像块。 - Load OEM-SBL header. 加载oemsbl镜像的头信息块(mibib格式,后面 会介绍)。 - Load OEM-SBL image. 加载oemsbl镜像。 - Authenticate OEM-SBL.鉴定OEM-SBL镜像合法性。 - Execute OEM-SBL image.运行加载好的OEM-SBL模块。 - Load AMSS header.加载AMSS镜像的头信息块。 - Load AMSS image.加载AMSS镜像。 - Authenticate AMSS if required.鉴定AMSS镜像合法性,如果需要的话。 -Transfers control to the AMSS image 把控制权交给amss代码。 其中红字部分是关键点,右面结合代码,逐个分析。 ™ OEMSBL干的活儿可多了,主要的我罗列几条: - 根据平台的硬件特点,进一步对硬件和周边设备进行初始 化,比如对usb,mmu,bus ,mpu~~模块的初始化。 - Download过程的实现。Qct downloader 烧写代码时,手机 端就是oemsbl部分来配合烧写的。 -加载ARM11 appsboot,并唤起arm11.这个是最主要的功能。 后面结合oemsbl的代码在具体分析。 另:Appsboot是Arm11 Android端的启动代码。这部分要下次专门 ppt讲解,期待《浅析2》 Amss就是arm9 modem通讯模块了,这里就不做介绍了。 ™ “Multi image” “Mibib” “ Image Header” ~~~ 结合几副截图,我们再来讨论几个问题。(听我口述,ppt以后 补上) qcsbl.s oemsbl.s oemsbl.s qcsbl.s From qcsbl.scl qcsbl.scl From Oemsbl.scl oemsbl.scl oemsbl_aarm_boot.c oemsbl_mc.c ™ Image Header (hex) oemsblhd.mbn 0x0d740000 代表oemsbl加载的起始地址 Little end 0x00062640 oemsbl image 大小 0x0d740000+ 0x00062640= 0xD7A2640 表示尾巴的地址 In targtfncknlym.h #define SCL_EBI1_MEM_TOTAL_SIZE 0x10000000 #define SCL_MODEM_TOTAL_SIZE 0x2700000 #define SCL_MODEM_CODE_BASE ((SCL_EBI1_MEM_TOTAL_SIZE) - (SCL_MODEM_TOTAL_SIZE)) //0x10000000-0x2700000=0x0D900000 #define SCL_OEMSBL_TOTAL_SIZE 0x001C0000 #define SCL_OEMSBL_CODE_BASE ((SCL_MODEM_CODE_BASE) - (SCL_OEMSBL_TOTAL_SIZE)) //0xD900000-0x001C0000=0x0D740000 ™同理,看看其他几个Image Header appsboothd.mbn amsshd.mbn typedef struct { image_type image_id; uint32 header_vsn_num; uint32 image_src uint8* image_dest_ptr; uint32 image_size; uint32 code_size; uint8* signature_ptr; uint32 signature_size; uint8* cert_chain_ptr; uint32 cert_chain_size; } mi_boot_image_header_type; miheader.h 我连蒙带猜, mibib是个什么东西, 文档中我没有找到。 这些header在加载时 就会起到定位的做用, 后面代码分析,就会看到。 这些header都是 image_header.exe生成的。 这参见(image_header.c). Appsboot的header是android代码中 的mkheader工具生成的(mkheader.c)。 appsboothd.mbn ™ 通过以上我吐沫横飞的讲解,估计大家应该稀里糊涂的 大致了解了一下,启动的流程,有哪些启动模块,他们 之间的关系是什么,各自做了什么动作。下面我们结合 代码介绍。并罗列出关键点供大家以后跟踪参考。 “打蛇打七寸,看启动代码找 G--Point(guan jian point)。从 qcsbl.s开始。” 结合代码顺一遍 AREA QCSBL_ENTRY, CODE, READONLY CODE32 ENTRY __main _main …. …. ldr r1, =qcsbl_main_ctl blx r1 qcsbl.s In qcsbl_mc.c void qcsbl_main_ctl(void) { qcsbl_create_vector_table(); qcsbl_hw_init( &msm_hw_id ); if ( flash != NOR_FLASH ) {qcsbl_find_mibib( flash, &old_mibib_page_num, &mibib_page_num );} image_header.image_id = OEM_SBL_IMG; qcsbl_load_header( flash,&image_header, mibib_page_num ); qcsbl_load_image( flash, &image_header ); sbl = (sbl_func_tbl_ptr_type)image_header.image_dest_ptr; sbl->init( &qcsbl_interface ); qcsbl_create_bad_block_list( flash ); sbl->setup_trusted_platform(); sbl->pre_amss_load(); sw_vsn_id = (uint64) AMSS_SW_ID; amss_func_ptr = (func_ptr_type) qcsbl_load_amss_image( flash,&msm_hw_id,&sw_vsn_id); sbl->post_amss_load(); (*amss_func_ptr)(); } qcsbl_main_ctl qcsbl_load_header(); qcsbl_load_image(); sbl->init(); 加载oemsbl,运行oemsbl函数列表 qcsbl_hw_init硬件初始化 sbl->pre_amss_load(); 加载Appsboot arm11 android 被oemsbl启动 qcsbl_load_amss_image( ); 加载amss iamge。 (*amss_func_ptr)(); 运行amss Qcsbl骨架 PRESERVE8 AREA OEMSBL_FUNCTION_TABLE, DATA, READONLY DCD oemsbl_bad_block_check DCD oemsbl_read_page DCD oemsbl_write_page DCD oemsbl_is_erased DCD oemsbl_erase_block DCD oemsbl_error_handler DCD oemsbl_init DCD oemsbl_setup_trusted_platform DCD oemsbl_pre_amss_load DCD oemsbl_post_amss_load DCD oemsbl_disable_data_cache DCD oemsbl_re_enable_data_cache DCD oemsbl_read_mpages Oemsbl.s qcsbl_load_header(); qcsbl_load_image(); sbl->init(); 加载oemsbl,运行oemsbl函数列表 前面一页 sbl->pre_amss_load(); 加载Appsboot arm11 android 被oemsbl启动 前面一页 Oemsbl骨架 oemsbl_pre_amss_load() //加载arm11 的appsboot oemsbl_load_aarm_bootloader, oemsbl_create_aarm_partition_tbl, .. oemsbl_boot_aarm //启动arm11 oemsbl_init oemsbl_init_func_tbl[i](); 硬件进一步初始化 oemsbl_dload_check //qct download 下载相关。 oemsbl_setup_trusted_platform() //给arm11运行建立一个良好的环境 还有很多底层的琐碎的设置,如 axi mpu ram Usb charge~~~ 这里不列出来。 In oemsbl_aarm_boot.c //加载 appsboot void oemsbl_load_aarm_bootloader( void ) {… /* Load the aARM boot loader header from flash into RAM. */ image_header.image_id = APPSBL_IMG; qcsbl_ptr->load_image_header( qcsbl_ptr->boot_flash, &image_header, qcsbl_ptr->active_mibib_page_number ); …. apps_image_start_addr = (uint32) image_header.image_dest_ptr; …. } 口头讲解 In oemsbl_aarm_boot.c //启动arm11 void oemsbl_boot_aarm( void ) { HWIO_OUTM( MSM_RAIL_CLAMP_IO, HWIO_FMSK( MSM_RAIL_CLAMP_IO, VDD_APC_CLAMP ), 0x0 ); .. HWIO_OUTM( A11_RESET,HWIO_FMSK( A11_RESET, POR ), 0x0 ); .. HWIO_OUT( APPS_ARM_DEBUG_CTL, 0x01 ); .. HWIO_OUT( A11_RESET, 0x0 ); } /* oemsbl_boot_aarm() */ 口头讲解 Amss修改点的研究 ™ 前面是对 arm9 启动部分做一个粗超的讨 论,给大家一个整体的认识。 但对于一个具体项目来说,认识整体还不 够,我们还要根据项目具体要求和硬件特性, 修改arm9 amss代码,让系统工作起来。下 面就来一起讨论这个问题。 时间有限这个部分下次接着讲。Seeyou byebye Android(3) Agenda QCT Download� 结合代码顺一遍 Amss修改点的研究
/
本文档为【究浅意深_Android_3】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索