qualcomm 平台的lk启动流程

1、前言

这篇文章介绍了msm8916平台的Little Kernel(LK)的启动流程。Little Kernel的作用是在启动的时候初始化硬件,从存储器中载入Linux内核和ramdisk到RAM中,配置初始化寄存器和命令行参数,最后跳转到内核中运行。LK源于www.kernel.com的开源项目。


2、LittleKernel

2.1 概述

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。基于安卓平台的的bootloader即为LK bootloader。

Bootloader有以下的作用:

1)硬件的初始化:建立起中断向量表、MMU、缓存,初始化外设,如存储单元、USB,加密等等;

2)从存储单元加载boot.img;

3)支持烧写和recovery。

注意:LK在32位模式下运行,即使在64位的硬件架构中也是。从32位LK跳转到64位内核须通过安全模式。


2.2 LK的调用流程

LK的代码在bootable/bootloadler/lk目录下可以找到。其中代码又通过各个子文件夹分为:

    app——应用相关

    arch——硬件架构相关

    dev ——设备相关

    Include——头文件

    Kernel——lk系统相关  

    Platform——相关驱动

    Projiect——makefile文件

    Scripts——Jtag脚本

    target ——具体板子相关


1)LK代码的运行流程从arch/arm/crt0.S文件的_start.开始。其完成了以下的工作:

A.初始化CPU;


B.如果(平台相关的流程)需要,会调用__cpu_early_init()函数。该函数位置:platform/msm8916/(arch_init.S):__cpu_early_init.;


C.如果需要,LK会重新配置(Relocate);


D.建立栈;


E.调用kmain()函数。


从kmain()开始的调用流程如图1所示:


2)bootstrap2()的调用流程:


A.由arch/arm/arch.c的arch_init()函数开始,此函数为一个桩函数(stub);


B.platform/<platform>/(platform.c) 的platform_init()函数,同样是一个桩函数;


C.target/<target>/(init.c) 的target_init() 。完成如下工作:初始化SPMI总线,初始化keypad,配置SDC引脚的驱动强度(drive strength)和上拉配置,初始化SD/MMC卡的主控制器,识别MMC卡,设置时钟等等,之后mmc_init(),读取eMMC的分区表,partition_read_table();


D.app/init.c的apps_init()函数,完成以下工作:用宏APP_START和APP_END初始化app, 调用aboot_init(),如果有.entry分区,就用另外一个线程运行app;


E.app/aboot/aboot.c的aboot_init()函数,根据环境配置,以不同模式启动:常规模式,fastboot模式,recovery模式。


2.3 LK 常规启动模式 
启动条件:Recovery标志或者fastboot键值没有设置。


1)从MMC中复制boot.img载入到scratch区(基地址为0x80000000,在target/msm8916/rules.mk指定);


2)从scratch区载入内核到KERNEL_ADDR(从boot image的header中检索到)。载入设备树到TAGS_ADDR(从boot image的header中检索到),然后更新设备树;

3)把命令行(cmd line)作为启动参数,加到设备树的“/chosen”节点。将RAM属性作为“linux, initrd-start” 和“linux, initrd-end”加到设备树的“/chosen”节点;

4)失能缓存、中断,跳转至内核。

2.4 LK fastboot模式 

1)aboot_init()函数会检查boot.img是否存在,以及音量下键是否被按下;


2)通过check_reboot_mode检测启动的原因; 

3)fastboot命令的寄存器处理程序:fastboot_register(cmd_list[i].name,cmd_list[i].cb); 

4)初始化fastboot:fastboot_init(void *base, unsigned size) ,创建一个进程跟fastboot_handler()关联,该进程会等待USB事件。 

2.5 LK recovery模式

1)aboot_init()检查HOME键(KEY_HOME)和音量上键(VOLUME UP)被按下;

2)check_reboot_mode()函数检测启动原因。如果启动原因是RECOVERY_MODE,设置boot_into_recovery = 1;

3)boot_linux_from_mmc()函数会检查: 
if (!boot_into_recovery) { 
……
else { 
index = partition_get_index(“recovery”); 
ptn = partition_get_offset(index); 
……. 

4)从recovery分区获取image:
gned int target_freq, unsigned int relation);



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qualcomm 9x07平台高通公司推出的一款针对IoT设备应用的平台,它采用高通自主研发的高性能芯片,并配备了全新的移动调制解调器(MDM)。 该平台主要针对物联网(IoT)、车联网(V2X)、机器人等应用场景的需求进行优化,具有低功耗、高安全等特点。并且,它能够支持多种连接模式,包含4G LTE、NB-IoT、eMTC,以及Wi-Fi、Bluetooth等传输模式。 在软件平台架构方面,Qualcomm 9x07平台采用了高通自主开发的QSDK软件框架。这个框架有两个关键特点:一是模块化设计,能够方便地实现软件组成的可重用性;二是高集成性,能够使系统开发周期大大缩短。 为了使用户更加方便地进行应用开发,高通还提供了全套的用户开发指导。其中包括了基于QSDK的软件开发工具、应用开发文档、参考设计和示例代码等资源,可以帮助用户更快速地实现自己的应用场景。同时,高通还提供了专业团队支持,能够保证用户的顺利开发。 ### 回答2: Qualcomm 9x07平台是一款高性能的移动通信芯片,主要应用在智能手机、笔记本电脑、平板电脑等移动设备中。它采用Adreno 508 GPU和Hexagon 546 DSP处理器,支持LTE Cat.7/Cat.13标准,可以实现高速无线网络数据传输。同时,它还支持全球主流的定位系统,包括GPS、GLONASS、BeiDou以及Galileo等。 软件平台架构方面,Qualcomm 9x07平台采用基于Android的Qualcomm Reference Design(QRD)平台,可以快速实现移动设备的软件定制和开发。这个平台集成了丰富的软件开发工具和开发支持服务,包括QDART、QXDM、QCAT等,可以帮助开发者快速构建高性能的移动设备应用软件,并实现丰富的多媒体功能。 用户开发指导方面,Qualcomm 9x07平台为开发者提供了丰富的开发工具和指导文档。对于Android开发者来说,可以使用Android Studio集成开发环境,并添加Qualcomm移动平台开发插件,来进行移动设备应用程序的开发。此外,Qualcomm还提供了详细的API文档和参考资料,以帮助开发者了解平台的软件和硬件架构,并掌握移动设备的开发技术。同时,Qualcomm还提供了全面的技术支持和培训服务,帮助开发者尽快掌握移动设备开发技术,并提高软件开发效率和质量。 ### 回答3: 高通9x07平台是一款高度集成的全球通用移动调制解调器(MDM)芯片平台。它旨在为全球范围内的5G连接提供领先的支持。该平台的软件架构是基于高通的现代LTE调制解调器和应用处理器之间的紧密集成。它可以支持多个无线接口,包括5G、LTE Advanced Pro、WCDMA、TD-SCDMA和CDMA2000,同时还集成了全球定位(GPS)和全球导航卫星(GNSS)等功能。 在用户开发方面,高通9x07平台的开发人员可以使用高通提供的一系列工具来开发软件,这些工具包括高通的软件开发工具包(SDK)、开发平台、硬件参考设计和技术支持。通过这些工具,开发人员可以自由设计应用程序、调试代码以及测试运行在9x07平台上的移动应用程序。此外,高通还提供了详细的文档和指南,以支持各种用户开发场景。 总的来说,高通9x07平台具有高度集成、多功能、优秀的性能和可靠性,对于开发人员来说也具有友好的开发环境和支持,使其成为5G时代的重要组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值