- 博客(934)
- 资源 (1)
- 收藏
- 关注
原创 Fastboot
The fastboot protocol is a mechanism for communicating with bootloaders over USB or ethernet. It is designed to be very straightforward to implement, to allow it to be used across a wide range of devices and from hosts running Linux, macOS, or Windows.
2023-12-06 11:51:59
13
原创 万字长文带你搞懂安全启动及ATF
既然是小白也能看懂,那么在开篇之前我先解释两个概念,相关从业者可以跳过这两点:• 什么是ATF?ARM Trusted Firmware中的Trusted Firmware-A(简称TF-A)。TF-A是Trusted Firmware Project中的一个项目。TF(Trusted Firmware)是ARM在Armv8引入的安全解决方案,为安全提供了整体解决方案。
2023-12-05 16:57:26
23
原创 OOA、OOD、OOP详解
ooa(object-oriented analysis):强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析-------其实就是进一步对oo进行细化,初步得出该oo的属性与方法(或者简单的理解:在得出的文档中对接口的粗略定义) 。ood(object-oriented design):OO方法中一个中间过渡环节,其主要作用是对ooa分析的结果作进一步的规范化整理,以便能够被OOP直接接受------整理和定义oo的属性和方法 。
2023-11-21 09:25:33
32
原创 需求规格说明书
作为一个需求工作经验(ToB端)2年的小白,在没有大手子知道的情况下摸爬滚打磕磕绊绊,属实有点闭门造车,希望大家多指点指点,如何才能更好地完成需求工作。另一方面,想让自己的胡思乱想可以记录下来,避免真的变成了胡思乱想。
2023-11-21 09:24:33
51
原创 Android logcat命令详解
logcat是android中的一个命令行工具,可以用于得到程序的log信息log类是一个日志类,可以在代码中使用logcat打印出消息常见的日志纪录方法包括:方法描述显示全部信息显示调试信息显示一般信息显示警告信息显示错误信息例如://开发过程中获取log//adb获取logadb logcatadb logcat输出的日志格式如下:3.logcat命令格式语法格式:PC端使用:adb logcatshell模式下使用:logcat。
2023-11-15 16:13:37
52
原创 一文搞懂AMBA总线工作原理
本文主要介绍总线相关的知识,会从以下几个方面展开:什么是总线,为什么需要总线,总线的组成,总线的分类,ARM中常见的总线协议是什么,然后后面的部分会着重介绍一下ARM中常见的总线协议及工作原理。什么是总线呢?总线是计算机各种功能部件(运算器、控制器、内存、输入、输出等)之间传送信息的公共通信干线,它是由导线组成的传输线束。简单来说总线也是导线,是连接两个以上计算机部件的专用信号线,在各个部件之间传送信息的公共通路。为什么需要总线呢?
2023-11-14 16:02:54
36
原创 AHB总线
AHB:Advanced High-performance Bus(先进高性能总线)高速高性能总线;支持2级流水操作(优势)APB:Advanced Peripheral Bus(先进外围总线)低速总线、低功耗;接口简单ASB:Advanced System Bus(先进系统总线)有需要占用总线的**Master向arbiter发出请求**,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。1。
2023-11-14 15:17:00
21
原创 CUnit 安装与测试
本次安装的 Cunit 版本为 2.1.3。从下载好 CUnit 2.1.3 源码后,依次输入下述命令构建安装 CUnit。以下都假设 为 /opt/CUnit。这个时候头文件和库文件分别在 /opt/CUnit/include 和 /opt/CUnit/lib 目录下,不过此时不太方便使用,需要我们手动指定头文件搜索路径和库文件搜索路径。现在我们在系统的头文件和库文件搜索路径下创建个软连接解决这个问题。这样整个 CUnit 就安装好了,现在来测试一下。
2023-11-10 09:09:59
30
原创 【单元测试】CUnit用户手册(中文)
如果pSuite为NULL,则返回CUE_NOSUITE,如果pTest为NULL,则返回CUE_NOTEST,如果pSuite未激活,则返回CUE_SUITE_INACTIVE,如果pTest不是套件中已注册的测试用例,则返回CUE_TEST_NOT_IN_SUITE,如果pTest未激活,则返回CUE_TEST_INACTIVE。框架维护注册表的所有权,因此当调用CU_cleanup_registry()或CU_initialize_registry()函数之后,该函数返回的指针将会失效。
2023-11-07 20:08:51
42
原创 C 语言常用单元测试框架
对于资源有限的环境,比如 C 语言嵌入式系统,常用的单元测试框架会带来大量的资源消耗,并且嵌入式更多侧重功能测试,完善的框架实现并非必要。MinUnit 使用 C 语言编写,非常小型的单元测试框架。编译时未引用头文件中定义的宏函数,并不占会用内存。extremely— 摘自[JTN002 — Jera Design LLC](https://jera.com/techinfo/jtns/jtn002)CUnit 是一个编写、管理和运行 C 语言单元测试架构,会通过静态库链接在用户编写的测试代码中。
2023-10-26 16:44:02
141
原创 linux pl320 mbox控制器驱动分析-(3) pl320驱动代码分析
注册pl320 mbox的中断处理函数。irq_stat & MBOX_MASK(IPC_TX_MBOX) 判断当前的中断是否来自于IPC_TX_MBOX mbox。
2023-10-11 10:19:34
49
原创 linux pl320 mbox控制器驱动分析 - (2) 消息传递示例
Core0 是源core,Core1 是目标core。Core0 使用 Channel ID1,Core1 使用 Channel ID2。邮箱 1-3 处于非活动状态,自动确认和自动链接被禁用。如果 Core0 要发送另一条消息,它可以通过保持 IPCM0SOURCE 寄存器设置并在第 14 步用新消息更新 IPCM0DSTATUS、IPCM0MODE、IPCM0MSTATUS 和 IPCM0DR0 寄存器来维护邮箱的所有权。Core0 是源core,向三个目标内核 1、2 和 3 发送消息。
2023-10-11 10:19:01
48
原创 linux pl320 mbox控制器驱动分析 - (1) pl320手册分析
自动链接提供了一种将邮箱链接在一起的机制,这样当一个邮箱中的一条消息被确认时,下一条消息将从链接的邮箱发送,而不是中断源core。当启用自动链接时,目标core会以通常的方式清除邮箱发送寄存器的位 0 并设置位 1,但是源内核的确认中断被屏蔽掉,邮箱发送寄存器的位 0 会在下一个邮箱中设置,发送该消息。当使用带有自动确认的自动链接时,邮箱会自动在第一个邮箱中设置邮箱发送寄存器位 1 以将确认发送回源内核,但是,由于还设置了自动链接,邮箱会自动在第一个邮箱中设置邮箱发送寄存器位 0链接邮箱。
2023-10-11 10:17:25
40
原创 【ARM 浮点计算单元 FPU (FPA,VFP,NEON)介绍】
ARM 的 FPU支持IEEE 754标准的浮点数格式,并能够执行各种浮点数的基本运算,如加法、减法、乘法、除法等,以及一些更复杂的运算,如平方根、绝对值等。对于支持硬件浮点运算的系统,这是非常重要的,因为如果不正确地保存和恢复VFP的状态,可能会导致浮点运算的结果错误。但是在现代的ARM处理器中,如Cortex系列处理器,浮点单元通常是内置的,对于执行浮点数运算有极大的帮助。对于VFP,有几种可能的值,例如vfp、vfpv3、vfpv4等,这取决于你的处理器支持哪种版本的VFP。
2023-09-25 18:03:46
229
原创 一文搞懂linux PM QOS
PM QOS(power management quality of service,服务质量)表示linux内核电源管理的质量。在很多产品及场景功耗和性能是一个tradeoff的艺术。Linux提供了众多的功耗管理机制用来尽可能减少不必要的功耗:cpu idle、cpu hotplug、cpu dvfs、系统休眠唤醒、runtime power management、device dvfs、clock gate等(这些机制以往文章有介绍,大家感兴趣的话,可以往前翻阅)。
2023-09-25 17:15:48
121
原创 一文搞懂linux cpu hotplug
Linux 的cpu热插拔是cpu电源管理的一部分,支持系统在负载比较低的时候,拔掉一个cpu,从而省下cpu的静态功耗,并在系统需要时,重新将cpu插上。另外,在多cpu系统启动、休眠唤醒的过程中也会涉及到non-boot cpu的拔插。
2023-09-25 16:43:26
120
原创 一文搞懂linux cpu dvfs
cpufreq driver提供调频调压的机制,cpufreq governor提供不同的策略,cpufreq core对通用的调频逻辑做抽象,为上层提供功能、接口封装,对下层调用抽象封装的硬件控制接口,此外,还借助频率电压对opp(operating performance points)功能,clk driver、regulator driver对频率及电压做时钟及电压的调整。但是仅调频的话,收益是比较小的,因为频率对应着算力,当频率减少,对应的算力也减弱,这样执行时间也会变长。cpu dvfs框图。
2023-09-25 16:16:29
119
原创 一文搞懂linux cpu idle
接下来是计算下一次选择校正因子(correction factor)的值,将上一次的校正因子先衰减一次,然后加上一个predicted_us和next_timer_us的比值new_factor += RESOLUTION * measured_us / data->next_timer_us;当CPU idle时,根据预测的idle时间、功耗受益大小、恢复的时间长短,选用一个idle状态,比如进入wfi,关掉CPU的arch timer以便降低功耗,当有中断触发时,CPU又会恢复回来。
2023-09-25 16:12:50
536
原创 一文搞懂linux系统休眠唤醒
系统休眠唤醒是电源管理中重要的一个技术点,一方面,它能让系统在不需要工作时,尽可能进入一个功耗极低的状态,这时外部的设备、芯片内部ip、时钟进入了低功耗状态或关闭电源状态,从而尽可能的减少功耗,增加产品的续航;另一方面,在用户需要系统工作的时候,系统能够快速恢复电源、时钟、芯片内部ip及外部设备的工作,从而不影响用户的使用体验。系统休眠唤醒比其他的功耗管理对系统的影响更大。
2023-09-25 15:17:11
104
原创 一文搞懂Linux runtime pm
Linux的Runtime PM(runtime power management)框架指的是运行时电源管理,设备在不运行时将自己的时钟、复位及电关闭(时钟的管理框架、regulator的管理框架之前的文章已经介绍,复位的管理框架后面会通过一篇文章来介绍),在使用的时候再打开。其目的是为了减少系统运行时的功耗。
2023-09-25 15:07:49
66
原创 一文搞懂linux device dvfs
芯片的功耗主要由静态功耗和动态功耗组成。静态功耗:电路稳定后,Vdd到GND之间也有细微的电流产生功耗。动态功耗:一部分,由于MOS管开关切换会对寄生电容充放电,从而产生功耗;另一部分,由于MOS管开关过程中,存在短暂的NMOS与PMOS都导通(Vdd到GND的直连)时刻,此时会产生浪涌电流。一般动态功耗远大于静态功耗,因此减少芯片功耗的关键点就是减少动态功耗。
2023-09-25 15:03:16
79
原创 一文搞懂Linux reset framework
在讲reset framework前,首先要搞明白,什么是复位,它是用来做什么的?简单来说,复位是使器件(芯片内的IP或芯片)进入可以稳定工作的初始状态,避免器件在上电后进入到随机不可控的状态。在芯片设计中,复位是一个很重要的功能。复位被用来将数字电路中的触发器强制设置到一个确定的初始值上,从而使状态机和其他控制电路可以从一个已知的初始状态开始工作。这个初始状态,一般兼具了基础功能、低功耗的特性。所以复位也是低功耗常用的手段,一般会配合时钟控制及电源控制一起使用。
2023-09-25 15:02:02
30
原创 一文搞懂linux power domain framework
什么是power domain framework?在搞清楚这个问题之前,有必要先弄清楚什么是power domain,以及它解决了什么问题。从字面上理解,power domain指的是电源域。SOC是由多功能模块组成的一个整体,对于工作在相同电压且功能内聚的功能模块,可以划为一个逻辑组,这样的一个逻辑组就是一个电源域。简单来说,电源域就是逻辑划分,在该逻辑划分中包含了物理实体和电源线的连接关系。电源域之间存在着包含关系,这样就是一个父子关系的电源域。电源域也存在着兄弟关系,这样就是同一级的电源域。
2023-09-25 11:34:02
50
原创 一文搞懂linux regulator子系统
Regulator指的是稳定器,有电压稳定器及电流稳定器两种,能够自动维持恒定电流或者电压。其中,电压稳定器voltage regulator在电路中比较常见。从设备驱动的角度来看,regulator的控制比较简单,主要有enable/disable/输出电压或电流大小的控制。Linux利用regulator framework对regulator进行管理和控制。
2023-09-25 10:23:12
79
原创 一文搞懂linux clock子系统
clock子系统在linux中属于一个比较简单,且容易理解的模块。时钟和电源是系统及各模块的基础,也是电源管理中比较重要的一部分。时钟对应着系统的动态功耗,会让各硬件IP做逻辑反转,从而带来能量消耗。涉及到时钟的电源管理主要是clk gate和调频,通过停止或者调整时钟做到:满足功能的前提下,尽可能减少功耗。时钟对于系统的作用就像心脏对于人的作用,可见时钟对系统的重要作用。
2023-09-25 09:59:44
98
原创 ARMv8内存属性与类型(Memory types and attributes)简介
device内存区域通常是给一些外设,比如USB uart之类的模块用的,首先是non-cacheable的,也就是不能走cache,直接访问内存,数据只存在内存中,其他地方没有备份,这样可以保证数据的唯一性,准确性。观察者访问某一级缓存内的内存系统时,对该级缓存的Write-Through cache或non -cacheable的内存位置的完整写入,对于所有访问该一级缓存外的内存系统的观察者来说都是可见的,而不需要显式的缓存维护。此外也需要额外的内存屏障操作来保证内存的处理顺序。
2023-09-22 11:30:32
32
原创 Vim神级配置(amix)安装与使用
号称是 Vim 神级配置,这个是见仁见智的问题,姑且这么说吧。但想要优化 Vim 配置确实是非常方便。这个配置仓储位于:https://github.com/amix/vimrc 安装很简单,首先是操作系统所需要的支持,包括 ack-grep 与 ctag...号称是 Vim 神级配置,这个是见仁见智的问题,姑且这么说吧。但想要优化 Vim 配置确实是非常方便。这个配置仓储位于:https://github.com/amix/vimrc。
2023-09-12 16:46:06
93
原创 ARM异常处理(3):Bus faults、Memory management faults、Usage faults、Hard faults详解
或者要POP已经在堆栈中的PC值,而LSB为0。如果想更精确地定位Bus fault,可以通过堆栈程序计数器来定位错误的指令,且如果BFSR中的BFARVALID位为1的话,则还可以通过读取总线错误地址寄存器(Bus Fault Address Register,BFAR)来确定导致Bus fault的内存位置。如果没有使能Bus fault的处理程序或总线错误发生在其它的比Bus fault优先级高的异常的异常处理程序时,Hard fault的中断处理函数会取代bus fault执行。
2023-09-12 16:43:48
117
原创 ARM异常处理(2):中断的输入和挂起的6种情况分析
但是,如果挂起状态在处理器开始响应挂起中断之前被清除(例如,因为PRIMASK/FAULTMASK被设置为1,中断没有被立即执行,且挂起状态需要通过软件写NVIC中断控制寄存器来清除),此时中断是可以被取消的。当一个中断输入时,它将被挂起,然后被置于等待处理器处理请求的状态,此时即使失能该中断源,挂起的中断最后仍会触发其相应的中断处理程序,而一旦中断处理程序开始执行,该挂起状态将被自动清除。如果一个中断的请求被取消,然后在中断服务程序中再次被触发,它将再次被挂起。即使中断被失能,挂起的中断仍然可能产生。
2023-09-12 16:43:07
48
原创 ARM异常处理(1):异常类型、优先级分组和异常向量表
这里的中断号指的是对Cortex-M3 NVIC的中断输入,在实际的微控制器或SoC中,外部中断输入引脚编号可能与NVIC中的输入编号不同,比如External Interrupt #0和External Interrupt #1可能会分配给片上外设,剩下的再分配给外部,需查询具体芯片的数据手册。当分组为7时,异常之间不会发生抢占,除非发生硬件错误(负优先级的异常)。当异常发生时,Cortex-M3需要知道异常处理程序的地址并执行,而异常处理函数的地址保存在内存中的向量表中。
2023-09-12 16:41:29
82
原创 一文搞懂Linux runtime pm
Linux的Runtime PM(runtime power management)框架指的是运行时电源管理,设备在不运行时将自己的时钟、复位及电关闭(时钟的管理框架、regulator的管理框架之前的文章已经介绍,复位的管理框架后面会通过一篇文章来介绍),在使用的时候再打开。其目的是为了减少系统运行时的功耗。
2023-08-24 21:01:33
99
原创 一文搞懂Linux电源管理(合集)
万物运行遵循能量守恒定律,因此,世界上并不存在永动机,一切运动都需要能量。人走路、思考需要能量,汽车在路上跑需要能量,电子产品运行需要能量。另外,能量并不是取之不尽用之不竭的。动物进化出了冬眠,为的就是在天寒地冻,缺乏食物的冬天能够安全地度过。汽车长时间停车,就要熄火,为的就是节省燃料。电子产品在不使用的时候,就要关机或待机,为的就是省电。对于电子产品的功耗管理是一个系统工程,需要在各使用场景下,用尽可能少的资源、功耗,完成想要的功能,并且还要长续航、不发烫。
2023-08-23 15:06:09
224
原创 Shell脚本案例:获取自己上周git提交记录
日常工作周报需要总结上周的主要工作,开发了哪些需求解决了哪些bug,通过git提交日志来呈现是比较客观的,本文介绍如何使用shell调用git命令获取自己上周的git提交记录。# Linux,通过–date参数实线,–date=“-1 day” 代表前一天, –date=“-1 year” 代表上一年。版权声明:本文为CSDN博主「csfchh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# Mac , 通过-v参数,-v-1d 代表前一天,-v-1y代表上一年。
2023-08-22 17:32:04
43
原创 linux程序编译期加入编译时间和svn版本号
通常我们在程序开发时会加入版本查询命令,如:“-v”,此时一般会显示build版本,以及build日期等,因此如果每次编译时能自动添加这些信息的话,就非常方便了。通过他们可以直接得到编译时间,然后可以在代码里打印。2.有点绕不实用,在Makefile中定义一个变量。3.另外还可以用脚本把日期输出到一个文件里。1.在Makefile中定义一个变量。1.最简单方式,代码中直接加入宏。而后在编译命令行中加入宏。而后在编译命令行中加入宏。接下来可以在代码中打印。大功告成,代码中打印吧。
2023-08-22 17:11:23
170
原创 ARM的安全启动—ATF/TF-A以及它与UEFI的互动
ATF的官网一张图包含了更多的信息:如果你仅仅对ATF的UEFI启动路径感兴趣,下面这张图可能更加简单明了:NXP 2160A的开源和良好的文档,让我们可以在一个具体的平台上切片观察ATF的具体实现,建议大家仔细阅读参考资料2和下载代码来看看。
2023-08-22 15:24:17
403
原创 ARM安全技术-使用TrustZone技术构建安全系统(翻译)
本章提供了一些与嵌入式系统安全相关的背景知识。本章包括以下部分:•什么是安全?第1-2页•第1-4页的安全需求•威胁是什么?第1-6页在非常抽象的术语中,术语security可用于涵盖设计的许多非常不同的基本特性。但是,它本质上是系统的一个属性,确保有价值的资源不会被复制、损坏,或者让真正的用户无法使用。每个系统设计都需要一组不同的安全属性,这取决于它试图抵御恶意攻击的资产的类型和价值。资产值得保护的有价值的资源。
2023-08-21 19:59:51
195
原创 REE与TEE运行环境实例
移动端系统运行的环境叫做REE(Rich Execution Environment),在其中运行的系统叫做Rich OS(Operating System),如最常见的Android系统,但是REE是一个开放的环境,容易收到恶意软件的攻击,比如敏感数据被窃取、数字版权被滥用、移动支付被盗用等。TA收到CA的command,则需要处理敏感数据和一些安全性要求高的动作,如TA通过secure spi控制指纹sensor采图,图像传输,图像处理,图像比对,模板存储等。由于TEE中完成计算因此具有较高的安全性。
2023-08-21 17:22:53
202
原创 Arm Trustzone与ATF安全介绍 - 一篇就够了
从上文我们已经知道, ARM Trustzone不具体指一个硬件,也不是一个软件,而是一个技术架构,在支持ARM Trustzone的SOC中,需按照ARM Trustzone技术对各个子模块进行设计。如下便展示了一个SOC的Trustzone架构下的设计框图其中:(1)、AMBA-AXI总线的扩展, 增加了标志secure读和写地址线:AWPROT[1]和ARPROT[1]
2023-08-21 16:56:45
654
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人