自定义博客皮肤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

  • 博客(107)
  • 资源 (11)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Unwind 栈回溯详解

1. 历史背景1.1 frame pointers在调试的时候经常需要进行堆栈回溯。最简单的方式是使用一个独立的寄存器(ebp)来保存每层函数调用的堆栈栈顶(frame pointer):pushl%ebp movl%esp,%ebp ... popl%ebp retx86_64的frame point模式arm64的frame point模式这种方式在堆栈回溯时非常方便快捷。但是这种方法也有自己的不足:需要一个专门寄存器ebp来保存frame poniter。保存e

2020-07-24 21:02:33 1085

原创 Android Binder 机制详解

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

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

原创 systrace 解析

上图基本就能说清systrace的整个框架:1、systrace调用atrace抓取目标机的trace数据;2、systrace把trace数据和’prefix.html’、‘suffix.html’、'systrace_trace_viewer.html’合成一个’trace.html’文件;3、使用chrome浏览器打开’trace.html’就可以非常方便的以图形化的形式来查看和分...

2018-10-29 18:35:57 6173

原创 Linux bpf+bcc(目录)

1、内核态解析:1.1、bpf内核框架2、用户态(前端)解析:2.1、bcc3、参考资料:3.1、Berkeley Packet Filter (BPF) (Kernel Document) 3.2、BPF and XDP Reference Guide3.3、DTrace for Linux 20163.4、bcc/BPF Tool End-User Tutorial3.5、b...

2018-10-16 11:47:49 888

原创 Linux perf(目录)

1、内核态解析:1.1、perf_event内核框架1.2、tracepoint events1.3、software events 1.4、hardware events2、用户态解析:2.1、simpleperfperf工作的基础是trace数据的采集和分析,但是当铺天盖地的trace数据采集上来的时候该如何分析?答案是具体数据具体分析。 ...

2018-08-03 19:22:49 1459

原创 Linux ftrace(目录)

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

2018-06-15 10:48:28 1395

原创 Device Tree 详解

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

2018-03-20 20:47:12 12052

原创 Linux schedule (目录)

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

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

原创 Linux Interrupt

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

2017-10-11 16:24:06 1387

原创 Linux 进程的Stop,Park,Freeze

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

2017-10-11 15:48:09 1140

原创 Linux Workqueue

workqueue是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务(work)都不会自己起一个线程来处理,而是扔到workqueu中处理。workqueue的主要工作就是用进程上下文来处理内核中大量的小任务。 所以workqueue的主要设计思想:一个是并行,多个work不要相互阻塞;另外一个是节省资源,多个work尽量共享资源(进程、调度、内存),不要造成系统过多的资源浪费。 为了实

2017-10-11 15:30:50 990

原创 Linux Signal

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

2017-10-11 14:48:49 706

原创 Linux Time

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

2017-10-11 14:10:29 2810

原创 Linux ns 1. pid 和 pid_namespace详解

文章目录1. pid1.1 pid_link1.1.1 process1.1.2 thread group1.1.3 process group1.1.4 session1.2 pid的初始化2. pid namespace2.1 clone(CLONE_NEWPID)2.2 setns(CLONE_NEWPID)2.3 unshare(CLONE_NEWPID)2.4 相关函数参考文档:1. pid在linux下获取pid,会发现有好几种类似的id(pid、tgid、pgid、sid),这几种的区别在

2020-11-18 20:03:40 30 2

原创 Linux mem 2.1 page 页帧管理详解

文章目录1. Page1.1 `struct page`定义1.2 `struct page`的初始化1.3 `struct page`的存放位置1.4 `page frame`的物理地址和虚拟地址2. page fault2.1 概述2.2 do_page_fault()2.3 handle_mm_fault()2.4 do_fault()2.5 do_anonymous_page()2.6 do_swap_page()2.7 do_wp_page()3. COW4. Swap4.1 swap out4.

2020-11-06 21:18:05 53 2

原创 Linux mem 1.3 分页寻址(Paging)机制详解

文章目录1. X86手册定义1.1 paging modes1.2 `4-LEVEL PAGING`和`5-LEVEL PAGING`模式1.2.1 `4-LEVEL PAGING`1.2.2 CR3 format1.2.3 PML5/PGD entry format1.2.4 PML4/P4D entry format1.2.5 PDPT/PUD entry format (1-GByte Page)1.2.6 PDPT/PUD entry format (Page Directory)1.2.7 PD/

2020-11-02 17:14:37 52

原创 Xenomai (学习笔记)

文章目录1. 简介1.1 实时OS1.2 Adeos域 (Domain)中断管道(Interrupt Pipe)事件管道(event pipeline)乐观的中断保护系统事件传播基于Linux的实现1.3 Adeos为Xenomai提供的服务Xenomai的主要和次要域名系统调用拦截中断传播启用/禁用中断源在域之间共享中断中断共享和延迟结论Xenomai用户层实时的实现(TSC)Xenomai多API构架(skin)Xenomai的应用接口在Cobalt和LInux之间迁移线程Real-Time Drive

2020-11-01 11:12:26 580 1

原创 AM5728 中断映射

文章目录1. Interrupt Controllers(MPU_INTC)2. Device Interrupts3. IRQ_CROSSBAR Module4. pcie controller 中断5. pcie msi 中断1. Interrupt Controllers(MPU_INTC)The MPU_INTC module (also called Generalized Interrupt Controller [GIC]) is a single functional unit that

2020-11-01 10:57:22 22

原创 软件测试方案设计

文章目录1、软件框架2、测试方案设计2.1、测试覆盖2.2、功能测试和压力测试2.3、自动化测试2.4、持续集成1、软件框架站在软件的角度,一个系统通常可以分为以下四个层次:应用软件层(app layer)。用户重点自己开发的应用代码,例如我们的运动控制器要跑运动控制app,我们的示教器要跑qt用户交互app;中间软件层(middle layer)。在用户app和os系统之间的软件,一般是一些通用的库文件,比如qt库、算法库;操作系统层(os layer)。给用户层提供标准os服务的软件,一般

2020-11-01 10:51:38 49

原创 vxworks issue: FTP tansfer slowly

文章目录1. 问题现象2. 分析过程Step 1. 排查系统负载过重Step 2. 排查文件系统读写速度Step 3. 排查网口0、网口1Step 4. 排查网卡驱动和网络协议栈Step 5. 排查网口0的走线信号Step 6. 网口0降速测试尝试3. 结论1. 问题现象调试环境:单板(AM335X+linux) --------(GE以太网)----------- 控制器(AM5728+vxworks)出错场景:单板作为ftp client(172.16.89.4),控制器作为ftp server(

2020-11-01 10:44:03 55 2

原创 vxworks issue: pcie msi interrupt

文章目录1. 问题现象2. 分析过程Step 1. 分析传统的int_x中断流程Step 2. 排查MSI中断流程3. 结论1. 问题现象在调试 Am5728 + vxworks时,风河反馈两个pcie插槽,只有pcie1能使用msi中断pcie2不能使用使用msi中断,后来只能把两个插槽都换成传统的int_x中断。为什么pcie2不能使用msi中断?2. 分析过程AM5728对硬件中断处理部分可以参考"am5728_int_map_summary.pdf"。Step 1. 分析传统的int_x

2020-11-01 10:39:48 37

原创 vxworks issue: PCIE Bar Base Address Unalignment

文章目录1. 问题现象2. 分析过程Step 1. 排查网卡驱动(vxbGei825xxEnd.c)Step 2. 综合分析(相关知识)Step 3. 排查PCIE物理地址和CPU物理地址转换(vxbPci.c)Step 4. 排查PCIE物理地址的配置(vxbPciAutoCfg.c)3. 结论1. 问题现象在调试 Am5728 + vxworks + 外部pcie网卡(i210) 时,发现可以找到pcie设备,但是网口不通。现象1.可以在vxbus上看到pcie控制器和i210网卡的相关设备和驱

2020-11-01 10:35:41 40 1

原创 vxworks issue: dtb overwrite

文章目录1. 问题现象2. 分析过程Step 1. 排查网卡驱动(vxbFdtTiCpswEnd.c)Step 2. 排查dtb文件内容Step 3. 排查vxworks内存中dtb内容Step 4. 排查uboot拷贝过程Step 5. 排查Vxworks拷贝过程Step 6. 排查Vxworks运行过程3. 结论1. 问题现象在调试 Am5728 + vxworks时,发现在dts中使能完第二个pcie控制器以后,会造成cpsw网卡注册失败。am572x_idk_ca15.dts加入pcie2控制

2020-11-01 10:27:30 46 2

原创 vxworks issue: load DKM fail

文章目录1. 问题现象2. 定位过程step 1. 排查出错地址在哪个区域?step 2. 大胆尝试3. 结论1. 问题现象在调试Am5728 + vxworks时,,同时加载算法模块DKM(.out)和通讯模块DKM(.out)文件时,发现有内存分配失败的打印,业务无法启动。另外应用还有反馈,如果算法模块中定义了太多的静态变量,会造成通讯模块无法加载。2. 定位过程step 1. 排查出错地址在哪个区域?仔细看了一下出错的地址0x50d440,这个地址是落在Kernel System Vir

2020-11-01 10:21:33 14

原创 Linux掉电保护方案设计

文章目录1. 硬件掉电检测1.1 硬件电路1.2 软件实现1.2.1 DTS 配置1.2.2 driver2. 软件增强2.1 系统分区写保护2.2 开机文件系统错误修复2.3 运行时功耗优化设备异常掉电,通常是嵌入式设备不得不面对的难题。如果处理不当,异常掉电会造成文件系统损坏、数据丢失,严重者还会造成外部器件的损坏。一个完备的掉电保护方案,从原理上讲,可以从以下几个方面进行加强:1. 硬件掉电检测1.1 硬件电路硬件掉电保护电路主要提供了以下功能:1、提供了24V掉电检测和5V掉电检测功能

2020-11-01 10:14:03 47

原创 Vxworks应用自启动

文章目录1、背景介绍1.1、Vxworks工程1.2、Vxworks shell2、内核应用程序(DKM)自启动2.1、需求来源2.2、方案1(失败)2.3、方案2(成功)3、用户应用程序(RTP)自启动3.1、自动执行方式1(RTP_APPL_INIT_STRING)3.2、自动执行方式2(RTP_APPL_INIT_BOOTLINE)3.3、自动执行方式3(RTP_APPL_INIT_CMD_SHELL_SCRIPT)3.4、自动执行方式4(RTP_APPL_USER)1、背景介绍在开始之前我们先来

2020-11-01 10:06:53 68 1

原创 igh (学习笔记)

文章目录1. IgH Master 1.5.2 Documentation1.1 特性1.2 Architecture1.2.1 Master Module1.2.2 Master Phases1.2.3 Process Data1.3 Application Interface1.3.1 Master Con figuration1.3.2 Cyclic Operation1.3.3 VoE Handlers1.3.4 Concurrent Master Access1.3.5 Distributed C

2020-10-31 09:19:47 470

原创 etherCAT(学习笔记)

文章目录1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计3. 应用层(Application Layer)

2020-10-31 09:03:05 448 1

原创 Linux mem 1.2 用户态进程空间的创建 --- execve() 详解

文章目录1. 原理介绍1.1 固定地址映射1.2 随机地址映射(ASLR)1.3 文件映射1.4 stack2. 代码详解2.1 execve()2.1.1 bprm_mm_init()2.1.2 copy_strings()2.1.3 security_bprm_check()2.2 load_elf_binary()2.2.1 flush_old_exec()2.2.2 setup_new_exec()2.2.3 setup_arg_pages()2.2.4 elf_map()2.2.5 load_el

2020-10-26 14:44:23 33

原创 Linux mem 1.1 用户态进程空间布局 --- mmap()详解

mmap系统调用Author: pwlDate: 2020-10-20文章目录mmap系统调用1. 原理介绍1.1 映射1.2 vma管理1.3 mmap1.4 缺页异常1.5 layout1.6 brk2. 代码详解2.1 关键数据结构2.2 mmap()2.2.1 mm->mmap_base(mmap基地址)2.2.2 get_unmapped_area()2.2.2.1 arch_get_unmapped_area()2.2.2.2 arch_get_unmapped_area_t

2020-10-20 20:23:52 96

原创 Linux用户态程序 Inject & Hook

文章目录1. 背景介绍1.1 Inject方式1.2 Hook方式2 Inject方式2.1 静态注入2.2 动态注入3. PLT/GOT hook3.1 原理3.2 hook so3.3 hook exe4. inline hook4.1 hook 某个函数4.2 hook 任意位置参考文档:1. 背景介绍1.1 Inject方式我们要hook一个应用,首先我们需要有手段往目标程序添加代码。这种动作一般称之为inject注入,常见的注入手段分为两种:静态注入 (elf的DT_NEED)动态注入

2020-08-21 17:10:26 158

原创 inline hook syscall 详解

文章目录1. hook一般syscall2. hook stub syscall2.1 stub_xxx 原理2.2 方法1:hook `stub_xxx`2.3 方法2:hook `call sys_xxx`参考文档:1. hook一般syscall在安全、性能分析等领域,经常会需要对系统调用syscall进行hook。有些模块在kernel代码中已经预先hook,例如syscall trace event。通常syscall使用sys_call_table[]数组来间接调用:kernel\arc

2020-07-20 18:00:04 184

原创 Ftrace Hook (Linux内核热补丁) 详解

文章目录1. Ftrace Hook 原理1.1 Ftrace Hook框架1.2 对外接口2. Ftrace Hook 实例2.1 hook 过程2.2 CONFIG_DYNAMIC_FTRACE_WITH_REGS 特性支持3. 内核热补丁实例3.1 热补丁原理3.2 实例参考文档:1. Ftrace Hook 原理关于ftrace hook的原理在Linux ftrace一文中有详细的解析,本文就简单的阐述其原理。1.1 Ftrace Hook框架Ftrace Hook的初始设计主要是给ft

2020-07-18 11:21:09 355

原创 Performance优化思路

以前写的PPT转成图片。

2020-07-11 16:48:48 249

原创 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 State Segment)2.2.4 中断描述符表IDT(Interrupt Descriptor Table)2.3 段寄存器2.4 指令指针寄存器和标志寄存器/控制寄存器/调试寄存器/测试寄存器3. 64位cp

2020-07-10 19:16:07 196

原创 使用ftrace分析函数性能

0. 背景ftrace的功能非常强大,可以在系统的各个关键点上采集数据用以追踪系统的运行情况。既支持预设的静态插桩点(trace event),也支持每个函数的动态插桩(function tracer)。还可以利用动态插桩来测量函数的执行时间(function graph tracer)。关于ftrace的详细操作和原理分析可以参考Linux ftrace一文。本文的主要目的主要是利用ftrace来做新增代码的性能分析和优化,应用的主要场景如下:我们在现有的代码中增加了一批新函数A_*()。功能完成

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

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

1. 基本原理LSM是内核安全模块的一套框架,本质是插桩法。它的主要有两个特点:1、在内核安全相关的关键路径上插入了Hook点:内核安全相关的关键对象有:task_struct(任务和进程)、linux_binprm(程序)、super_block(文件系统)、inode(管道、文件或者 socket套接字)、file(打开的文件)、sk_buff(网络缓冲区)、net_device(网络设备)、ker_ipc_perm(Semaphore消息,共享内存段,消息队列)、msg_msg(单个消息)

2020-07-01 16:32:44 651

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

一个计算机系统和一个人类社会其实是差不多的,系统在运行中碰到的各种bug相当于人类社会中的各种案件:user space发生的bug危害性一般,可能就相当于一般的民事案件;kernel层面发生bug引起系统死机复位,属于性质特别恶劣后果特别严重的刑事案件。既然bug相当于案件,那么我们定位bug的过程和破案是差不多的。一般过程如下:1. 首先我们要保留案发现场。只要bug发生的时候cpu还能执行,大部分的软件bug最后都会落入到cpu的陷阱之中。arm准备了3大陷阱来捕获最后的案发现场:undefin

2020-06-23 20:49:09 511

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

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

2020-06-23 19:47:25 276

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

文章目录1、ltp-ddt简介1.1、ltp1.2、ltp-ddt2、环境构造2.1、交叉编译2.2、文件系统3、测试运行1、ltp-ddt简介1.1、ltpLTP(Linux Test Project)是由SGI,OSDL和Bull发起的联合项目,由IBM,思科,富士通,SUSE,红帽,甲骨文等公司开发和维护。该项目的目标是向开源社区提供测试,以验证Linux的可靠性,健壮性和稳定性。LTP测试套件包含一系列用于测试Linux内核和相关功能的工具。目标是通过将测试自动化带入测试工作来改进Linux

2020-06-16 14:58:01 497

学习linux经典图书01: 深入理解Linux内核 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书01: 深入理解Linux内核 En

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书02: Linux设备驱动程序 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书02: Linux设备驱动程序 En

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书03: linux内核原码与情景分析 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书03: linux内核原码与情景分析 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书03: linux内核原码与情景分析 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书03: linux内核原码与情景分析 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书04: 构建嵌入式Linux系统 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

学习linux经典图书04: 构建嵌入式Linux系统 Ch

学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 学习linux经典图书系列 经典毋庸介绍

2010-07-04

at91rm9200 ucfs

at91rm9200硬盘的接口代码,并带有ucfs的实现

2008-05-26

博客文章标题怎么修改?

发表于 2017-10-12 最后回复 2017-10-13

空空如也

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

TA关注的人 TA的粉丝

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