随笔分类 - Bootup
摘要:一、核心结论(先看结论) /dev 下的设备节点是由 用户空间进程 ueventd(Android 的简化版 udevd)创建的。 设备节点的创建是因为 内核在设备注册时(device_register)通过 kobject_uevent() 发送了 uevent 消息。 ueventd 监听这些来
阅读全文
摘要:PEI 阶段 PEI 阶段有它自己的使命,其中非常重要的一个就是初始化内存,建立内存信息,然后传给下一个阶段。为了完成PEI 的这些任务,它也需要有内存管理。 PEI 阶段最为重要的结构是HOB, 初始化内存服务前,PEI 申请的内存其实是插入到FV 文件 也就是FLASH 里面去运行。 在此状态下
阅读全文
摘要:本文接着上文开始往下讲 1. SecondStageMain 此时就到了init的第二阶段。 int main(int argc, char** argv) { ... //执行此处 if (!strcmp(argv[1], "second_stage")) { return SecondStage
阅读全文
摘要:本文接着上文开始讲解,上文中最后一步执行后会执行init启动过程中的第二步SetupSelinux(Selinux配置阶段),这样又会走到main.cpp中的main方法。 1. SetupSelinux 由于上一篇中最后一步在重新执行init的时候携带了参数selinux_setup,所以此处会走
阅读全文
摘要:开机有好几种方式启动,本文主要讲的是按Power键开机流程。 本文参考AOSP 12原生代码,链接为:AOSP 12 Searchhttp://aospxref.com/android-12.0.0_r3/ 1. BootLoader加载 当按下设备电源键时,最先运行的就是 bootloader(固
阅读全文
摘要:kernel/reboot.c void kernel_restart(char *cmd) { kernel_restart_prepare(cmd); migrate_to_reboot_cpu(); syscore_shutdown(); if (!cmd) pr_emerg("Restart
阅读全文
摘要:一、预加载机制总览 Zygote通过预加载关键系统资源,实现子进程的快速启动。其核心逻辑包括: 关键特性: 在Zygote启动阶段完成 使用共享内存减少内存占用 支持动态配置预加载清单 与fork机制协同工作 二、预加载流程源码解析 1. 入口方法 // frameworks/base/core/j
阅读全文
摘要:综述 FDF的全称是Flash Description File。 它是构成BIOS二进制的描述符,即FDF文件描述了BIOS二进制的组成结构。 本文的目的就是介绍FDF文件内部的组成以及它们是如何完成对BIOS二进制的描述。 下面首先来看下BIOS二进制的大致结构: 上述的结构中有几个需要说明关键
阅读全文
摘要:EDK II增加新的代码后,uefi编译编译报错,错误如下: Fd File Name:QCOMMODULE_EFI Generate Region at Offset 0x0 Region Size = 0x22000 Region Name = FV Generating FVMAIN_COMP
阅读全文
摘要:很早就听说过board-id能用来区分项目,没负责过这个,也一直没有时间去了解。board-id的可以通过gpio或者eeprom来存放,board-id也就是CDT中的部分内容,如果时gpio的方式,可配置的项目有些而且在主板上的都是hardcode,这样不利于维护。 XBL-CDT defaul
阅读全文
摘要:在上一篇博文中主要描述了启动流程,及代码执行流程,并重点介绍了一下我重点关注的部分。这个sbl部分也算有点庞大,我们没有精力也没有必要去分析全部,所以接下来就来分析一下sbl1中另外几个需要格外关注的部分: CDT :主要提供平台设备数据 log system:log日志系统,当然没有kernel里
阅读全文
摘要:高通8k平台的boot过程搞得比较复杂, 我也是前段时间遇到一些问题深入研究了一下才搞明白。不过虽然弄得很复杂,我们需要动的东西其实很少,modem侧基本就sbl1(全称:Secondary boot loader)的代码需要动一下,ap侧就APPSBL代码需要动(对此部分不了解,可参照:boota
阅读全文
摘要:Systemd程序 Systemd其实是Linux系统用来管理系统的一个程序,用来代替原来的init进程(用来管理启动系统其它的服务进程),现在很多Linux发行版都已经自带Systemd程序了。 systemctl命令 1. Unit systemctl命令是Systemd中最重要的一个命令,用于
阅读全文
摘要:在UEFI开发中,inf、dsc、FDF 和 DEC 文件是EDK II构建系统的重要组成部分,各自有不同的作用。 1. INF 文件 (Module Information File) 作用: 描述模块的构建信息,如源代码、依赖库、编译选项等。 内容: 包括模块类型、GUID、源文件、库依赖、PC
阅读全文
摘要:inf文件介绍 inf是属于UEFI的标准应用程序工程模块的工程文件,每个程序工程模块,由工程文件和源文件组成。源文件就是c/asm这些程序文件,工程文件就是inf文件。inf文件相当于Makefile文件一样,是对源文件去做整合编译成模块文件的工程文件,用于让edk2编译工具去自动编译模块。 in
阅读全文
摘要:A/B 系统之 bootctl 工具 分别介绍了调试动态分区和虚拟 A/B 分区最常用的工具 snapshotctl 和 dmctl,这一篇介绍 bootctl(boot control),一个专门用于设置 BootControl HAL 接口的工具。 这个工具最常用的地方就是在 Android 系
阅读全文
摘要:Achitecture 在Android A/B System概述中有讲到A升B的一个例子。下面这张图是想说明两个问题: 启动的时候是如何知道要从A启动还是B启动? 升级的时候是如何要更新A还是B? 图中有两个流程,和涉及的一些模块: 模块: bootloader:启动的早期阶段,叫preloade
阅读全文
摘要:背景 所以需要对这块比较新的技术进行学习。在学习之前,有必要了解一下高通UEFI启动流程。 原文(有删改):https://blog.csdn.net/Ciellee/article/details/113519478 参考文档:80_P2484_117_B_UEFI_With_XBL_On_MSM
阅读全文
摘要:initrd的全名是 init ramdisk,是一个启动时存在于内存的文件系统。 kernal 到 initrd的流程 在GRUB加载kernel时,kernel会先在内存中制造一个rootfs当做临时的空间供系统使用,接下来,kernel便会将initrd当做是一个系统,将其mount到root
阅读全文
摘要:1 开发UEFI服务 本质Protocol 就是包含属性和函数指针的结构体,功能上来说就是提供者和使用者对服务的一种约定。 2 开发UEFI驱动 一个设备/总线驱动程序在安装时首要找到对应的硬件设备(UEFI中是要找到对应的控制器),然后执行安装操作,将驱动程序安装到硬件设备的控制器上。 一个完整的
阅读全文