自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(489)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 connecthomeip/matter 属性读全流程

chip-tool↓ UDP + AES-CCM 加密设备SessionManager::OnMessageReceived() ← 解密ExchangeManager::OnMessageReceived() ← UMH 路由IME::OnReadInitialRequest() ← ACL检查 + 资源检查ReadHandler 创建ProcessReadRequest() ← TLV解析路径AttributeValueEncoder 构造。

2026-06-07 23:09:39 30

原创 ENVI图像处理(6):NDVI和植被指数

NDVINDVI植被指数ENVI操作NDVIband mathquick stat统计图NDVI定义:NDVI(Normalized Difference Vegetation Index,归一化差分植被指数,标准差异植被指数),也称为生物量指标变化,可使植被从水和土中分离出来。NDVI基本原理:植物叶片组织对蓝光(470nm)和红光(650nm)有强烈吸收,而对绿光和红外光强烈反射。叶片中心的海绵组织和叶片背面组织对近红外辐射(NIR, 700-1000nm)反射较强。从红光(Red)到红外光

2021-05-17 01:41:50 60540 11

原创 C/C++学习笔记(2020.11---2021.5)

CPP旅途C/C++语言的诞生CCPlusPlus非标准库程序运行过程GNU编译器集合和LLVM项目gcc和g++标准库在计算机位置Linux/UNIXWindows命名空间定义命名空间using指令using关键字的其他作用不连续的命名空间嵌套的命名空间C预处理器define在define中使用参数##运算符变参宏#undef指令条件编译#ifdef、#else、#endif指令#ifndef指令#if和#elif指令#error#line#pragma基本数据类型和表达式基本数据类型输出数据大小整形无符

2021-05-08 20:21:39 4217 19

原创 connecthomeip/matter 特性分析:ZAP 数据内存表结构

├─ emberAfEndpointConfigure() │ ① 把 ZAP 生成的只读常量表(GENERATED_ENDPOINT_TYPES 等)│ 填入运行时 emAfEndpoints [ ] 数组│ ② 为每个 Server Cluster 分配 DataVersion 随机初始值│ ③ 设置所有 Endpoint 为 enabled│。

2026-06-08 00:26:29 14

原创 connecthomeip/matter 特性分析:Fail-Safe机制

核心问题:配网是一个多步骤过程,如果配到一半断连、崩溃或超时,设备会处于部分配网的损坏状态 ,有一个残缺的。解决方案:在配网开始前设置一个倒计时定时器,如果倒计时到期之前没有收到。,设备自动回滚所有配网操作,恢复到干净状态,等待下次配网。代码生成驱动的自动初始化路径,初始化由。组合时会先取消旧的再插入新的,流程如下。,无法被任何人访问,也无法被重新配网。框架自动触发,不需要手动调用,在。用于设置定时器超时事件,当相同的。中初始化,调用对应的初始化函数。规范定义的配网保护机制。

2026-06-07 22:14:10 26

原创 connecthomeip/matter 源码分析:Server端初始化

被删除这一个事件,需要通知完全不同职责的多个模块,每个模块只关心自己的那部分,用链表让它们解耦,以。上读取实际端口号,而不是用预设值,因为启用了端口冲突重试时实际端口可能不是。其中UMH 就是各个协议提前注册的"我能处理哪种主动发来的消息"的声明。会话的管理器,一般用于设备作为客户端主动去连接其他。)上可以同时跑多个并发的请求-响应交互,是给应用层提供的配网流程回调钩子,如下。层有些特殊,他在用的时候,使用的是。这是一个很诡异的写法,由上可知。类实例,即将其注册为消息接收者。条目,并注册监听器,实时同步。

2026-06-07 20:56:19 24

原创 connecthomeip/matter 源码分析:ChipLinuxAppMainLoop起源和类的命名规范

前文中主要是对一些配置属性和管理器的初始化,而从开始才是进入到了框架的核心区域,即matter的事件循环,包含。

2026-06-07 16:40:20 27

原创 connecthomeip/matter 源码分析:BLE/WPA/Payload/Event等模块初始化

配对数据提供者即包含在配对过程中的所有数据,可以随机获得或者通过命令行传入,即这些,即的定义如下unsignedunsignedunsigned。

2026-06-07 02:46:06 14

原创 connecthomeip/matter 源码分析:Linux Platform层初始化

会被调用到socketselectsocketWakeEvent时一个静态数组,用于定义需要检测的此处的WakeEvent需要深入剖析,在matter的事件循环线程中,会调用select阻塞等待I/O事件或定时器但是如果有其他线程调用投递任务时,需要立刻打断select的阻塞,否则任务可能要等很久才能被执行的实现如下fdsmReadFDselect。

2026-06-07 00:02:50 111

原创 connecthomeip/matter 源码分析:KVS持久化和Glib线程创建

如果开启了宏,则在可配对变量添加kWiFiPAF可配对方式位。

2026-06-06 22:05:31 26

原创 connecthomeip/matter 源码分析:配对方式/内存初始化/命令行解析

在开发matter中,每个进程都是一个独立的server端,他可以无需借助任何其他第三方库,即直接将中的所有功能集成在需要的进程文件中,那么每个server的写法也会形成定式,即。

2026-06-06 18:15:19 25

原创 connecthomeip/matter 源码拉取和编译流程

较为耗时,一般仅推荐拉取需要的平台,即。该命令会拉取所有平台下的所有。设置编译环境(这里建议使用。

2026-06-06 15:52:56 27

原创 connecthomeip/matter 专栏文章汇总

本人目前用matter许久了,用的一些核心概念也挺多的,但是遇到一些根本性问题还是难以debug出根因,因此此专栏从原理性出发,探究matter的核心概念逻辑以及具体的实现思路专栏文章目前分为三个层次来探究,等一个层次更新完之后才更新下一层次的文章,即源码分析、特性分析和功能使用探究。

2026-06-05 21:57:30 54

原创 内存映射:map_memory宏作用分析

该代码实现了虚拟地址到物理地址的页表映射功能。map_memory宏为虚拟地址区间[vstart, vend)建立多级页表映射,将其线性映射到连续的物理内存。通过compute_indices计算各级页表索引范围,populate_entries填充页表项。宏处理了PGD、PUD/PMD(如有)和PTE三级页表,支持跨多页的线性映射。关键参数包括页表基址(tbl)、虚拟地址范围(vstart,vend)、物理地址(phys)和标志位(flags),使用临时寄存器保存中间状态。整个过程通过计算索引、填充条目逐

2026-02-24 23:17:40 207

原创 Linux设备驱动模型初始化流程分析(以PCI/PCIe模块为例)

用于将设备加入到驱动支持的设备链表中,一个设备需要一个驱动,一个驱动支持多个设备。会填充节点,用第一次扫描申请的内存,为节点分配内存。设备驱动模型和平台总线模型是同步关系,不是互斥关系。用于扫描设备树的各节点,可见其主要分析三个节点。,作为启动参数,关于这三个节点,设备树中如下。,而不知道该地址是属于哪个虚拟机,此时就要。中会检查设备树的一些标识,并赋值全局变量。是一个硬件模块,应该在设备树中定义资源。,该节点需要做特殊处理,同时对其他非。进行绑定的过程,那我们就看看他的。过程中分析设备树文件,最终调用。

2024-11-17 00:06:50 1687

原创 BootLoader分析:启动流程分析(以uboot为例)

内容如上,由cpsr寄存器内容可知,r1获取处理器的当前工作模式:M[4:0],并且设置SVC用户模式,同时屏幕FIQ和IRQ中断,写回cpsr寄存器。可见uboot的驱动初始化和Linux层驱动初始化还是有很明显的区别的,那UEFI DXE驱动初始化就更简单了,怪不得每一层都要做驱动检测。用于为早期malloc和GD全局数据区留出空间,如下,并且返回修改后的sp寄存器,并且在。:若启动延时结束前,用户输入任意按键打断启动过程,则返回,否则启动,并在。由上可知,这是arm32定义的规范的异常向量表,宏。

2024-10-27 00:12:38 1443

原创 qemu参数解析过程

的地方,但是我们一般不常用,这个是干嘛的?一般是为了将配置的某个元素标识为唯一,以便在其他命令或参数中引用该元素。本文内容主要以分析源码为主,顺着主要代码的逻辑进行梳理,不涉及架构部分。他其实就是构建了一个多重链表结构用于后面使用,调试可见。这个大数组是在编译后生成的,源码中只有其构建宏定义。函数用于分析后面的子参数,其层次结构如下。这个函数,可见就是将该数组加入。查找选项,如果没有则报错,这个。是系统默认的一个大数组,如下。它这个函数里面有一个判断。继续解析过程(它这里从。以运行指令为例,调用。

2024-10-24 22:23:38 631

原创 SELinux:Linux下重要的权限控制安全组件

除此之外,每个文件或者进程都要有一个安全上下文,进程是否可以访问文件或目录,就要其安全上下文是否匹配(是否匹配的规则是通过策略中的规则来制定的)策略:会根据某些服务来制定基本的存取安全性政策,政策内还会有详细的规则 rule 来指定不同的服务开放某些资源的存取。传统读写文件系统的方式位:DAC,自主访问控制,依据进程的拥有者对文件的权限来决定,缺点如下:1)),每个进程都有自己的运行区域,各个进程只运行在自己的区域内,无法访问其他进程和文件(这和。:抱怨模式,此时未授权行为会被放行,但是也会被记录。

2024-10-20 23:18:20 1841

原创 Linux 5.0在start_kernel之前做了什么事?(以aarch64为例)

之前在研究Linux内核源码的时候总是找不到关于这部分源码的相关剖析,要么也是模棱两可的,也有一些比较专业的代码分析,不过比较分散,感觉大家都不太喜欢这部分代码,正好今天周末,这段时间也在学习Arm64汇编,以这部分为研究对象来解析

2024-09-22 18:37:26 1208

原创 UEFI(3):Boot Service和Runtime Service

UEFIUEFI在系统启动过程中,系统资源通过启动服务提供的服务来管理,系统进入DXE阶段启动服务表被初始化,并通过指针将启动服务表传递给UEFI应用程序或驱动程序。

2024-08-12 01:17:33 1193 1

原创 UEFI(2):PPI和HOB列表(PEI->DXE)

阶段,用于在不同固件阶段之间传递与中断向量相关的信息。类型,用于存储自定义数据。列表的起始信息,通常是第一个。的类型、长度以及指向下一个。结构的通用头部,它包含了。字段进行计算,找到下一个。的作用为:将向量表信息从。除了通用头部,具体的。的不同会有不同的定义。

2024-08-11 20:57:08 1069

原创 UEFI(1):ImageHandle和SystemTable

UEFIUEFI。

2024-08-11 20:55:51 633

原创 QNX OS微内核系统

微内核(GNU。

2024-06-23 17:57:22 1720

原创 剖析硬盘分区方案和NTFS文件系统结构

一个NTFS分区的数据结构如下VBR,存储跟引导相关的数据,大小为16个扇区File Area:一切皆为文件,包括元数据文件、常规文件、目录,一切的一切都是文件BBS,分区的第一个扇区是分区引导记录,是能否引导系统的关键,所以用分区的最后一个扇区备份第一个扇区,用于修复损坏的第一个扇区卷中第一个扇区存放和的数据偏移长度含义00-02H3跳转指令EB 52 9003-0AH8NTFS0B-0CH2每个扇区的字节总数,一般是5120DH1簇大小0E-0FH2保留扇区10-12H3。

2024-03-28 23:25:54 2177

原创 C++11特性:std::lock_guard是否会引起死锁?

今天在评审代码的时候,因为位于两个不同的线程中(一个是周期性事件线程,一个是触发式事件线程),需要对一个资源类的某些属性进行互斥的访问,因此采用lock_guard互斥量包装器,但是在升级的过程中,因为整个系统太大,所以在询问了某位同事后,得到的答案是在两个不同的地方加上lock_guard有一定的可能性会导致死锁,但是后面在测试的过程中又没有问题,真的如此吗?本文针对lock_guard来做阐述和延申。

2024-03-24 11:07:12 2248

原创 Autosar的前世今生:E2E通信校验

E2E保护概念的核心是针对安全相关的数据交换,需要在运行时进行保护,以消除通信链路中可能的失效带来的影响。时有各自的机制、参数、数据格式,具有非常强的灵活性,用户可以根据实际需要选择配置。规范里规定的一种用于保证数据传输正确的概念,属于功能安全范畴。细节处可查询文档,此处不做概述。通信来举例,两个节点通过。(配置)每种配置在计算。

2024-03-22 00:15:02 5132 1

原创 软件测试:LLVM中的Fuzz模糊测试框架——libFuzzer

是LLVM生态系统中的一个模糊测试工具,用于自动化地发现软件程序中的漏洞和错误。它通过生成大量的随机输入数据并观察程序的行为来进行模糊测试。libFuzzer是一个基于内存的模糊测试引擎,使用LLVM的插桩技术和代码优化功能来提高测试效率和覆盖率以下是 libFuzzer 的一些功能特点:libFuzzer提供了一种自动化的模糊测试方法,可以生成大量的随机输入数据,并在每个输入上运行目标函数进行测试。它通过观察程序的崩溃、断言失败、未定义行为等反馈来发现潜在的问题。libFuzzer通过使用和。

2024-03-21 00:00:00 1765

原创 软件测试:C++ Google Test单元测试框架GTest

最近在写项目的时候,学到了许多关于软件测试的知识,也不断的使用新的测试框架和测试工具,每次总是机械式的拼接其他人的代码,代码发生错误也不知道怎么解决,因此我打算直接将其学一遍

2024-03-19 22:53:52 1446

原创 RAM/ROM/Flash区别

直接交换数据的内部存储器,也叫内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介, 当电源关闭时。协会所订立的、主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,固态硬盘的存储介质分为两种,一种是采用闪存()的性能,还不会断电丢失数据同时可以快速读取数据(为内部存储器,非内存和外存的关系,从本质上来说,闪存,它属于内存器件的一种,是一种不挥发性(用来存储和保存数据。分为很多种,常见的主要有。

2023-11-10 18:09:39 542

原创 IA-32体系结构下的高端内存的理解

第一遍看。

2023-08-03 00:05:59 591

原创 OpenSBI知识结构整理

OpenSBI

2023-04-06 00:49:48 1937

原创 扒一扒bin文件和elf文件的联系

Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。文件中还是有一些有用的信息,不过不知道为何关于动态链接的。感觉以下句子还是有些模糊不清,特别是。那么来扒一扒具体文件内容。中,稍等再研究一下吧。

2023-04-01 02:13:38 743

原创 Linux CFS调度器:原理和实现

集合,它的工作量应当由内核保持平衡,其组成类似于基数树,每个调度域被依次划分为一个或多个组,每个组待办调度域的一个。而某一调度实体由于某些原因导致进入阻塞或睡眠态,此时便会主动将时间片让出去,导致其。增加,此时便会形成不对等,这是不公平的,因此需要在下一进程切换时调度。是一样的,因此在这种情况下优先级较低的实际上是时钟有了更高的衰减率。子集,工作量的平衡总是在调度域的组之间来完成。当进程从一个CPU的运行队列中出来时,它的。为什么让优先级高的和优先级低的分配不同的。的周围,换句话来说就是,只比较相对大小。

2023-02-28 13:13:32 1060

原创 C++模板编程高级技巧

因此,模板的实现也应该放在头文件内,此时在其他代码文件中可以直接将模板的实现也包含进来,当需要生成模板实例时,编译器可根据已知模板实现当场生成,从而无需依赖在别的目标文件中生成的模板实例。标记,并且在函数及类模板的实现中,模板参数是用于指代具体类型,因此,这两个关键字标记类型的模板参数被称为类型模板参数,除此之外,还有以下四种类型。以上四种参数统称为非类型模板参数,其在模板参数列表中的声明方式与对应类型的变量声明一致,此外模板参数还可以是一个模板,称为模板模板参数。或者给定一个迭代器类型,求出其标签类型)

2023-01-24 22:32:24 886

原创 SPDK技术浅析

命令本身描述了操作,还描述了主机内存中包含与命令关联的主机内存数据的位置,也就是我们要写入数据的位置,或将读取的数据放置到内存中的位置。实例都是一个些由大页内存组成的内存池,并且以特定的数据结构进行组织,其中支持的每个分配和使用的单元可以用于存储调用者的数据。不断轮询的方式,一旦查询到操作完成,则立马触发回调函数,给到上层用户程序,这样用户程序可以按需发送多个请求,以此提升性能。不是常规意义下的线程,实际是个逻辑上的概念,它没有具体的执行函数,其所有相关的操作均在。在针对网络存储解决方案中,当前主要有。

2023-01-12 06:43:26 2193

原创 Linux内存管理:内存分配和内存回收原理

BootmemSlab这是的第三篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,当然,除了内存初始化,还必然有内存分配和内存回收有些todo后续会补上。

2022-12-13 21:37:59 1610

原创 Linux内存管理:Slab Allocator闪亮登场

BootmemSlab这是的第三篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是Slab启动流程。

2022-12-11 22:32:41 1036

原创 Linux内存管理:Buddy System姗姗来迟

这是的第二篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是启动流程。

2022-12-09 14:17:45 820

原创 Linux内存管理:Bootmem的率先登场

这是的第一篇文章主要分成四大模块来剖析:内存管理、设备管理、系统启动和其他部分其中内存管理分为Bootmem、和Slab三部分来阐述,本文主要阐述的是Bootmem启动流程Bootmem分配器是阶段管理物理内存,并提供物理内存分配和回收的分配器。其作为内核初始化过程中第一个真正意义上的内存分配器,为内核早期的初始化活动提供了物理内存的分配和回收,以及为Buddy分配器的创建提供了基础,Bootmem分配器将自己管理的物理内存移交给Buddy分配器之后,其使命已经完成,内核正式启用Buddy。

2022-12-09 01:27:36 944

原创 并行多核体系结构基础知识

然而,在多节点情况下。每个节点拥有自己的处理器和内存,节点间互连形成一个共享存储系统,这时需要硬件支持来实现一种映像,即所有节点的内存构成一个可被所有处理器寻址的单一处理器。写直达每次写触发总线写从而占用总线带宽,在写回缓存机制下,如果同一缓存块中的一个或多个字或字节被多次写入,只需占用一次总线带宽来失效其他缓存拷贝即可,带宽会很快被耗尽。与缓存一致性协议分开,缓存一致性协议仅能解决对单个存储器块地址的访问之间如何排序的问题,而对于不同地址的访问并不是缓存一致性协议所要参考的问题。共享缓存和主存储器。

2022-11-24 12:22:01 1272

QEMU仿真Linux5.19内核(rootfs利用busybox)

要用的同志直接私戳我即可,不用下载

2022-09-15

Outline-Client.exe

Outline-Client.exe

2022-08-25

Reverse Engineering for Beginners(反汇编)

(反汇编)

2021-06-22

ArcEngine的OMD图.zip

OMD模型图

2021-06-06

Google编码规范C++

Google编码规范C++

2021-05-24

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除