![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
工具技能知识点学习
文章平均质量分 84
工具技能知识点学习
TrustZone_Hcoco
一个搞技术的读书人,妄图分享最干货的技术知识与世界运转的底层逻辑。公ZH:TrustZone
展开
-
msecs_to_jiffies is what?
函数是 Linux 内核中的一个非常有用的函数,它用于将毫秒(milliseconds)转换为内核的“jiffies”单位。在 Linux 内核中,jiffies是一个全局变量,代表自系统启动以来经过的“滴答”(ticks)数,这里的“滴答”是系统时钟的一个固定周期,通常是几毫秒(如 10ms,但这取决于系统的 HZ 值,即每秒的时钟中断次数)。原创 2024-08-16 22:42:56 · 302 阅读 · 0 评论 -
数字电路波形图绘制工具WaveDrom简介
WaveDrom是一个免费和开放源代码的在线数字时序图(波形)渲染引擎,使用javascript,HTML5和SVG将WaveJSON输入文本描述转换为SVG矢量图形。WaveJSON是JSON格式的应用程序。WaveJSON的目的是为数字硬件/ IC工程师使用的数字时序图提供一种紧凑的交换格式。WaveDrom可以支持在线使用https://wavedrom.com/editor.html。原创 2024-08-09 23:09:58 · 886 阅读 · 0 评论 -
基础概念 | DDR的几个概念
答:CPU与内存之间的接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。生产商把64bit集合称为一个物理BANK(Physical BANK),简写为P-BANK。为了和逻辑BANK相区分,也经常把P-BANK称为RANK或Physical RANK,把L-BANK则简称为BANK。原创 2024-07-22 13:53:11 · 697 阅读 · 0 评论 -
面试真题 | 说说TCP为什么需要三次握手和四次挥手?
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备过程如下:上述每一次握手的作用如下:通过三次握手,就能确定双方的接收和发送能力是正常的。之后就可以正常通信了如果是两次握手,发送端可以确定自己发送的信息能对方能收到,也能确定对方发的包自己能收到,但接收端只能确定对方发的包自己能收到 无法确定自己发的包对方能收到并且两次握手的话, 客户端有可能因为原创 2024-07-14 21:33:09 · 785 阅读 · 0 评论 -
通信协议 | 三次握手、七次握手、四次挥手
客户端想要通过 HTTP 请求访问服务端时,需要经过三次握手;通过 HTTPS 访问服务端时,需要额外增加四次握手。TCP 协议需要通过三次握手建立可靠连接。想要建立 HTTPS 安全连接,需要在 TCP 可靠连接基础上使用 TLS 协议。TLS 协议需要四次握手才能建立安全连接。终止 TCP 可靠连接时需要四次挥手。需要注意的是,本文所说的三次握手、七次握手、四次挥手都是基于特定版本的协议,不同版本的协议所需握手次数可能不同。原创 2024-07-14 21:25:49 · 1146 阅读 · 0 评论 -
网络协议 | MQTT协议草案5.0中文版
MQTT是一个客户端-服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。MQTT协议5.0版本在3.1.1版本的基础上增加了会话/消息延时功能、原因码、主题别名、in-flight流控、属性、共享订阅等功能,增加了用于增强认证的AUTH报文。原创 2024-07-06 12:48:28 · 668 阅读 · 0 评论 -
共享库的加载时重定位
本文旨在解释现代操作系统如何实现使用加载时重新定位的共享库。它专注于运行在32位x86上的Linux操作系统,但一般原则也适用于其他操作系统和CPU。请注意,共享库有许多名称-共享库、共享对象、动态共享对象(DSO)、动态链接库(DLL,如果你来自Windows背景)。原创 2024-02-28 16:23:54 · 310 阅读 · 0 评论 -
芯片DFX:Coresight的两大功能
coresight具有两大功能,一个是debug,一个是trace。转载 2023-11-02 09:30:13 · 323 阅读 · 0 评论 -
芯片DFX:Coresight-APB,ATB总线
APB和ATB总线,是coresight中常用的2个总线。对于coresight组件的访问,而,使用ATB总线进行传输。转载 2023-11-01 13:24:16 · 331 阅读 · 0 评论 -
芯片DFX:Coresight-Rom Table
在一个soc中,有多个coresight组件,,去获取这些coresight组件的信息了?这个时候,就需要靠coresight组件中,ARM规定,在一个soc中,必须要实现至少1个Rom table,该Rom table,rom table只会占用一个4K空间大小,也就是PIDR4寄存器的SIZE为0。转载 2023-11-01 13:23:56 · 196 阅读 · 0 评论 -
芯片DFX:Coresight-channel interface
channel interface是用来使不同coresight组件之间传递event使用。使用两个组件来实现:◾CTM: cross trigger matrix, 接收CTI的channel信号,然后广播给其他CTI◾CTI:cross trigger interface, 接收trigger信号,发送trigger信号,接收channel信号,发送channel信号channel interface的典型应用。每个coresight组件和对应的CTI相连,那这个CTI就可以。转载 2023-10-31 20:02:48 · 146 阅读 · 0 评论 -
芯片DFX:Coresight寄存器
比如可以规定,该寄存器的最低位,表示最近该寄存器被读取过,第1位,表示最近该寄存器被写过。CLAIMCLR寄存器:CLAIMSET寄存器。转载 2023-10-31 20:02:04 · 247 阅读 · 0 评论 -
ARM:CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析
在许多应用中,我们需要对嵌入式系统进行详尽的调试和测试。此时,官方的IDE可能无法满足我们的需求,而需要寻找其他的专业工具。其中,劳特巴赫公司提供的调试工具备受推崇。该公司专门为各种不同的芯片和处理器提供高端的调试解决方案,其工具功能强大,易于使用,但价格较为昂贵。对于某些特定领域或大型项目,系统的复杂性和规模需要更强大的调试工具。此时,劳特巴赫公司成为了一个值得信赖的选择。他们的调试工具可以捕捉偶发性的问题、进行死机调试、代码分析、函数运行时间测试等操作,这些都是在开发过程中非常实用的功能。原创 2023-10-26 13:14:12 · 2490 阅读 · 0 评论 -
OTA技术,谁在受益?谁又在收益?
目前,各大OEM(Original Equipment Manufacturer)把OTA(Over the Air)技术已经玩的炉火纯青,已然成为他们修复车辆Bug的利器。甚至一些OEM每月都会去工信部报备一下,让自家"显眼包"(OTA技术)亮亮相,美其名曰:“产品优化”、“提升Xx体验”…其实呢,这都是OEM灌输给售后(4s店)的话术。当然,不排除部分功能优化体验,但是,大部分都是去修Bug的。本文,咱们聊一聊这样一个Topic(话题):OTA技术,谁在受益?谁又在收益?转载 2023-10-23 17:21:12 · 108 阅读 · 0 评论 -
借力EDA,AI芯片全速优化验证过程
半导体各领域的发展难度与日俱增,验证可能是整个发展过程中最具挑战性的阶段。多年来,研究显示在验证上投入的时间和资源所占的百分比会随着新时代芯片的出现而增加。因此整体上,。电子设计自动化(EDA)产业将人工智能(AI)的力量应用到验证过程的各个步骤,以应对这样的情况。转载 2023-10-14 16:09:53 · 322 阅读 · 0 评论 -
systemtap从入门到放弃
systemtap是一个用于简化linux系统运行形态信息收集的开源工具。它立足于性能诊断和bug调试,消除了开发人员在收集数据时需要经历的繁琐和破坏性的工具、重新编译、安装和重新引导的过程。这是systemtap官方wiki给出的介绍,这里不深究它的原理,网上有个图可以清晰得展现systemtap的五脏六腑:systemtap可以动态得hook内核代码,其底层就是使用的kprobe接口。转载 2023-10-14 15:23:36 · 462 阅读 · 0 评论 -
内存泄漏检测工具valgrind神器
常用选项,适用于所有Valgrind工具-tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。h –help 显示帮助信息。-version 显示valgrind内核的版本,每个工具都有各自的版本。q –quiet 安静地运行,只打印错误信息。v –verbose 更详细的信息, 增加错误数统计。-trace-children=no|yes 跟踪子线程?[no]-track-fds=no|yes 跟踪打开的文件描述?[no]原创 2023-10-14 14:28:23 · 913 阅读 · 0 评论 -
Huawei LiteOS 概览
Huawei LiteOS是华为面向IoT领域,构建的轻量级物联网操作系统,可广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域。Huawei LiteOS开源项目目前支持 ARM64、ARM Cortex-A、ARM Cortex-M0,Cortex-M3,Cortex-M4,Cortex-M7 等芯片架构。任务管理提供任务的创建、删除、延迟、挂起、恢复等功能,以及锁定和解锁任务调度。支持任务按优先级高低的抢占调度以及同优先级时间片轮转调度。内存管理。原创 2023-10-11 16:00:02 · 1634 阅读 · 0 评论 -
芯片设计流片、验证、成本的那些事
芯片从设计到成品有几个重要环节,分别是设计->流片->封装->测试,但芯片成本构成的比例确大不相同,一般为人力成本20%,流片40%,封装35%,测试5%。芯片流片是高风险的事情,这个风险有多高,这个概率在15%-35%左右;不同的团队和芯片种类概率也不一样。有模拟芯片公司即使在团队完备、思路清晰的情况下,还是耗了8年时间,历经18次流片,才最终完成了传感器模拟计算IP验证,打造出了理想中的那颗超低功耗、超近传感芯片。转载 2023-10-05 20:21:19 · 1323 阅读 · 0 评论 -
Nvidia和AMD显卡是如何制作的
我们参观了世界上最大的显卡制造商之一,看看魔术是如何发生的。原创 2023-10-05 14:01:02 · 434 阅读 · 0 评论 -
深入理解bootargs
在嵌入式系统中,bootargs是非常重要的参数。它保存着Linux内核启动的相关信息,如启动参数和控制台信息等。而在ARM架构的系统中,bootargs参数则是在U-Boot引导时设置的。原创 2023-08-28 11:36:04 · 2745 阅读 · 0 评论 -
GDB调试学习(四):段错误
在gdb中运行,遇到段错误会自动停下来,这时可以用命令查看当前执行到哪一行代码了。gdb显示段错误出现在_IO_vfscanf函数中,用bt命令可以看到这个函数是被main.c的第6行间接调用的,也就是scanf这行代码引发的段错误。继续调试上一节的程序,上一节最后提出修正Bug的方法是在循环中加上判断条件,如果不是数字就报错退出,不仅输入字母可以报错退出,输入超长的字符串也会报错退出。gdb指出,段错误发生在第19行。可是这一行什么都没有啊,只有表示main函数结束的}括号。原创 2023-08-18 00:42:51 · 887 阅读 · 0 评论 -
GDB调试学习(三):观察点
这个暂时解释不了,但123407这个结果可以解释了,是12345×10 + 0x05-0x30得到的,虽然多循环了一次,但下次一定会退出循环了,因为0x05的后面是’\0’。已经很明显了,每次都是回到for循环开头的时候改变了input[5]的值,而且是每次加1,而循环变量i正是在每次回到循环开头之前加1,原来input[5]就是变量i的存储单元,换句话说,i的存储单元是紧跟在input数组后面的。怎么会有下一次循环呢?=‘\0’,而本来应该是0x00的位置现在莫名其妙地变成了0x04,因此循环不会结束。原创 2023-08-18 00:41:48 · 211 阅读 · 0 评论 -
GDB调试学习(二):断点
至于应该在哪里设置断点,怎么知道哪些代码可以跳过而哪些代码要慢慢走,也要通过对错误现象的分析和假设来确定,以前我们用printf打印中间结果时也要分析应该在哪里插入printf,打印哪些中间结果,调试的基本思路是一样的。接下来的循环从左到右扫描字符串并把每个数字累加到结果中,例如输入"2345",则循环累加的过程是(((0×10+2)×10+3)×10+4)×10+5=2345。可见断点有助于快速跳过没有问题的代码,然后在有问题的代码上慢慢走慢慢分析,“断点加单步”是使用调试器的基本方法。原创 2023-08-17 09:05:48 · 301 阅读 · 0 评论 -
GDB调试学习(一):单步执行和跟踪函数调用
程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪。到目前为止我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,基本上证明了自己假设的错误原因,就可以动手修正Bug了,如果结果和预期的不一样,就根据结果做进一步的假设和分析。原创 2023-08-16 11:32:39 · 1336 阅读 · 0 评论 -
【转】万字长文解读 Linux 内核追踪机制
注入到我们想要追踪的内核函数执行前后,当内核函数执行时触发我们定义的函数,我们在函数中实现获取我们想要的上下文信息并保存下来。转载 2023-07-21 00:15:51 · 250 阅读 · 0 评论 -
TCM、ITCM、DTCM
TCM=Tightly Coupled Memory,是一种高速缓存,据说是被直接集成在CPU芯片中。注意:1.内存支持列表中,内存详细参数里,SS指的是单面内存,DS指的是双面内存。内存一共有两面,根据内存总容量和内存芯片的存储容量,内存厂家会生产双面内存和单面内存,也就是内存的两面都有存储芯片,或者只有一面有存储芯片。单双面内存在兼容性上有一定区别,所以会单独列出来。2。ITCM是cortex内核中指令传输总线,DTCM是cortex内核中数据传输总线。原创 2023-07-20 00:15:23 · 2742 阅读 · 0 评论 -
什么是BSDL&SVF文件?
在某些情况下,制造商需要实现与标准包中定义的单元不同的单元,在这种情况下,BSDL 文件需要包含有关此类自定义单元的信息,方法是将数据直接包含在文件中,或者更常见的是,通过添加对单独 VHDL 包文件的调用。自定义单元格包文件的调用方式与标准单元格的调用方式类似:例如,要调用文件 MyPackage,将输入语句“use MyPackage.all”。由于单元格可以以许多不同的方式使用,因此自定义单元格包将包含每个单元格的几条信息,以描述它如何在每种使用模式下响应不同的命令。原创 2023-07-04 23:35:47 · 708 阅读 · 0 评论 -
万文长字带你搞懂JTAG的门门道道
JTAG:Joint Test Action Group“(联合测试工作组) 的英文缩写边界扫描要求符合IEEE1149.1 (JTAG) 标准BSDL(Boundary- ScanDescriptionLanguage)边界扫描描述语言边界扫描测试 (Boundary-Scan-TEST):对符合IEEE1149.1标准的器件,通过BSDL文件生成测试向量, 测试器件开路短路的一种测试方法边界扫描(Boundary Scan)测试发展于上个世纪90年代,随着大规模集成电路的出现,原创 2023-07-02 13:28:32 · 373 阅读 · 0 评论 -
FMC&FSMC
同步/异步静态存储器-------SRAM、DRAMSDRAM存储器---------------SDRAM所有外部存储器共享地址、数据和控制信号,但有自己的片选信号。FMC一次只能访问一个外部器件。原创 2023-05-06 21:35:53 · 4598 阅读 · 0 评论 -
【转】如何编译linux驱动ko
本文描述了liunx驱动ko的编译方法,其中单编驱动ko是本文的重点。什么是ko?在Linux中一个.ko文件就是一个模块文件。1、模块自身不被编译到内核映像中,从而不影响内核映像的大小2、一旦模块被加载,模块和内核中的其他部分的功能完全一样。本文描述了liunx驱动ko的编译的两种方法:整编内核 和单编KO。并重点描述了单编ko的实现方法和优势。转载 2023-04-26 21:37:23 · 2067 阅读 · 3 评论 -
【转】到底什么是CDN?
之前在看DRM的时候,其中讲到这个视频的分发使用的是CDN。但是对于CDN不知道是什么,之前做物联网方面的云服务的时候也听说过,这里来看看CDN。如今这个移动互联网时代,越来越多的人使用手机观看视频,丰富自己的娱乐生活。回答这个问题之前,我们先来做一道算术题。以之前很火的“延禧攻略”为例,当时曾经在某视频APP实现了1千万用户同时在线观看。转载 2023-04-13 00:00:48 · 109 阅读 · 0 评论 -
PXE启动
并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP或MTFTP协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。PXE协议大致上结合了DHCP和TFTP,虽然都有在两者上面有改进。PXE通常都是利用固件来启动计算机,这种固件是包含数据的只读内存(ROM)或是可编程只读内存(PROM)芯片,而不是包含数据的磁介质。原创 2023-02-23 21:46:49 · 4636 阅读 · 0 评论 -
initrd是什么?
initrd = initialized RAM disk,是一个启动时存在于内存的文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。原创 2023-02-23 21:44:13 · 2474 阅读 · 0 评论 -
内核宏之—DIV_ROUND_UP(向上取整)&&virt_to_page&&GRUB,UEFI
开机出现GRUB引导主要原因是,一般现在的电脑现在都不再是legacy BIOS引导,而是UEFI这种快速启动的引导方式,在硬件的BOOT权限设置时,一般有legacy first和UEFI first这两个选项,若是采用legacy first的话一般是不会出现GRUB界面的,因为grub多用于引导LINUX系统,此时boot是优先导入LINUX。某一次缓冲区申请的大小是 A,这个时候,就可以用这个算法,计算出缓冲区的一个合。由于A>1、B>1,且A、B都是整数,所以可以设A=NB+M。原创 2023-02-23 20:01:35 · 1234 阅读 · 0 评论 -
什么是GN?以及顺便学点构建系统。
什么是GN?以及顺便学点构建系统。GN是一个生成Ninja Build文件的元构建系统。这意味着比GYP更快、更简单。它只输出Ninja构建文件。在探讨chromium的最新GN构建系统之前,回顾一下软件开发中的构建系统。构建系统的需求是随着软件规模的增大而提出的。如果只是做软件编程训练,通常代码量比较小,编写的源代码只有几个文件。比如你编写了一段代码放入helloworld.c文件中,要编译这段代码,只需要执行以下命令:gcc helloworld.c。原创 2023-02-15 20:34:20 · 2826 阅读 · 1 评论 -
第二次使用脚本后想学点东西:grep
之前不是在弄一个日志筛选脚本吗?我想在测试完以后去打印出我的日志是否有成功运行。原来的测试通过就会打印pass或者success,我本来想着用这个作为关键词,结果发现在测试用例运行的时候也会打印这些东西。于是我就想在完成一个测试用例自己去echo上一些特殊的符号,这样就可以作为一个筛选。同时因为这个echo的特殊符号就是测试用例执行完成的后一句,而测试用例的最后一句打印出来,这不是我的目的就达成了。于是用grep筛选关键词,那么怎么去实现用grep显示筛选目标的前后行呢?原创 2023-02-15 20:05:34 · 186 阅读 · 0 评论 -
来学点eBPF and XDP装一下
接触到这个概念总是在所难免,毕竟搞安全的,之前也看过eBPF,但是没有深究,这次就来看看这个,有个大概得认知,知道这个是什么东西。以后有涉及的时候,才知道从哪里下手。原创 2023-02-13 23:48:32 · 147 阅读 · 0 评论 -
加密狗是什么呢?
经过上面的介绍大家可以基本了解到我们常见的加密狗的基本破解方法,而大家最常见的免加密狗补丁破解则就是属于第三种破解方式。而大家购买加密狗常见的两种所谓有驱加密和无驱加密狗则分别对应第三种dll文件破解和复制狗破解,有驱狗的最大特点就是安装完程序和必要的驱动(这个是官方驱动)后还需要打一个补丁,这个补丁名字繁多,什么所谓升级补丁、新版驱动等等,其实都是破解补丁而已,只不过经过了二次加密需要验证加密狗,当然这也是为了促进销售的举措,实际上那个加密狗只是一个摆设,仅仅验证补丁的加密而已,所以价格极为低廉。原创 2023-02-13 23:26:24 · 4831 阅读 · 0 评论 -
第一次使用脚本后想学点东西
有两种格式可以用来在 bash shell 脚本中创建函数。第一种格式采用关键字 function,后跟分配给该代码块的函数名。commands第二种格式更接近于其他编程语言中定义函数的方式。name() {commandsname:定义了赋予函数的唯一名称。脚本中定义的每个函数都必须有一个唯一的名称。commands:构成函数的一条或多条 bash shell 命令。在调用该函数时,bash shell 会按命令在 函数中出现的顺序依次执行,就像在普通脚本中一样。原创 2023-02-13 23:07:36 · 122 阅读 · 0 评论