自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pwl999的博客

RTFSC: Read The Fucking Source Code

原创 Android Binder 机制详解

1、binder原理 纵观现有市面上所有讲binder的文章,都存在一个最大的问题:没有讲清楚binder对象是什么? 不清楚binder对象是什么,那就不能理解handle是什么?不能理解什么时候是binder什么时候是handle,那就不能真正理解整个IPC的通讯过程。 我们首先回到bi...

2018-12-12 19:32:31 880 1

原创 systrace 解析

上图基本就能说清systrace的整个框架: 1、systrace调用atrace抓取目标机的trace数据; 2、systrace把trace数据和’prefix.html’、‘suffix.html’、'systrace_trace_viewer.html’合成一个’tr...

2018-10-29 18:35:57 4512 0

原创 Linux bpf+bcc(目录)

1、内核态解析: 1.1、bpf内核框架 2、用户态(前端)解析: 2.1、bcc 3、参考资料: 3.1、Berkeley Packet Filter (BPF) (Kernel Document) 3.2、BPF and XDP Reference Guide 3.3、DTra...

2018-10-16 11:47:49 734 0

原创 Linux perf(目录)

1、内核态解析: 1.1、perf_event内核框架 1.2、tracepoint events 1.3、software events 1.4、hardware events 2、用户态解析: 2.1、simpleperf perf工作的基础是trace...

2018-08-03 19:22:49 1075 0

原创 Linux ftrace(目录)

Ftrace从字面上理解=Function trace,但是发展到现在已经不仅仅是function trace而是一个大集合,鉴于其搭建的良好的框架(ringbuffer、tracefs…),各种trace纷纷投奔而来。现在大概分为两大类:tracer、event。 tracer。发展出了fu...

2018-06-15 10:48:28 951 0

原创 Device Tree 详解

1、DTS语法 对于DeviceTree的来历和用处大部分人都已经非常了解了,DeviceTree发源于PowerPC架构,为了消除代码中冗余的各种device注册代码而产生的,现在已经成为了linux的通用机制。 DeviceTree的结构非常简单,由两种元素组成:Node(节点)、Prop...

2018-03-20 20:47:12 9517 0

原创 Linux schedule (目录)

本来打算一篇发表的,但是写的太长太长了,注释了很多代码,只能分成一章一篇了。1、调度的时刻2、调度算法3、负载计算4、负载均衡5、EAS(Energy-Aware Scheduling)6、Cgoup

2017-12-16 03:13:00 2518 4

原创 Linux Interrupt

在面试的时候我们常常问或者被问一个问题:几种中断下半部机制softirq、tasklet、workqueue有什么区别?linux为什么要设计这几种机制?真正能够回答清楚的人还是少数的。下面我们就详细分析一下这其中的区别。

2017-10-11 16:24:06 1233 0

原创 Linux 进程的Stop,Park,Freeze

在调试内核的时候,经常会碰到几个相近的概念:进程stop、进程park、进程freeze。这几个名词看起来都是停止进程,那么他们之间的区别和应用场景在分别是什么呢?下面就来分析一番。 本文的代码分析基于linux kernel 3.18.22,最好的学习方法还是”RTFSC” 1.进程stop...

2017-10-11 15:48:09 966 0

原创 Linux Workqueue

workqueue是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务(work)都不会自己起一个线程来处理,而是扔到workqueu中处理。workqueue的主要工作就是用进程上下文来处理内核中大量的小任务。 所以workqueue的主要设计思想:一个是并行,多个work不要相互阻塞;...

2017-10-11 15:30:50 887 0

原创 Linux Signal

信号的基本使用场景:使用“ctrl+c”中止一个程序,或者使用”kill pid”命令杀掉一个进程。 Linux信号机制基本上每个同学都用过,但是信号的具体实现机制还是有很多人不清楚的。在很多人的概念中信号是一种异步机制,像中断一样。但是除了硬中断,信号也是由中断实现的吗?如果不是中断,系统又怎...

2017-10-11 14:48:49 610 0

原创 Linux Time

1、Linux时钟框架上图是linux时钟框架一个经典的描述。本质上linux各种时钟架构和服务是基于硬件提供的两种timer而构建的。1、定时Timer 这类timer每个cpu都有一个独立的,称为local timer。这类timer的中断一般都是PPI(Private Peripheral ...

2017-10-11 14:10:29 2533 0

原创 Performance优化思路

以前写的PPT转成图片。

2020-07-11 16:48:48 14 0

原创 X86寄存器 (笔记)

文章目录1. 16位cpu1.1 段寄存器2. 32位cpu2.1 通用寄存器2.2 系统表寄存器2.2.1 全局描述符表GDT(Global Descriptor Table)2.2.2 局部描述符表LDT(Local Descriptor Table)2.2.3 任务状态段TSS(Task S...

2020-07-10 19:16:07 30 0

原创 使用ftrace分析函数性能

0. 背景 ftrace的功能非常强大,可以在系统的各个关键点上采集数据用以追踪系统的运行情况。既支持预设的静态插桩点(trace event),也支持每个函数的动态插桩(function tracer)。还可以利用动态插桩来测量函数的执行时间(function graph tracer)。关于f...

2020-07-01 17:01:13 93 1

原创 LSM(Linux Security Modules)框架原理解析

1. 基本原理 LSM是内核安全模块的一套框架,本质是插桩法。它的主要有两个特点: 1、在内核安全相关的关键路径上插入了Hook点: 内核安全相关的关键对象有:task_struct(任务和进程)、linux_binprm(程序)、super_block(文件系统)、inode(管道、文件或者...

2020-07-01 16:32:44 92 0

原创 Linux 死机复位(oops、panic)问题定位指南

一个计算机系统和一个人类社会其实是差不多的,系统在运行中碰到的各种bug相当于人类社会中的各种案件:user space发生的bug危害性一般,可能就相当于一般的民事案件;kernel层面发生bug引起系统死机复位,属于性质特别恶劣后果特别严重的刑事案件。 既然bug相当于案件,那么我们定位bug...

2020-06-23 20:49:09 121 0

原创 x86 PerCPU变量基址(gs寄存器)的原理

0. 引子 我们在调试的时候发现,x86下有一个快捷方法,只需一条简单的汇编指令mov %gs:var就能取出某个percpu变量在当前cpu的值,非常高效。 unsigned long get_mem_value(unsigned long addr) { unsigned long v...

2020-06-23 19:47:25 94 0

原创 LTP(Linux Test Project)使用指南

文章目录1、ltp-ddt简介1.1、ltp1.2、ltp-ddt2、环境构造2.1、交叉编译2.2、文件系统3、测试运行 1、ltp-ddt简介 1.1、ltp LTP(Linux Test Project)是由SGI,OSDL和Bull发起的联合项目,由IBM,思科,富士通,SUSE,红帽,甲...

2020-06-16 14:58:01 117 0

原创 火焰图(FlameGraph)的使用

文章目录1. Perf基础1.1 Perf的安装1.2 Perf的使用2. 火焰图2.1 生成火焰图2.2 生成红蓝差分火焰图2.3 oncpu/offcpu参考文档: 1. Perf基础 1.1 Perf的安装 ubuntu 18.04: sudo apt install linux-tools...

2020-06-16 14:25:42 220 0

原创 AM335x TP驱动解析

文章目录1. 电阻屏原理2. ADC2.1 Device:2.2 Driver:3. TouchSceen3.1 Device3.2 Driver3.3 uDev4. KeyBoard4.1 Device4.2 Driver5. InputDevice5.1 Input字符设备5.2 input_...

2020-06-16 14:06:49 170 0

原创 AM335x LCD驱动解析

文章目录1. LCD背景2. LCD驱动2.1 Device2.2 Driver2.2.1 fbmem_init()2.2.2 register_framebuffer()2.2.3 /dev/fb0 文件操作2.2.4 '/sys/class/graphics/fb0/blank&#...

2020-06-16 11:43:59 58 0

原创 AM5728 IPC机制解析

文章目录1. platform bus layer的实现1.1 dsp加载命令1.2 platform device1.3 platform driver1.3.1 omap_rproc_probe()1.3.2 rproc_add()1.3.3 rproc_add_virtio_devices(...

2020-06-16 11:28:58 147 0

原创 Linux gpio、pinctl 驱动解析

文章目录1. gpio使用实例1.1 dts定义1.2 platform driver1.3 driver probe1.4 常用gpio操作函数1.5 pinctrl配置1.6 寄存器调试2. gpio sys文件系统3. gpio 子系统原理3.1 gpio_to_desc()3.2 gpio...

2020-06-16 11:21:10 123 0

原创 Linux i2c RTC 驱动解析

Linux i2c RTC 驱动解析1. i2c adapter1.1 device (dts)1.2 driver1.3 i2c transfer1.4 i2c-dev1.5 pin mux2. i2c client2.1 device (dts)2.2 driver2.3 interrupt3...

2020-06-16 11:05:12 101 0

原创 Linux fanotify 解析

Linux fanotify 解析1. 基本介绍1.1 基本原理1.2 fanotify基本功能2. 用户态实现2.1 实例代码2.2 API介绍3. 内核实现3.1 配置fanotify3.1.1 fanotify_init()3.1.2 fanotify_mark()3.2 触发fanotif...

2020-06-16 10:37:57 73 0

原创 Linux fsck 机制解析

Linux fsck 机制0. 概述1. Upstart 方式 (ubuntu 14.04 32bit)1.1 配置fsck启动1.2 配置fsck运行参数1.3 mountall.config1.4 mountall1.5 fsck2. Systemd 方式 (ubuntu 16.04 64bi...

2020-06-15 17:03:24 102 0

原创 Linux bpf 2.1、bcc的实现

bcc全称为(BPF Compiler Collection),它是模仿gcc(GNU Compiler Collection)的命名风格。 BPF是运行在内核态的一种虚拟机语言,我们在用户态可以通过Clang+LLVM把c语言编译成BPF目标码,然后通过加载器loader(bcc/perf/ip...

2018-10-16 11:46:35 1269 1

原创 Linux bpf 1.1、BPF内核实现

BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:“3.1、Berkeley Packet Filter (BPF) (Kernel Document)”、“3.2、BPF and XDP Referenc...

2018-09-28 15:36:04 6709 1

翻译 Linux bpf 3.2、BPF and XDP Reference Guide

开源软件Cilium深度的使用了BPF来做网络安全,它的文档中使用了一个章节专门的来介绍BPF的原理和使用。 参考原文:BPF and XDP Reference Guide 注意:本文档部分针对的是希望深入了解BPF和XDP的开发人员和用户。尽管阅读本参考指南可能有助于拓宽你对Cili...

2018-09-14 17:45:32 2927 1

翻译 Linux bpf 3.1、Berkeley Packet Filter (BPF) (Kernel Document)

关于bpf最早是应用于network的filter,后续才被应用到trace,所以kernel中关于bpf的文档是”Documentation/networking/filter.txt”。 参考原文:Linux Socket Filtering aka Berkeley Packet Fi...

2018-09-07 20:44:42 1944 0

原创 Linux perf 2.1、simpleperf

因为perf原生的用户态工具(kerneldir/tools/perf)交叉编译出错较多,用户态源码分析改用android 7.0简化版simpleperf来分析。simpleperf支持完整perf命令中的一些常见子命令。 1、命令框架 源码入口在system/extras/simple...

2018-08-03 19:17:07 1410 0

原创 Linux perf 1.4、hardware events

可以通过perf list命令来查看系统中的hardware event: # simpleperf list hw List of hardware events: cpu-cycles instructions cache-references cache-misses ...

2018-08-02 16:24:52 1055 0

原创 Linux perf 1.3、software events

可以通过perf list命令来查看系统中的software event: # simpleperf list sw List of software events: cpu-clock task-clock page-faults context-switches cp...

2018-07-31 15:20:38 492 0

原创 Linux perf 1.2、tracepoint events

perf复用了ftrace中trace_event的所有插桩点(即tracepoint),trace数据即可以通过ftrace的通道提供,也可以被包装成perf_event供perf工具使用。 可以通过perf list命令来查看系统中的tracpoint event,可以看到和/sys/ker...

2018-07-26 15:44:34 1146 0

原创 Linux perf 1.1、perf_event内核框架

为什么有了ftrace又出来一个perf?因为ftrace只管抓trace数据并没有分析,perf在trace数据分析方面做出了很多成果。 在trace数据采集方面,perf复用了ftrace的所有插桩点,并且加入了采样法(硬件PMU)。PMU是一种非常重要的数据采集方法,因为它大部分是硬件的,...

2018-07-25 12:18:53 4092 5

原创 Linux ftrace 1.5、syscall event

1、函数插桩 1.1、”events/raw_syscalls/sys_enter”、”events/raw_syscalls/sys_exit” trace event的插桩 在系统调用的出口、入口路径上,系统布置了两个tracepoint格式的trace event。 el0_svc...

2018-06-15 10:28:15 613 0

原创 Linux ftrace 1.4、kprobe event

从前面几章看:trace event使用静态tracepoint插桩,function tracer使用“bl _mcount”的插桩点来动态插桩。既然都是插桩,为什么我们不使用功能强大的kprobe机制? kprobe event就是这样的产物。krpobe event和trace event...

2018-06-14 10:24:35 543 0

原创 Linux ftrace 1.3、tracer (function、function_graph、irq_off)

如trace event一章的描述,任何一种trace都离不开以下流程: 函数插桩。使用各种插桩方式把自己的trace函数插入到需要跟踪的probe point上; input trace数据。在trace的probe函数被命中时,会存储数据到ringbuffer当中;这里还包括filter和...

2018-06-08 19:08:15 1524 0

原创 Linux ftrace 1.2、trace event

Linux trace中,最基础的就是:function tracer和trace event。鉴于他们搭建的良好的框架(ringbuffer、tracefs),各种trace纷纷投奔而来。 tracer发展出了function、function_graph、irqsoff、preemptof...

2018-05-30 18:44:14 3039 0

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