• 最新文章

看wireshark报文技巧

TCP握手与挥手 握手看SYNC与ACK 第一次握手标志, 第二次握手看标志,第三次ACK。 挥手看FIN 报文交互 正常交互 先看len,当长度为0,这个包是ack包,长度不为0表示是发送的数据包。 再看ack,表示该值以前的序号都收到了。ack是对端上一个报文的seq+len,同时也是期望对端下一个发包。 警告交互 TCP Dup ACK 重传ACK

MQTT协议分析

什么是MQTT MQTT是基于TCP/IP网络协议栈构建的异步通信消息协议,基于发布-订阅模式进行传输。实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中, MQTT协议中有三种身份: 发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。 其中消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者,客户端之间的通信完全是空间解耦的。

SSL/TLS协议分析

什么是TLS 1994: SSL 1.0 NetScape公司提出SSL第一版,未公开。 1995: SLL 2.0 公开发布了第二版,与2011年弃用。 1996: SSL 3.0 第三版得到大规模应,于2015年弃用。 1999: TLS 1.0 RFC2246,被IETF纳入标准化,没太大改动,改名TLS。 2006: TLS 1.1 RFC4346,修复bug,增加参数。 2008: TL

Linux系统编译生成镜像流程

编译内核 清除内核 命令 ${MAKE} O= mrproper 示例 make CROSS_COMPILE=riscv32-unknown-linux- ARCH=riscv -j16 O=kernel/build KERNEL_SRC=kernel/linux-5.4 INSTALL_MOD_PATH=kernel/staging O= mrproper 配置defconfig 命令 defc

I2C协议总结

简介 以下是 I2C 总线的一些特性: 只需要两条线;串行数据线(SDA)和串行时钟线(SCL)。 连接到总线的每个设备都可以通过唯一的地址进行软件寻址简单的控制器/目标关系始终存在;控制器可以作为控制器发射器或控制器接收器。 它是真正的多控制器总线,包括冲突检测和仲裁,以防止如果两个或多个控制器同时发起数据传输,则会导致数据损坏。 串行面向8位的双向数据传输速度可达 100 kbit/s 标准模

系统死机排查思路

反汇编现场寄存器 kasan watchpoint: 针对固定位置 栈溢出检测: cache:检查地址对齐、长度对齐(少/多刷,少/多无效)。 现象一般是watchpoint抓不到,软件复位无效,如USB驱动与cpu会同时操作内存。 硬件: 排除个体差异,存在电压、电流等不稳定,或者芯片不良等异常或内存、flash异常。

内存地址对齐

内存地址对齐是在内存中的数据(具体为变量的地址、内存块的地址)按照指定地址长度对齐,包含了基本的变量数据对齐和结构体数据对齐。 为什么需要内存对齐? 可以提高CPU和内存交互的效率,比如一个32位的系统,CPU读取内存,硬件设计上只支持4字节或4字节的倍数对齐进行地址访问,CPU在每次访问内存时,一个周期可以访问4字节,如果要访问的数据是4字节对齐的地址,CPU一次就可以把数据访问完毕;如果访问的

function graph tracer原理

概述 Function graph相对function trace的不同点是,在函数入口会trace,在函数出口也会trace。 ksys_read ->vfs_read ->ftrace_caller ->prepare_ftrace_return ->function_graph_enter ->ftrace_push_return_trace(&trac

静态ftrace

上面章节主要描述的是动态ftrace,在早期还有静态ftrace。区别主要如下: - 动态ftrace与静态ftrace在编译参数方面静态编译使用的是参数“-pg”,而动态使用的是fpatchable-function-entry。 - 工具链使能“-pg”参数时,会在每个函数体前面插入_mcount函数。而动态ftrace会在函数入口(函数准备阶段前)插入nop指令。 - 静态ftrace插入的

动态function tracer原理

fpatchable-function-entry选项 编译时指定-fpatchable-function-entry=N,①会在函数入口第一个指令之前插入N个nop,但是会保留M个放到函数入口之前,如果省略M则默认为0;②同时需要一个特殊的-fpatchable-function-entry段来记录所有函数的入口,如下蓝色部分。nop指令保留了额外的空间,可用于在运行时修改nop指令,添

ftrace的使用

tracer irqsoff 当关闭中断时,CPU就无法响应中断了(NMI和SMI除外),无法响应外部事件做出反应。这会阻止定时器触发或鼠标中断触发,导致系统延迟。 irqsoff跟踪器跟踪中断被禁用的时间,当达到新的最大延迟时,跟踪器会保存导致该延迟点的跟踪,一边每次达到新的最大值,旧的保存的跟踪会被丢弃,新的跟踪会被保存。如果要重置最大值,用echo 0写到tracing_max_latenc

ftrace-概述

ftrace是一个内部跟踪器,用于帮助开发人员查找内核正在发生的事情,它可用于调试或分析用户空间之外发生的延迟和性能问题。ftrace从名称上看是function trace,函数跟踪器,但它实际并不限制函数跟踪,而是多个不同跟踪实用程序的框架。延迟跟踪可以检查在禁用和启用中断之间发生的情况,以及抢占和从唤醒任务到实际运行任务的时间。 ftrace最常见的用途之一是用于事件跟踪(event tra

启动第一个应用进程

start_kernel ...... arch_call_rest_init() rest_init(); pid = kernel_thread(kernel_init, NULL, CLONE_FS); static int __ref kernel_init(void *unused) { int ret; kernel_init_freeable(); /* need to finish