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

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

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

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

原创 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 279 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 1851

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

原创 Android Binder 机制详解

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

2018-12-12 19:32:31 1446 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 8856

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

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

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

原创 Device Tree 详解

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

2018-03-20 20:47:12 15834

原创 Linux Schedule (目录)

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

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

原创 Linux Interrupt

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

2017-10-11 16:24:06 1608

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

原创 Linux Workqueue

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

2017-10-11 15:30:50 1246

原创 Linux Signal

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

2017-10-11 14:48:49 840

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

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

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

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

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

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

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

2021-07-30 11:33:58 68

翻译 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 365

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

原创 TLFS 内存分配算法详解

文章目录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 259 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 94 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 74

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

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

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

原创 Linux mem 2.5 Buddy 内存回收机制

文章目录1. 简介2. LRU 组织2.1 LRU 链表2.2 LRU Cache2.3 LRU 移动操作2.3.1 page 加入 LRU2.3.2 其他 LRU 移动操作3. LRU 回收3.1 LRU 更新3.2 Swappiness3.3 反向映射3.4 代码实现3.4.1 struct scan_control3.4.2 shrink_node()3.4.3 shrink_list()3.4.4 shrink_active_list()3.4.5 shrink_inactive_list()3.4

2021-04-22 19:44:33 131

原创 Linux mem 2.6 Rmap 内存反向映射机制

文章目录1. 简介2. 匿名内存2.1 fork()2.2 do_page_fault()3. 文件内存3.1 fork()3.2 do_page_fault()参考文档:1. 简介通常情况下用户态的虚拟地址和物理内存之间建立的是正向映射的关系:vma存储了虚拟地址 → 发生了page_fault以后分配物理内存page并且建立mmu映射。但是在进行内存回收时,需要反向查找,根据目的物理内存 page,查找到所有映射到该内存的 vma 并进行映射关系的解除,才能回收对应的物理内存 page。本节相当

2021-04-21 18:23:43 102

原创 Linux ns 3. Mnt Namespace 详解

1. 文件系统层次化对 Linux 系统来说一切皆文件,Linux 使用树形的层次化结构来管理所有的文件对象。完整的Linux文件系统,是由多种设备、多种文件系统组成的一个混合的树形结构。我们首先从一个单独的块设备来分析其树形结构的构造。1.1 块设备的层次化(superblock/inode/dentry)对一个块设备来说要想构造文件系统树形结构,最重要的两个全局因素是:块设备(block_device)和文件系统(file_system_type)。内核使用了一个数据结构 struct sup

2021-04-03 18:05:17 178

原创 Linux mem 2.4 Buddy 内存管理机制

文章目录1. Buddy 简介2. Buddy 初始化2.1 Struct Page 初始化2.2 Buddy 初始化3. 内存释放4. 内存分配4.1 gfp_mask4.2 node 候选策略4.3 zone 候选策略4.4 zone fallback 策略4.5 lowmem reserve 机制4.6 order fallback 策略4.7 migrate type 候选策略4.8 migrate fallback 策略4.9 reclaim watermark4.10 reclaim 方式4.1

2021-04-03 17:59:52 171

原创 Linux ns 1. User Namespace 详解

文章目录1. 简介2. user namespace的创建2.1 原理介绍2.2 操作实例2.3 代码分析3. `uid/gid`隔离3.1 原理介绍3.2 操作实例3.3 代码分析3.2.1 map_write()3.2.2 getuid()3.2.3 stat64()3.2.4 acl_permission_check()4. `capability`隔离4.1 原理介绍4.2 操作实例4.3 代码分析4.3.1 ns_capable()4.3.2 cap_bprm_set_creds()参考文档:1

2021-03-24 20:30:45 257

原创 EtherCAT DC (学习笔记)

文章目录1. EtherCAT 同步模式1.1 Free Run 模式1.2 SM-Synchronous 模式1.3 DC-Synchronous 模式1.3.1 Time Shift1.4 DC-Synchronous 模式细调1.4.1 0x1C32/33 对象字1.4.2 最小循环时间 (0x1C32/33:05)1.4.3 输入/输出偏移时间 (Output/Input Shift Time ) (0x1C32/33:03)1.4.4 Synchronoµs with SYNC event模式(带

2021-03-03 19:13:42 2109 2

原创 Linux mem 2.3 内核页表隔离 (KPTI) 详解

文章目录1. 背景介绍1.1 Meltdown & Spectre 漏洞1.2 KPTI补丁2. KPTI原理2.1 页表隔离2.2 TLB刷新策略3. 代码实现3.1 pgd切换3.2 系统调用3.3 进程切换3.4 pgd的初始化4. 相关知识4.1 ALTERNATIVE()4.2 .pushsection4.3 宏计数器`\@`4.4 pt_regs参考文档:1. 背景介绍KPTI(Kernel page-table isolation)内核页表隔离,把进程页表按照成用户态、内核态独立的

2021-01-15 20:12:11 880

原创 Linux mem 2.2 内核地址空间布局详解

文章目录1. 简介2. 内核页表初始化2.0 decompress阶段2.1 `head_64.S`和`head64.c`2.2 start_kernel()2.2.1 物理内存(e820)2.2.2 初始内存分配机制(memblock/bootmem)2.2.3 线性映射区的创建(direct mapping)2.2.4 page存储区的创建(vmemmap)2.2.5 正式内存分配机制的初始化(buddy)2.2.6 非连续内存区(vmalloc)2.2.7 KASLR2.2.8 进程创建(fork()

2020-12-31 20:40:11 647 1

原创 CFI/CFG 安全防护原理详解

文章目录1. 简介1.1 控制流攻击历史1.2 CFI的基本概念1.3 CFI发展历史2. Orig CFI2.1 Windows CFG的实现3. CCFIR4. VTV5. Kernel CFI5.1 forward-edge protection CFI(Control-Flow Integrity)5.2 backward-edge protection SCS(Shadow Call Stack)5.3 Shared library support(Cross-DSO)6. 利用硬件来提升CF

2020-12-18 20:24:05 3268 1

原创 Gcc 安全编译选项

文章目录1. 简介2. NX(DEP)3. RELRO4. PIE(ASLR)5. CANARY(栈保护)6. FORTIFY7. RPATH/RUNPATH参考资料:1. 简介在编译器层面,gcc提供了不少安全方面的编译选项,主要有:itemoptdescriptNX(DEP)-z execstack // 禁用NX保护 -z noexecstack // 开启NX保护堆栈禁止执行RELRO-z norelro // 关闭 -z lazy // 部分开启 -z n

2020-12-11 14:44:24 3056

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

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

2010-07-04

at91rm9200 ucfs

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

2008-05-26

学习linux经典图书01: 深入理解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经典图书01: 深入理解Linux内核 En

学习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经典图书04: 构建嵌入式Linux系统 Ch

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

2010-07-04

博客文章标题怎么修改?

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

空空如也

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

TA关注的人 TA的粉丝

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