基于MT6752的 android 系统启动流程分析报告
Android 开机启动流程

Android的开机流程1. 系统引导bootloader1) 源码:bootable/bootloader/*2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)2. 内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载3. 文件系统及应用init1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能4. 重要的后台程序zygote1)源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa)建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动System Server5. 系统服务system server1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)6. 桌面launcher1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher7. 解锁1) 源码:frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置8. 开机自启动的第三方应用程序1) 源码:ﻫframeworks/base/services/java/com/android/server/am/ActivityManagerService.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefa ult().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。
android启动流程

android启动流程Android启动流程:Android是一款广泛使用的移动操作系统,其启动流程是一个相对复杂的过程,涉及到多个模块的加载和启动。
下面将详细介绍Android的启动流程。
1、开机自检(Boot)当手机开机时,首先进行开机自检。
在这个阶段,系统会检测硬件设备的状态,包括电池是否齐全、屏幕是否正常等。
如果硬件设备通过了自检,系统将会开始启动。
2、引导加载程序(Bootloader)开机自检完成后,系统会加载引导加载程序(Bootloader)。
引导加载程序是硬件平台的一部分,其主要作用是启动操作系统。
在加载引导加载程序的过程中,系统会自动检测手机的存储器设备,确定存储设备中是否有可用的引导文件。
3、Linux内核加载一旦引导加载程序找到可用的引导文件,系统将会加载Linux内核。
Linux内核是Android系统的核心组件,负责管理内存、文件系统、驱动程序等。
4、文件系统加载一旦Linux内核加载完成,系统将会加载文件系统。
Android系统使用的是基于Linux的文件系统,在这个过程中,系统会加载并初始化各个文件系统,包括根文件系统、系统文件系统、数据文件系统等。
5、初始化进程(Init)一旦文件系统加载完成,系统将会启动初始化进程(Init)。
初始化进程是Android系统的第一个进程,其作用是启动系统的各个进程和服务。
6、启动用户空间(System Server)在初始化进程启动后,系统会启动用户空间,加载系统的用户界面等组件。
7、启动应用程序一旦用户空间加载完成,系统将会启动应用程序。
应用程序是Android系统的核心功能,包括系统应用程序和用户安装的应用程序。
系统应用程序包括电话、短信、浏览器等,而用户安装的应用程序则是用户根据自己的需求下载和安装的。
8、应用程序启动完成一旦应用程序启动完成,系统将进入正常运行状态,用户可以通过界面操作手机。
总结:Android系统的启动流程是一个复杂而严密的过程,经过开机自检、引导加载程序、Linux内核加载、文件系统加载、初始化进程、启动用户空间、启动应用程序等多个步骤,最终实现用户界面的显示和应用程序的运行。
MTK系统启动

MTK系统启动流程启动流程图:一 BootRom系统开机,最先执行的是固化在芯片内部的bootrom,其作用比较简单,主要有a.初始化ISRAM和EMMCb.当系统全擦后,也会配置USB,用来仿真USB端口下载镜像。
c.从EMMC中加载preloader到ISRAM中执行。
二 Preloaderpreloader用来初始化外设,配置软件执行环境。
Preloader执行之前,外部Memory没有初始化,故Preloader在内部ISRAM中执行的,其会初始化外部Memory,这样以后的镜像数据就可以加载到外部Memory中来执行。
同时preloader还会初始化UART用来调试,进行META模式握手,配置USB用来下载镜像数据,查找PMT分区表,最后会根据PMT表从EMMC中加载lk/uboot到Memory中来执行。
我们系统有个PMT表,这个是个总的分区表,每个分区数据都可以从这个表中找到。
第一列是该分区起始地址,第二列是该分区占用多少个block,第三列是分区名字。
[0x0000000000000000-0x0000000000ffffff] ( 32768 blocks): "PRELOADER"[0x0000000001000000-0x000000000107ffff] ( 1024 blocks): "MBR" [0x0000000001080000-0x00000000010fffff] ( 1024 blocks): "EBR1" [0x0000000001100000-0x00000000013fffff] ( 6144 blocks): "PRO_INFO" [0x0000000001400000-0x00000000018fffff] ( 10240 blocks): "NVRAM" [0x0000000001900000-0x00000000022fffff] ( 20480 blocks): "PROTECT_F"[0x0000000002300000-0x0000000002cfffff] ( 20480 blocks): "PROTECT_S"[0x0000000002d00000-0x0000000002d1ffff] ( 256 blocks): "SECURE"[0x0000000002d20000-0x0000000002d7ffff] ( 768 blocks): "UBOOT" [0x0000000002d80000-0x000000000417ffff] ( 40960 blocks): "BOOTIMG" [0x0000000004180000-0x000000000557ffff] ( 40960 blocks): "RECOVERY" [0x0000000005580000-0x0000000005b7ffff] ( 12288 blocks): "SECSTATIC" [0x0000000005b80000-0x0000000005bfffff] ( 1024 blocks): "MISC"[0x0000000005c00000-0x0000000005efffff] ( 6144 blocks): "LOGO" [0x0000000005f00000-0x0000000005f7ffff] ( 1024 blocks): "EBR2" [0x0000000005f80000-0x0000000031b7ffff]( 1433600 blocks): "CUSTPACK" [0x0000000031b80000-0x000000003237ffff] ( 16384 blocks): "MOBILE_INFO" [0x0000000032380000-0x0000000032d7ffff] ( 20480 blocks): "APANIC"[0x0000000032d80000-0x000000005537ffff] ( 1126400 blocks): "ANDSYSIMG"[0x0000000055380000-0x0000000061b7ffff] ( 409600 blocks): "CACHE"[0x0000000061b80000-0x00000000a1b7ffff] ( 2097152 blocks): "USER"三 LK(little kernel)lk最主要的工作就是加载kernel和ramdisk,然后跳转到kernel中去执行。
mtk开机启动过程

第一步:启动simulator的时候,直接进入:MMI_task( )1. iacMemInit();2.进入一个while(1)循环。
以后的过程都是通过消息机制,即:一直在这个循环中读取消息,然后做相应的处理。
第一次进入while(1)之后,OslReceiveMsgExtQ(qid, &Message)就读取到一个消息:PRT_MMI_TIMER_IND。
然后就一直在这个循环中读消息。
第二步:Power On读取到消息:MMI_EQ_POWER_ON_INDcase MMI_EQ_POWER_ON_IND:gdi_init();switch (p->poweron_mode) //判断power on的模式{case POWER_ON_KEYPAD: //用户按下开机键OslMemoryStart(TRUE);g_charbat_context.PowerOnCharger = 0; //不是因为充电而开机的InitializeAll(); //初始化,重点学习OslDumpDataInFile();//这个函数不能进入,直接跳过InitNvramData(); //加载保存在NVRAM中的设置的参数mmi_pwron_entry_animation_screen(); //开机动画break;case case POWER_ON_PRECHARGE:case POWER_ON_CHARGER_IN:g_pwr_context.PowerOnMode = p->poweron_mode;InitializeChargingScr();break;case POWER_ON_ALARM: //定时开机AlmInitRTCPwron();break;case POWER_ON_EXCEPTION: //For abnormal reset when invalid SIMOslMemoryStart(TRUE);SetAbnormalReset();InitializeAll();OslDumpDataInFile();ClearInputEventHandler(MMI_DEVICE_ALL);ClearKeyHandler(KEY_END, KEY_LONG_PRESS);InitNvramData();AlmReInitialize();InitAllApplications();mmi_pwron_exception_check_display();break;}执行过开机之后,就不会进入这里了。
android启动流程

android启动流程Android启动流程。
Android系统启动流程是指Android设备在开机时,系统从无到有的整个启动过程。
了解Android启动流程对于开发者和系统维护者来说都是非常重要的,因此本文将对Android启动流程进行详细介绍。
1. 加电启动。
当用户按下设备的电源按钮时,电源管理芯片开始为设备供电,同时CPU开始执行启动代码。
此时,设备进入了启动阶段。
2. Bootloader启动。
在加电启动后,设备会首先运行Bootloader,Bootloader是设备的引导程序,负责初始化硬件并加载操作系统。
Bootloader会检查设备的硬件情况,然后加载操作系统内核。
3. 内核启动。
一旦Bootloader加载了操作系统内核,内核开始初始化设备的硬件,包括CPU、内存、外设等。
内核还会挂载根文件系统,并启动init进程。
4. init进程启动。
init进程是Android系统的第一个用户空间进程,它负责启动系统的其他进程和服务。
init进程会读取init.rc文件,根据文件中的配置启动系统服务和应用程序。
5. 系统服务启动。
在init进程启动后,系统服务会被依次启动。
这些系统服务包括SurfaceFlinger、Zygote、AMS(Activity Manager Service)、PMS(Package Manager Service)等,它们负责管理系统的各个方面,如界面显示、应用程序管理、包管理等。
6. Launcher启动。
当系统服务启动完成后,Launcher会被启动,用户可以看到设备的桌面界面。
Launcher是Android系统的桌面管理器,负责显示桌面、启动应用程序等功能。
7. 应用程序启动。
最后,用户可以通过桌面上的图标启动各种应用程序,进入到自己想要使用的应用程序中。
总结。
Android启动流程经历了Bootloader启动、内核启动、init进程启动、系统服务启动、Launcher启动和应用程序启动等步骤。
android起步过程及各个镜像间的关系

android启动过程及各个镜像间的关系Android启动过程Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中。
可以分析一下它的代码,看看在其中到底做了一些什么样的初始化任务,它的源文件在system/core/init/init.c 中。
它会调用到init.rc初始化文件,这个文件在out/target/product/generic/root下,我们在启动以后,会发现根目录是只读属性的,而且sdcard的owner是system,就是在这个文件中做了些手脚,可以将它改过来,实现根目录的可读写。
通过分析这几个文件,还可以发现,android启动时首先加载ramdisk.img镜像,并挂载到/目录下,并进行了一系列的初始化动作,包括创建各种需要的目录,初始化console,开启服务等。
System.img是在init.rc中指定一些脚本命令,通过init.c进行解析并挂载到根目录下的/system目录下的。
ramdisk.img、system.img、userdata.img镜像产生过程:首先在linux终端下使用命令file ramdisk.img,打印出如下字符ramdisk.img: gzip compressed data, from Unix,可以看出,它是一个gzip压缩的格式,下面对其进行解压,使用fedora自带的工具进行解压,或者使用gunzip进行解压(可能需要将扩展名改为.gz),可以看到解压出一个新的ramdisk.img,这个ramdisk.img是使用cpio压缩的,可以使用cpio 命令对其进行解压,cpio –i –F ramdisk.img,解压后可以看到生成了一些文件夹和文件。
看到这些文件就会明白,它和root目录下的内容完全一样。
说明了ramdisk.img其实是对root 目录的打包和压缩。
Android手机开机问题分析流程

Android手机开机问题分析流程本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、如何抓取开机问题Log一、如何抓取开机问题Log当我们遇到开机问题时候,不同阶段,我们需要不同的Log分析,这样才可以快速方便的解决开机问题,如果没有Log,我们几乎很难分析解决开机问题。
开机问题抓取 Log 流程如下:如何抓取开机问题Log二、开机问题Log 分析流程通过不同阶段的Log,我们进行不同的重点分析。
开机问题Log 分析流程如下:开机问题Log分析流程三、 kernel Log 搜索关键字 fs_mgr在 kernel Log 中搜索关键字 fs_mgr 初步分析定位分区问题。
1. fs_mgr: __mount(source=/dev/block/dm-0,target=/system,type=ext4)=-1System分区mount失败debug方法•a.Kernel log中有emmc “I/O error” ,需要检查emmc相关供电,替换物料交叉实验•b.Log中没有I/O error,回读system分区对比正常机器system.img看文件是否被破坏2.fs_mgr: __mount(source=/dev/block/dm-0,target=/data,type=ext4)=-1Data分区mount失败debug方法a.一般加密的情况/userdata分区会先出现 mount fail情况,然后才解密节点/dev/block/dm-0 or dm-1 , target=/data mount成功,正常userdata mount失败,可能是分区数据毁损,请先readback img, 然后手动进recovery mode 做factory reset 看能否恢复Readback 的userdata img可以对比正常机器看是哪个文件毁损3. init: fs_mgr_mount_all returned an errorDm-verity配置错误引起user版本开不了机(eng版本正常)同步打开/kernel-3.18/arch/arm/configs/${project}_defconfig 中如下两个定义:1.CONFIG_DM_VERITY=y2.CONFIG_DM_VERITY_FEC=y4.fs_mgr: Error loading verity table (Invalid argument) 跳转至3四、uart log中搜索关键字 SBC,是否存在error/ fail/ assert五、开始时间长的问题分析方法1. MTK 平台开机时间保存的文件a.手机中(/proc/bootprof)mobile Log中的bootprof文件。
android手机启动过程与刷机简单分析

android手机启动过程与刷机简单分析这几天看了一些嵌入式linux系统和智能手机android系统的资料,琢磨了一下安卓手机的启动过程,虽然每种手机的CPU、主板和存储器有差别,但大致过程相似。
分享一下:手机按下电源开关键后:1、主板上电,CPU芯片加载自身片上的一小段引导代码bootloader(代码的作用:告诉CPU到哪里去寻找系统启动程序,比如到NAND flash接口去读用户程序);2、CPU按扇区方式将NAND FLASH第一个block内的SPL(Second Program Loader二次引导程序即fastboot)加载到RAM,读取分区表,加载基本设备驱动,读取boot分区的linux内核系统;由于SPL对usb设备的支持,所以我们在手机开机时通过按开机键+音量键(不同手机可能按键组合不同),可以进入fastboot工程模式,在这种模式下能通过电脑、USB线对手机进行底层操作。
3、由linux内核加载sysytem分区内的安卓系统程序;第一段引导代码bootloader很小,cpu出厂前已经固化在芯片上了,也叫onchip引导代码,不可人工改写。
二次引导程序SPL是利用JTAG仿真器固化在Nand flash的最前端或后端,我们刷机时能进入fastboot工程模式就是它的功劳。
手机厂商对这段引导程序一般都会加锁,防止用户修改,如果这段代码被破坏,手机就成砖了,只能靠专用设备烧录或返厂维修。
只要手机能进fastboot工程模式,刷recovery、root和刷Rom都是以后的事情了,基本上不会破坏以上两段引导程序。
只要固化的引导程序完好,即使刷机时手机不能进入系统,只要能显示第一屏,一般来说都有挽救的希望,不要变砖。
刷recovery就是在recovery分区安装类似于电脑上ghost一键恢复的程序。
刷Rom包就更简单了,跟电脑装系统一样,就是将安卓系统文件覆盖进手机的system分区。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MT6752的Android系统启动流程分析报告1、Bootloader引导 (2)2、Linux内核启动 (23)3、Android系统启动 (23)报告人:日期:2016.09.03对于Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。
但根据芯片架构和平台的不同,在启动的Bootloader阶段会有所差异。
本文以MTK的MT6752平台为例,分析一下基于该平台的Android系统启动流程。
1、Bootloader引导1.1、Bootloader基本介绍BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备,目的就是引导linux操作系统及Android框架(framework)。
它的主要功能包括设置处理器和内存的频率、调试信息端口、可引导的存储设备等等。
在可执行环境创建好之后,接下来把software装载到内存并执行。
除了装载software,一个外部工具也能和bootloader握手(handshake),可指示设备进入不同的操作模式,比如USB下载模式和META模式。
就算没有外部工具的握手,通过外部任何组合或是客户自定义按键,bootloader也能够进入这些模式。
由于不同处理器芯片厂商对arm core的封装差异比较大,所以不同的arm处理器,对于上电引导都是由特定处理器芯片厂商自己开发的程序,这个上电引导程序通常比较简单,会初始化硬件,提供下载模式等,然后才会加载通常的bootloader。
下面是几个arm平台的bootloader方案:marvell(pxa935) : bootROM + OBM + BLOBinformax(im9815) : bootROM + barbox + U-bootmediatek(mt6517) : bootROM + pre-loader + U-bootbroadcom(bcm2157) : bootROM + boot1/boot2 + U-boot而对MT6752平台,MTK对bootloader引导方案又进行了调整,它将bootloader分为以下两个部分:(1) 第1部分bootloader,是MTK内部(in-house)的pre-loader,这部分依赖平台。
(2) 第2部分bootloader,是LK(little kernel的缩写,作用同常见的u-boot差不多),这部分依赖操作系统,负责引导linux操作系统和Android框架。
1.2、bootloader的工作流程1.2.1 bootloader正常的启动流程先来看启动流程图:正常启动的主要工作如下:(1) 设备上电后,Boot ROM开始运行。
(2) BootROM初始化软件堆栈(software stack)、通信端口和可引导存储设备(比如NAND/EMMC)。
(3) BootROM从存储器中加载pre-loader到内部SRAM(ISRAM)中,因为这时候还没有初始化外部的DRAM。
(4) BootROM跳转到pre-loader的入口处并执行。
(5) Pre-loader初始化DRAM和加载U-Boot到RAM中。
(6) Pre-loader跳转到U-Boot中并执行,然后U-Boot做一些初始化,比如显示的初始化等。
(7) U-Boot从存储器中加载引导镜像(boot image),包括linux内核和ramdisk(Android呢?)(8) U-Boot跳转到linux内核并执行。
正常的下载主要工作如下:(1) 设备上电后,Boot ROM开始运行。
(2) BootROM初始化软件堆栈(software stack)、通信端口和可引导存储设备(比如NAND/EMMC)。
(3) BootROM通过UART/USB和flash工具握手。
(4) BootROM通过UART下载pre-loader镜像到NAND flash/EMMC中,然后重启。
(5) BootROM加载pre-loader到内部SRAM汇总,因为DRAM还没有初始化。
(6) BootROM跳转到pre-loader并执行。
(7) Pre-loader初始化DRAM和通过USB与flash工具握手。
(8) Pre-loader通过USB下载其余镜像文件,比如U-Boot、boot image、recovery image、android system image、user data到NAND FLASH/EMMC中。
1.2.3 Bootloader备用的下载流程(emergency download procedure)(1) 设备上电后,Boot ROM开始运行。
(2) BootROM初始化软件堆栈(software stack)、通信端口和可引导存储设备(比如NAND/EMMC)。
(3) BootROM在emergency DL按键按下后,通过USB和flash工具握手。
(4) BootROM通过USB把指定的镜像文件下载到NAND FLASH/EMMC中。
1.3、Pre-loader启动过程1.3.1 Pre-loader的功能pre-loader是MTK内置的loader,它的主要功能如下:(1) 负责在芯片组平台(chipset platform)上准备好可执行的环境(2) 如果外部工具有效,它会试图通过UART或是USB来和外部工具握手。
(3) 从NAND/EMMC加载U-Boot,并跳转到U-Boot。
(4) 使用工具握手,设备能够触发进入下载模式来下载需要的镜像,或是进入工厂/测试模式,比如META模式和ATE工厂模式,在这些模式下可以测试模块,或是通过传递引导参数给U-Boot和linux内核来校准设备(device calibration)1.3.2 Pre-loader中涉及的硬件部分当系统启动时,芯片组(chipset)内部的可引导ROM开始执行,并从可引导存储设备(NAND/EMMC等等)上拷贝pre-loader。
所以,需要通过初始化一些硬件模块来为软件创造必要的可执行环境(essential execution environment),所有这些硬件模块在接下来描述。
(1) PLL模块1) PLL模块用于调整处理器和外部内存的频率。
2) 在PLL模块初始化后,处理器和外部内存的频率可由26MHZ/26MHZ增加到1GHZ/192MHZ。
(2) UART模块1) UART模块用于调试或是META模式下的握手。
2) 默认情况下,UART4初始化波特率为9216000bps和用于调试信息的输出,UART1初始化为115200bps和作为UART META默认端口。
但也可以使用UART1作为调试或是UART META端口。
(3) 计时器(timer)模块这是个基本的模块,用来计算硬件模块所需要的延时或是超时时间。
(4) 内存模块1) Pre-loader由boot ROM加载和在芯片组内部的SRAM中执行,因为外部的DRAM还没有初始化。
2) 为了准备软件整个可执行环境,pre-loader采用内置的内存设置来初始化DRAM(DRAM is initialized upon pre-loader built-inmemory settigns)。
这样,U-Boot 就能够被加载到DRAM中并执行。
(5) GPIO模块(6) PMIC模块为了提供一些基本的硬件功能,比如控制外设电源,pre-loader初始化上层模块(upper modules)。
(7) RTC模块1) 当通过power按键开机后,pre-loader拉高RTC的PWBB来保持设备一直有电(keepthe device alive)和继续引导U-Boot。
2) RTC闹钟(alarm)有可能是设备开机的启动源,对于这种情况,设备部需要按power按键就可自动启动。
(8) USB模块当USB线插入时,它初始化来和外部工具通信,比如用于升级系统的下载工具或是META模式触发器的META工具。
(9) NAND模块(10) MSDC模块Pre-loader可以从NAND flash或是EMMC中加载U-Boot,这两者只能选择其中一种来启动。
1.3.3 Pre-loader的过程(procedure)和流程(flow)1.3.4 pre-loader的上电情景函数位置在:\mediatek\platform\mt6752\preloader\src\core\download.c定义。
1.3.6 具体的代码分析过程代码位置:\mediatek\platform\mt6752\preloader\src\core\main.c代码位置:mediatek\platform\mt6752\preloader\src\core\handshake_usb.c代码位置:mediatek\platform\mt6752\preloader\src\src\drivers\usbtty.c代码位置:\mediatek\platform\mt6752\preloader\src\core\handshake_usb.c代码位置:\mediatek\platform\mt6752\preloader\src\core\download.c 从Bus_hound分析工具,可以看到usb与flash tool工具的握手情况。
1.4、LK启动过程LK是little kernel的简称,是一种bootloader(作用同常见的u-boot差不多),是Travis Geiselbrecht开发的一个开源项目,github地址为git:///travisg/lk.git,而mtk的代码中就用到了LK。
它由pre-loader引导并执行。
从根本上来说(basically),pre-loader已经初始化了相关的硬件模块,而不需要在LK中重新配置这些模块了。
但一些模块在LK中被重新复位来配置硬件寄存器,这样可创造一个干净的环境。
比如计时器模块,在LK中,计时器重新复位清零硬件计数来对计时进行复位。
所有在LK中需要初始化的列在下面:(1) 计时器模块通过复位硬件寄存器来复位计时。
(2) 串口模块LK采用串口模块来配置它的输入/输出系统,在这个模块初始化后,我们可以使用LK提供的“printf(…)”等函数来使用串口功能。
(3) I2C模块(4) PWM模块(5) PMIC模块(6) RTC模块和计时器模块一样,在LKt中,I2C/PMIC/RTC重新复位寄存器来复位这些模块。