avb校验相关与块校验原理

android AVB2.0(六)Super动态分区介绍 文章目录一、Super分区是什么?二、Super分区工作原理三、Super分区的配置和编译1.分区表的配置2. Super镜像的编译2.1 Super镜像的编译日志2.2 Super镜像的生成过程四、Super分区在AVB中的校验 一、Super分区是什么? Super分区,也叫dynamic动态分区,动态分区是 Android 的用户空间分区系统,在Android R版本开始引入。 android引入了super动态分区的设计,目的是为了解决像system,vendor等分区size大小不能动态调整的问题 阅读详情
AI摘要

文章详细阐述了Linux系统在启动过程中针对块设备的校验流程,涉及到VerifiedBoot.c和LinuxLoader.c等关键组件。通用块设备层处理I/O请求,包括扇区、块、段和数据页的概念。动态校验流程中,verity_end_io函数用于处理错误并触发工作队列进行校验。dm-verity用于保证数据完整性,通过创建哈希树并配置目标表来验证块设备上的数据。此外,文章还提到了init用户态流程和清除panic标识的方法。

一、启动校验流程

edk2/QcomModulePkg/Library/avb/VerifiedBoot.c
DEBUG ((EFI_D_ERROR, "LoadImageAndAuth failed %r\n", Status)); in LoadImageAndAuth()

edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c
DEBUG ((EFI_D_ERROR, "LoadImageAndAuth failed: %r\n", Status));

BootLib/PartitionTableUpdate.c
/QcomModulePkg/Library/avb/libavb/avb_slot_verify.c
LinuxLoaderEntry
    Status = GetRebootReason (&BootReason);
    校验启动原因
    EnumeratePartitions()
    FindPtnActiveSlot
    UpdatePartitionEntries()   -----   加载avb分区
    LoadImageAndAuth      ---------------                  VerifiedBoot.c 
        FindBootableSlot    --------------         PartitionTableUpdate.c//error
            GetBootPartitionEntry 
            HandleActiveSlotUnbootable          //一直返回错误
                GetBootPartitionEntry             // BootEntry       检测没过
                GetActiveSlot                     //success
                    GetBootPartitionEntry    -----    for()
        LoadImageAndAuthVB2  ---------------           VerifiedBoot.c 
            avb_should_update_rollback
                IsCurrentSlotBootable
            avb_slot_verify    ------------------      avb_slot_verify.c
                load_and_verify_vbmeta
                    ops->read_from_partition(ops,  
                        AvbReadFromPartition
                           "Load Image %a total time: %lu ms \n"
                    avb_vbmeta_image_verify
                        avb_rsa_verify
                            iavb_parse_key_data                 //Unexpected key length
                avb_manage_hashtree_error_mode
                avb_append_options   //avb 根据resolved_hashtree_error_mode 设置verity_mode
                    cmdline_append_option    //设置verity_mode到slot_data->cmdline
                avb_sub_cmdline
            HandleActiveSlotUnbootable                //当前槽置为unbootable
            AppendVBCmdLine      //cmdline赋值到VBCmdLine
        DisplayVerifiedBootScreen
            DisplayVerifiedBootMenu
    BootLinux (&Info);
         UpdateCmdLine
             AddtoBootConfigList   //gBS = SystemTable->BootServices;这里会利用uefi boot服务记录map

二、通用块设备层对请求的处理

2.1 块设备概述

在这里插入图片描述

在这里插入图片描述
• 块设备的控制器传输的固定数据单元大小称为扇区(sector)。因此I/O调度器
和块设备驱动必须以扇区为单位管理数据。
• 虚拟文件系统、映射层(mapping layer)管理磁盘数据的逻辑单元大小称为块
(block)。对于文件系统来说,块是最小的磁盘数据存储单元。
• 前面在分散/聚合DMA中,我们提到块设备驱动应该能够处理称为“段”的数据
单元;每个“段”是内存中的一页或页的一部分,“段”中的数据在磁盘上是
连续的。
• 磁盘缓冲区处理的数据单元大小为“页”,每个对应一个页帧。(注1)
• 通用块设备层粘合所有上层和底层的部分,这样它就知道扇区、块、段和数据
页。

在这里插入图片描述
bi_io_vecs指向一个bio_vec结构体数组,该结构体链表包含了一个特定I/O操作所需要
使用到的所有段(segment)。每个bio_vec结构都是一个形式为<page, offset, len>的向量,
它描述的是一个特定的段:段所在的物理页、块在物理页中的偏移量、从给定偏移量开始的
块长度。整个bio_io_vec结构体数组表示了一个完整的缓冲区。bio_vec结构体定义在文件
include/linux/bio.h中。

内核使用gendisk结构,定义在include/linux/genhd.h中,来表示一个独立的磁盘设备。
实际上内核还使用gendisk表示分区,但是驱动程序不需要了解这些。在gendisk结构中的许
多成员必须由驱动程序进行初始化。
物理磁盘通常被分成多个逻辑分区。每个块设备文件可以表示一个整个物理磁盘或者其
中的一个分区。如/dev/sda、/dev/sda1、/dev/sda2等。若一个物理磁盘有多个分区,则磁
盘的布局保存在hd_struct数据结构数组中,数组的地址由gendisk结构体中的part成员保存。
hd_struct数据结构的定义在文件include/linux/genhd.h中。
在这里插入图片描述
当内核在系统中发现一个新磁盘时,调用alloc_disk()分配相关数据结构,如gendisk,
hd_struct等,然后调用add_disk()将磁盘添加到系统中。注意:一旦调用了add_disk,
磁盘设备就被“激活“,表示可以使用,并随时会调用它们提供的方法。

2.2向通用块设备层发送请求

  1. 上层下发磁盘数据请求
  2. 通用块层申请bio结构,将请求的数据分段记录到bio中
  3. 如果请求的数据大于一个bio允许的最大数据量,则将请求分成多个bio
  4. 调用submit_bio提交bio请求
  5. submit_bio函数经过层层调用,最终调用块设备请求队列中的make_request_fn成员函数将bio提交给I/O调度层进行处理

generic_make_request函数将bio连接到current->bio_list链表中,并调用__generic_make_request函数提交链表中所有的bio。
在这里插入图片描述
__generic_make_request函数最终会调用块设备的请求队列中的make_request_fn成员函数将bio请求发送给I/O调度层,至此对磁盘的数据请求离开通用块层,进入下一层——I/O调度层

android AVB2.0学习总结 看了一阵子android AVB2.0相关的内容,准备梳理一下相关知识点。平时一般都用word整理,现在想想感觉还是用优快云来整理看着直观些,方便自己查看的同时,也把自己学到的知识与其他人分享,共勉! 因为AVB相关的内容比较多,一篇博客可能写不清楚里面的实现细节,所以准备分如下几个部分来介绍,得抽出总够的时间来码字和做图。 一、AVB2.0介绍 AVB2.0的工作原理 vbmeta镜像介绍 二、AVB2.0的配置和编译 AVB的配置开关 AVB key配置介绍 AVB编译镜像 三、Uboot阶段安全启动 阅读详情

相关推荐

AVB源码学习(七):AVB2.0-Super动态分区介绍

Super分区,也叫dynamic动态分区,动态分区是 Android 的用户空间分区系统,在Android R版本开始引入。android引入了super动态分区的设计,目的是为了解决像system,vendor等分区size大小不能动态调整的问题。例如物理分区表中配置固定size后,如果软件版本对system,vendor分区size需要频繁调整时,,使用起来不是很便利。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1980

深入拆解AVB2.0的vbmeta镜像:用avbtool和xxd工具一步步分析分区描述符与校验链

本文深入解析AVB2.0的vbmeta镜像结构,通过avbtool和xxd工具详细拆解分区描述符与校验链的工作原理。从头部区块到描述符类型,再到实战解析vbmeta_system镜像,全面揭示Android设备启动过程中的安全验证机制,帮助开发者深入理解AVB2.0的编译配置与验证流程。

weixin_29229261的博客 429

科大讯飞学生机BootLoader解锁与AVB关闭实战指南

BootLoader是安卓设备启动时的底层引导程序,负责加载操作系统。AVB(Android Verified Boot)则是谷歌推行的安全启动验证机制,通过校验分区签名确保系统完整性。理解BootLoader与AVB的原理,对于进行系统级开发、刷入自定义ROM或获取Root权限至关重要。在消费级设备中,厂商通常提供官方解锁通道,但在教育定制设备(如科大讯飞学生平板)上,这些入口常被隐藏或修改,导致通用方法失效。本文聚焦于这类深度定制设备的解锁实战,通过拆解BootLoader解锁与AVB关闭的具体流程,帮

weixin_34115824的博客 400

深入AVB验证流程:从libavb源码看Android启动时如何校验vbmeta.img的签名与哈希

本文深入解析Android Verified Boot(AVB)中vbmeta.img的签名与哈希验证机制,详细介绍了AVB验证流程、vbmeta镜像结构、哈希验证和RSA签名验证的底层实现,以及错误处理与安全考量。通过libavb源码分析,帮助开发者理解Android启动时的安全验证过程,提升系统安全性和开发效率。

weixin_30827827的博客 332

[车联网安全自学篇] ATTACK安全之检测BootLoader+内核+文件系统的安全启动固件的异常篡改行为「一」

ATTACK安全之检测BootLoader+内核+文件系统的安全启动固件的异常篡改行为「一」;Android作为一个应用广泛的平台,同样支持。以硬件提供保护作为信任根,实现从bootloader到boot分区以及其他分区(等)完整信任链路,在每一步转交执行权限之前都会对数据和代码的完整性(integrity)和真实性(authenticity)进行验证。:提供内核dm-verity特性,实现Verified Boot,启动时如果分区损坏会提示用户:禁止未验证的设备启动

橙留香Park的博客 8501

Android Verity Boot(AVB)验证原理

基于android12,多图多精简总结,白话总结,一网打尽密码锁、locksettingService、gatekeeper所有知识点。并拓展了指纹、人脸、DRM相关的知识点.👉👉👉[专题目录]–Android架构安全精选(基于android12)👈👈👈透过事务看本质,到底什么是AVB?AVB(AndroidVerifiedBoot)就是,主要包含•对以下镜像提供完整性检查Linuxkernel+ramdisk整个分区的HASH存储在VBMetaimage中。...

baron-周贺贺-代码改变世界ctw 5949

Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?

上一篇《Android AVB 分析(十)AVB 有哪些相关的源码?》中分析了 AVB 源码结构,本篇正式深入 AVB 源码,看看在 bootloader 中是如何使用 libavb 进行 verify boot 检查验证的。

洛奇看世界 2412

Android AVB 分析(十六)5 个例子彻底理解 FEC(Reed-Solomon) 的工作原理

关于 FEC 是如何工作的,一直是我 Android OTA 讨论群中的未解话题,大家基本上都不清楚 Android 上面的 FEC 是如何工作的,为什么在 OTA 升级的最后阶段,FEC 的编码计算会消耗大量的 IO 资源,并持续很长时间。接下来的几篇,我会从一个程序员的角度,演示基于里德所罗门编码的 FEC 到底是如何工作的。

洛奇看世界 669

Android启动时验证(AVB)

本文档介绍了Android启动时验证(AVB)的相关知识。 AVB(Android verify boot)是Android的一种安全机制,确保镜像数据的完整性和可靠性。

fec编码解码-fec-encode-decode

前向纠错编码(FEC)技术通过在传输码列中加入冗余纠错码,在一定条件下,通过解码可以自动纠正传输误码,降低接收信号的误码率(BER)。 本算法每8bit增加4bit监督位,就纠错1bit

如何用capl操控程控电源(RS232)

capl脚本操控RS232

xiaohuanxiong_的博客 3991

AutoSAR配置视频讲解:新建DaVinci工程

AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违

雪云飞星的博客 6276

《SAP FICO系统配置从入门到精通共40篇》030、集成配置:FI与生产计划(PP)的自动科目确定

FI和PP的自动科目确定,本质上是把生产业务翻译成会计语言。翻译规则就藏在那些配置表里。配的时候多想一步:这个业务动作,在财务眼里是什么?是材料消耗?是产出入库?还是工费分摊?想清楚这个,再看配置界面,那些代码就不是天书了。最好的测试方式,是月底关账前,让生产部门跑一遍所有类型的生产订单。配置对不对,业务最知道。

985大学毕业,前某大厂员工,啥都会点的程序员! 574

FreeRTOS深入教程(任务创建的深入和任务调度机制分析)

本篇文章将带大家深入学习任务的创建和分析任务调度的机制。本篇文章深入的讲解了任务创建的内部实现和任务调度的源代码分析和实现,学习这篇文章有助于更深入的学习FreeRTOS的源码。

m0_49476241的博客 6391

从 ST22 到根因定位:ABAP Dumps 全景排查指南(含典型 Dump 案例、修复套路与云时代实践)

本文系统介绍了SAP系统中ABAP短转储(Dump)的分析方法。首先指出短转储是程序运行时无法处理的错误导致系统强制终止执行。文章详细解析了短转储报告各区块的作用:从概述性的Short Text和What happened,到核心的Error Analysis和Source Code Extract,再到关键的系统字段Contents of system fields和调用栈Active Calls/Events。针对不同场景提供了排查建议:客户代码应建立可控边界,标准对象优先查阅SAP Notes。最后推

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 485

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

OpenClaw Docker 安装与部署教程,环境隔离不冲突技术指南

本文介绍了使用Docker容器化部署OpenClaw的完整教程。首先通过流程图详细说明了Docker环境检测流程,包括系统支持性检查、Docker安装状态验证、版本检测和服务配置等步骤。然后提供了Windows、macOS和Linux(Ubuntu/CentOS)系统下的Docker安装指南,涵盖从下载、安装到权限配置的全过程。最后介绍了OpenClaw官方镜像的拉取方法以及自定义镜像构建的Dockerfile示例。该教程适用于开发和生产环境,利用Docker实现环境隔离和快速部署。

一键难忘的博客 987

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南

HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。

FJN110的博客 106

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: CVE-2022-34918漏洞流程图
下一篇: 通用算法总结
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值