介绍BootLoader、PM、kernel和系统开机的总体流程

简介: 介绍BootLoader、PM、kernel和系统开机的总体流程

一、开机总体流程


二、相关的子系统

bootloader:嵌入式系统的引导加载程序,用于硬件设备初始化

PM:低功耗电源管理程序,待机及唤醒支持

recovery:android的修复子系统,复位及系统升级支持

kernel:linux内核,硬件维护,底层支持。

Android:基于linux的开源系统,框架与应用层。


三、各个环节做了什么


四、bootloader的介绍

嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

1、常用的bootloader:uboot

选择uboot的理由:


  • 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
  • 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
  • 较高的可靠性和稳定性;
  • 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
  • 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
  • 较为丰富的开发调试文档与强大的网络技术支持;

2、uboot主要用来做什么

硬件初始化(设置处理器模式、关闭看门狗、屏蔽中断、初始化sdram、设置栈、设置时钟、从flash引导内核到内存)

上电判断:

AC/DC开机:

AC,Alternating Current,交流电,我们通常代指硬上电

DC,Direct Current,直流电,我们通常代指软开机

开机根据bootmode判断上电开机、上电待机、上电记忆

3、U盘升级

4、AB分区和recovery

5、uboot的ab分区

  • 校验完整性(flash)
  • 判断分区active
  • 根据需要启动加载active分区数据

6、bootcmd和bootargs

uboot的两个环境变量

uboot的环境变量:本质是一个字符数组,在uboot中其实是作为一个全局变量在读写使用。 可以通过串口在boot的shell窗口通过setenv,printenv,savenv等命令操作,常用于调试。 uboot运行时从

flash加载到DDR中使用。修改后,使用saveenv,会把DDR中的环境变量更新到flash中。注意,saveenv时其实整个环境变量都被保存了一遍,而不是只保存更改了的。


  • bootargs:是系统的启动参数,通过cmdline的方式传递给kernel。常见的调试项如loglevel,selinux开关等都通过bootargs从boot传递给kernel实现。
  • bootcmd:是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。


五、PM(低功耗电源管理程序)

1、PM主要负责

  • 待机功耗管理
  • 触发唤醒

2、PM在代码中体现

一个main函数初始化,然后进入vTask,死循环等待唤醒。

3、常见的唤醒方式

IR唤醒、按键唤醒、CEC唤醒、RS232唤醒、网络唤醒、IO唤醒等


4、PM调试开发注意事项

  • PM可控制的IO有限,大部分IO在PM下无法控制,电子设计时需要考虑,如需待机时控制的IO口需要使用PM口,如LED灯。
  • PM程序空间有限,无法实现多/复杂的功能。极端情况需要做功能取舍。


六、kernel

系统内核,Android的基石

  • 管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力;
  • 管理内存,决定内存的分配和回收,也就是内存管理的能力;
  • 管理硬件设备,为进程与硬件设备之间提供通信能力,也就是硬件通信能力;
  • 提供系统调用,如果应用程序要运行更高权限运行的服务,那么就需要有系统调用,它是用户程序与操作系统之间的接口。

1、kernel启动阶段

  • 内核引导阶段。通常使用汇编语言编写,主要检查内核与当前硬件是否匹配。这部分也与硬件体系结构相关。内核引导阶段相关的代码主要位于 kernel /arch/arm/kernel/head.S和kernel /arch/arm/kernel/head-common.S。
  • 内核启动阶段。引导阶段结束前,将调用start_kernel()进入内核启动阶段。内核启动阶段相关的代码主要位于kernel/init/main.c。

2、init进程

Android系统的核心进程,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。Init进程承上启下,是Android启动的核心进程。

相关文章
|
Linux 网络安全 开发工具
Git拉取代码的完整示例操作
Git拉取代码的完整示例操作
1519 0
|
缓存 移动开发 JavaScript
PCIe 参考时钟架构 (Refclk Architecture)
PCIe 参考时钟架构 (Refclk Architecture)
7058 0
PCIe 参考时钟架构 (Refclk Architecture)
|
6月前
|
数据采集 存储 SQL
五问数据质量,一文讲透从根源到治理应用
在国家推动数据要素化改革背景下,数据已成为驱动新质生产力和产业变革的核心要素。本文聚焦企业在数据质量治理中的五大核心问题,解析数据质量问题来源、治理目标、责任划分、实施路径与评估方法,为企业构建可持续的数据质量保障机制提供实践指导。
|
机器学习/深度学习 弹性计算 人工智能
大模型进阶微调篇(三):微调GPT2大模型实战
本文详细介绍了如何在普通个人电脑上微调GPT2大模型,包括环境配置、代码实现和技术要点。通过合理设置训练参数和优化代码,即使在无独显的设备上也能完成微调,耗时约14小时。文章还涵盖了GPT-2的简介、数据集处理、自定义进度条回调等内容,适合初学者参考。
2772 6
|
人工智能 文字识别 自然语言处理
探索古彝文AI识别技术:助力中国传统文化的传承与发扬
随着科技的不断发展,OCR(Optical Character Recognition,光学字符识别)技术在各个领域得到了广泛应用。 近年来,古彝文作为一种具有悠久历史和独特魅力的文字,逐渐受到了学者们的关注。探索古彝文识别OCR技术,不仅有助于挖掘、整理和传承中国传统文化,还能为现代科技与文化的交流搭建桥梁。
964 0
|
Android开发 开发者
Android启动优化之精确测量启动各个阶段的耗时
Android启动优化之精确测量启动各个阶段的耗时
Android启动优化之精确测量启动各个阶段的耗时
|
数据处理 开发者 UED
FastAPI 的模板引擎简直太神奇啦!这就是构建动态 Web 页面的终极秘籍,快来一探究竟!
【8月更文挑战第31天】FastAPI 是一款高性能异步 Web 框架,可通过集成模板引擎(如 Jinja2 或 Mako)实现动态页面渲染。使用模板引擎可分离页面结构与数据,简化代码并提升可维护性。此外,它还提供丰富的语法支持,如循环和条件判断,从而增强页面展示效果及开发效率。通过简单的配置步骤,即可在 FastAPI 中启用模板引擎,显著改善用户体验。
1485 2
|
消息中间件 Kafka 数据安全/隐私保护
Python IPC实战指南:构建高效稳定的进程间通信桥梁
【8月更文挑战第3天】在软件开发中,高效的进程间通信(IPC)对于构建复杂系统至关重要。本文通过分布式日志处理系统的案例,演示如何利用Python实现可靠的IPC。系统由多个收集日志的进程及中心服务器构成,选用套接字作为IPC机制以支持跨网通信与并发。实战包括定义通信协议、实现日志发送与接收功能,并进行测试部署。此方案不仅展现了Python在IPC领域的强大能力,还为实际应用中的错误处理、数据安全等问题提供了思考方向。
232 1
|
存储 缓存 Linux
Android 系统的分区
Android 系统的分区
1168 1
|
传感器
嵌入式系统中的中断屏蔽
嵌入式系统中的中断屏蔽
421 1