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

  • 博客(148)
  • 资源 (11)
  • 收藏
  • 关注

原创 Linux USB (目录)

1、USB 总线简介2、USB 协议分析3、USB Host 详解4、USB Device 详解

2021-10-27 17:35:08 1232

原创 Linux NameSpace (目录)

1. User Namespace 详解2. Pid Namespace 详解3. Mnt Namespace 详解4. UTS Namespace 详解5. IPC Namespace 详解6. Network Namespace 详解

2021-06-04 11:25:40 557

原创 Linux Mem (目录)

1、用户态相关:1.1、用户态进程空间的创建 — execve() 详解1.2、用户态进程空间的映射 — mmap()详解1.3、分页寻址(Paging/MMU)机制详解2、内核态相关:2.1、Page 页帧管理详解2.2、内核地址空间布局详解2.3、内核页表隔离 (KPTI) 详解2.4、Buddy 内存管理机制2.5、Buddy 内存回收机制2.6、Rmap 内存反向映射机制 2.7、内存错误检测 (KASAN) 详解 ...

2021-04-24 23:57:54 1412

原创 Linux Hook (目录)

Hook技术是性能优化和安全加固的基础。1、内核态1.1、LSM Hook1.2、Ftrace Hook (LivePatch)1.3、Inline Hook Syscall2、用户态2.1、PLT Hook & Inline Hook

2021-03-04 09:59:40 759 1

原创 Linux DAC 权限管理详解

文章目录1. 背景简介2. 主体(subject)2.1 用户2.2 进程2.2.1 凭证(credentials)2.2.2 uid/suid/euid/fsuid2.2.3 初始uid (fork())2.2.4 uid权限升级 (SUID execve())2.2.5 uid权限降级 (setreuid()/setuid()/setresuid()/setfsuid())3. 客体(object)4. 规则(policy)4.1 UGO(User、Ggroup、Other)规则4.2 ACL(Acce

2020-12-08 17:57:13 6430

原创 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 15011 2

原创 Android Binder 机制详解

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

2018-12-12 19:32:31 1919 2

原创 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 11464 1

原创 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 1687

原创 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 2836

原创 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 3518

原创 Device Tree 详解

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

2018-03-20 20:47:12 18725

原创 Linux Schedule (目录)

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

2017-12-16 03:13:00 4324 5

原创 Linux Interrupt

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

2017-10-11 16:24:06 2066

原创 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 2191

原创 Linux Workqueue

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

2017-10-11 15:30:50 1556

原创 Linux Signal

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

2017-10-11 14:48:49 1172 1

原创 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 3488

原创 Linux Phy 驱动解析

Linux Phy 驱动的架构解析,phy 芯片的状态怎么传递给 mac netdev 驱动的流程分析。

2022-12-16 10:52:21 2124 1

原创 Linux mem 2.8 Kfence 详解

1. 原理介绍Kfence (Kernel Electric Fence) 是 Linux 内核引入的一种低开销的内存错误检测机制,因为是低开销的所以它可以在运行的生产环境中开启,同样由于是低开销所以它的功能相比较 KASAN 会偏弱。Kfence 的基本原理非常简单,它创建了自己的专有检测内存池 kfence_pool。在 data page 的两边加上了 fence page 电子栅栏,利用 MMU 的特性把 fence page 设置成不可访问。如果对 data page 的访问越过了 page

2022-04-30 10:00:00 766

原创 主流 RTOS 评估

1. RT-ThreadRT-Thread 是国内出产的一款非常优秀的 RTOS。它和 FreeRTOS 、uCos 等经典 RTOS 最大的不同是:它不仅仅是一个实时内核,还具备丰富的中间层组件。它提供了一个完整的软件栈解决方案,而不需要用户搜集各种 核心组件 手工从头搭建。包括以下部分:内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板

2022-04-21 19:52:30 3772 2

原创 RISCV MMU 概述

1. 背景简介Linux 内存管理包含很多内容,主要知识点可以参考 Linux Mem。本文只描述其中的一个知识点 Paging and MMU。本文以全志 D1 为例,包含了平头哥出品的一颗 Riscv64 的 CPU IP-Core,代号 C906。具体手册可以参考 C906 用户手册。2. X86_64同样是 64bit cpu,x86_64 支持 48bit 和 57bit 两种线性地址模式,分别对应 4level 和 5level mmu 映射:线性地址mmu 层级Linu

2022-03-20 14:49:50 3470 1

原创 HW-RTOS 概述

文章目录1. 背景介绍1.1 OS 实时难题1.2 Linux 实时补丁1.3 Xenomai + Linux 双内核1.4 HW-RTOS1.5 More2. 优化点1:API2.1 原理介绍2.1.1 Software API Execution time2.1.2 Software Influence of Queue Handling2.1.3 HW-RTOS API Execution time2.1.4 HW-RTOS Influence of Queue Handling2.2 具体实现2.3

2022-01-07 15:46:28 1251

原创 Linux usb 7. Linux 配置 ADBD

文章目录1. 简介2. ADBD 源码3. Gadget Device 配置3.1 functionfs3.2 legacy 方式配置 functionfs3.3 configfs 方式配置 functionfs3.4 adb 使用配置参考资料1. 简介ADB 是 Android 环境下非常好用的调试工具。它是 client-server架构,由三部分组成:1、client (adb),运行于开发机器 (Host) ,你可以在shell中调用adb命令,其它的Android工具比如ADT插件和DDM

2021-12-11 14:38:42 3732 1

原创 Linux usb 6. HC/UDC 测试

文章目录1. 背景介绍2. Device (gadget zero)2.1 `gadget zero` 创建2.2 SourceSink Function2.3 Loopback Function3. Host (usbtest.ko)3.1 testcase3.2 ioctl4. App (testusb)参考资料1. 背景介绍在测试 USB 时,普通的做法是找一些 U 盘、鼠标、键盘 等外设来做一些测试,但是这些测试还是偏上层偏功能的。相比较 HC (USB Host Controller) 和 U

2021-11-11 15:46:16 2281

原创 Linux usb 5. usbip (USB Over IP) 使用实例

文章目录0. 简介1. Server 配置2. Client 配置参考资料0. 简介USB Over IP 是一种应用很多的场景,目前已经有现成的解决方案 usbip。linux 和 windows 环境下都有配套软件,本文不分析原理就验证一下 Linux 环境下 usbip 功能的使用。1. Server 配置运行环境为 ubuntu 20.04.2。操作命令如下:// (1) 关闭防火墙$ sudo ufw disable// (2) 加载 server 端驱动$ cd /lib/

2021-10-29 17:43:22 3332

原创 Linux usb 4. Device 详解

文章目录1. 简介2. Platform Layer2.1 Platform Device2.2 Platform Driver3. UDC/Gadget Layer3.1 Gadget Bus3.2 Gadget Device3.2.1 Endpoint Alloc3.2.2 EndPoint Access3.2.3 UDC Control3.3 Gadget Driver (Configfs)3.3.1 configfs 使用3.3.2 configfs 层次结构3.3.3 gadget driver3

2021-10-27 17:28:18 2171 2

原创 Linux usb 3. Host 详解

文章目录1. 简介2. Usb Core 驱动设备模型2.1 Usb Device Layer2.1.1 device (struct usb_device)2.1.2 driver (struct usb_device_driver)2.1.3 bus (usb_bus_type)2.2 Usb Interface Layer2.2.1 device (struct usb_interface)2.2.2 driver (struct usb_driver)2.2.3 bus (usb_bus_type)

2021-10-23 15:16:46 1145 1

原创 Linux usb 1. 总线简介

文章目录1. USB 发展历史1.1 USB 1.0/2.01.2 USB 3.01.3 速度识别1.4 phy 总线2. 总线拓扑2.1 Device 内部的逻辑关系2.2 Compund/Composite Device2.3 Hub2.4 Configure Descriptor3. 总线调度3.1 Frames/Microframes3.2 Bulk Transactions3.3 Control Transfers3.4 Interrupt Transactions3.5 Isochronous

2021-10-21 11:24:38 1293

原创 RISCV 入门 (学习笔记)

文章目录1. risv 相关背景1.1 arm 授权费1.2 riscv 发展历史1.3 riscv 风险2. 指令集2.1 可配置的通用寄存器组2.2 规整的指令编码2.3 简洁的存储器访问指令2.4 高效的分支跳转指令2.5 简洁的子程序调用2.6 无条件码执行2.7 无分支延迟槽2.8 无零开销硬件循环2.9 简洁的运算指令2.10 优雅的压缩指令子集2.11 特权模式2.12 CSR寄存器2.13 中断和异常2.14 矢量指令子集2.15 自定制指令扩展2.16 总结与比较3. 基于RISC-V的开

2021-10-15 11:46:03 7548

原创 Linux usb 2. 协议分析

文章目录1. USB 协议传输格式1.1 Packet1.1.1 Token Packet1.1.2 Data Packet1.1.3 Handshake Packet1.1.4 Special Packet1.2 Transaction1.2.1 IN/Read/Upstream Transaction1.2.2 OUT/Write/Downstream Transaction1.2.3 Control Transaction1.2.3.1 Setup Stage (`Transaction`)1.2.3

2021-08-16 16:18:09 878

原创 正则表达式 (学习笔记)

正则表达式的难度不在于难懂,而在于对它的表述没有恰当的分类和组织,所以弄得很零散难以记忆。按照自己的理解和归纳记录一份笔记,以备遗忘时查看。正则表达式(regular expressions)是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。1. 匹配的字符内容:Regular StringExplanation\d匹配一个数字 等价于[0-9]\D匹配一个

2021-07-30 11:33:58 205

翻译 Buildroot 用户手册 (中文)

文章目录I. Getting started1. About Buildroot2. System requirements2.1. Mandatory packages2.2. Optional packages3. Getting Buildroot4. Buildroot quick start4.1 configuration4.2 build5. Community resourcesII. User guide6. Buildroot configuration6.1. Cross-compil

2021-07-15 19:33:38 3062 1

原创 Linux Kdump 机制详解

文章目录1. 简介1.1 安装1.2 触发 kdump1.3 调试 kdump1.3.1 安装 debuginfo vmlinux1.3.2 编译 kernel1.4 kdump-tools.service 流程分析2. 原理分析2.1 elf core 文件格式3. `/proc/kcore`3.1 准备数据3.2 读取 elf core4. `/proc/vmcore`4.1 准备 elf header (运行在 normal kernel)4.1.1 crash_notes 数据的更新4.1.2 vm

2021-07-02 16:16:53 2464

原创 TLSF 内存分配算法详解

文章目录1. DSA 背景介绍1.1 mmheap1.2 mmblk2. TLFS 原理2.1 存储结构2.2 内存池初始化2.3 free2.4 malloc参考资料1. DSA 背景介绍动态内存管理算法 DSA,Dynamic storage allocation。RTOS 一般情况下动态内存使用malloc申请分配,但是存在两个缺陷:由于分配算法的复杂度,分配的时间不定;在不断申请、释放的过程中,容易因为内存对齐而产生碎片化内存;这两个缺陷在实时操作系统中是不允许的,所以操作系统必须提供

2021-06-26 19:59:32 3421 1

原创 Python Nose 自动化测试框架介绍

文章目录1. unittest 简介1.1 python 单元测试1.2 unittest 测试框架1.3 默认模式1.4 手工模式2. nose 扩展框架2.1 `nose` 的安装和基本用法2.2 `被测对象` 的扩展2.3 `TestFixture` 的扩展2.4 nose 插件参考资料1. unittest 简介1.1 python 单元测试1、python语言非常简洁和方便,一个最简单的程序 hello.py 编写如下:class hello(): def __init__(sel

2021-06-05 17:40:57 1120 1

原创 Linux ns 6. Network Namespace 详解

文章目录1. 简介1.1 Docker Network 桥接模式配置2. 代码解析2.1 copy_net_ns()2.2 pernet_list2.2.1 loopback_net_ops2.2.2 netdev_net_ops2.2.3 fou_net_ops2.3 sock_net_set()2.4 dev_net_set()2.5 write_pnet()参考文档:1. 简介1.1 Docker Network 桥接模式配置1、创建一个新的 bash 运行在新的 net namespace

2021-06-04 11:17:31 479

原创 Linux ns 5. IPC Namespace 详解

文章目录1. 简介2. 源码分析2.1 copy_ipcs()2.2 ipcget()2.3 ipc_check_perms()2.4 相关系统调用参考文档:1. 简介进程间通讯的机制称为 IPC(Inter-Process Communication)。Linux 下有多种 IPC 机制:管道(PIPE)、命名管道(FIFO)、信号(Signal)、消息队列(Message queues)、信号量(Semaphore)、共享内存(Share Memory)、内存映射(Memory Map)、套接字(S

2021-06-04 11:11:49 909

原创 Linux ns 4. UTS Namespace 详解

文章目录1. 使用简介1.1 hostname1.2 domainname1.3 uname2. 代码分析2.1 copy_utsname()2.2 sethostname()2.3 gethostname()2.4 setdomainname()2.5 uname()参考文档:1. 使用简介UTS(UNIX Time Sharing) namespace 是最简单的一种 namespace。UTS 中主要包含了主机名(hostname)、域名(domainname)和一些版本信息:struct ut

2021-05-15 17:43:31 763

原创 Linux mem 2.7 内存错误检测 (KASAN) 详解

文章目录1. 简介2. Shadow 区域初始化3. 权限的判断3.1 read/write3.2 memxxx()4. 权限的设置4.1 buddy4.1.1 kasan_free_pages()4.1.2 kasan_alloc_pages()4.2 slub4.2.1 kasan_cache_create()4.2.2 kasan_slab_free()4.2.3 kasan_slab_alloc()4.3 kmalloc4.4 global variable4.4.1 struct kasan_gl

2021-04-24 23:49:35 2383

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

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

2010-07-04

学习linux经典图书04: 构建嵌入式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经典图书03: linux内核原码与情景分析 Ch

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

2010-07-04

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

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

2010-07-04

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

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

2010-07-04

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

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

2010-07-04

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

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

2010-07-04

at91rm9200 ucfs

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

2008-05-26

空空如也

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

TA关注的人

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