自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux内存管理(十): 页面迁移

memory migration.

2022-04-07 23:34:58 2821

原创 Linux内存管理(九): 页面回收

page reclaim##1. 内存回收系统在运行一段时间后,内存逐渐的被分配过去, 空闲内存会越来越少,为了保证之后的程序有足够的内存可用, linux 内核会通过“page reclaim”机制 回收一部分内存。1.1 页面回收主要会做哪些动作将count = 01.1 哪些page可以被回收count = 0? page cache? swap? 进程?1.2 什么时候触发内存回收?1.3 页面回收算法1.4 水位内核实现2.1 数据结构lru, scan contrl

2022-02-20 20:12:44 2384 1

原创 Linux内存管理(八): slub分配器和kmalloc

slab分配器

2021-07-26 23:07:14 1989 1

原创 Linux内存管理(七): 伙伴系统buddy system

伙伴系统

2021-04-09 22:34:03 4843 7

原创 Linux内存管理(六): 分配物理内存alloc_pages

分配物理内存alloc_pages

2021-02-21 20:33:53 9265 7

原创 Linux内存管理(五):描述物理内存

存储节点(Node)、内存管理区(Zone)和页面(Page)

2021-01-06 22:05:29 2189

原创 Linux内存管理(四):paging_init分析

上文介绍了启动页表的创建,通过fix map建立DTB物理地址的映射,以及memblock管理物理内存。现在我们能够通过memblock进行物理内存的分配,但分配的内存还不能够进行访问,我们需要对memblock管理的内存进行映射,这就是paging_init的一部分工作paging_initvoid __init paging_init(void){ pgd_t *pgdp = pgd_set_fixmap(__pa_symbol(swapper_pg_dir)); -------- (1

2020-10-28 00:41:33 4626

原创 Linux内存管理(三):“看见”物理内存

上文介绍了xxx,本文基于xxx, 平台是x’x’x.启动页表的创建在arm64体系架构上,在进入start_kernel之前的汇编代码初始化阶段会进行两次的页表映射:Identity mapping 和 kernel image mapping.表格:identity mapping:(arm64 kernel image mapping的变化)用来打开mmukernel image mapping:用来跑内核代码,内核代码是在vmalloc区域一旦设定完了页表,那么打开MMU之后

2020-10-06 19:51:42 4471 1

原创 Linux内存管理(二):ARMv8 地址转换

arm64 地址转换

2020-08-30 23:05:13 5048

原创 PCIe学习笔记之pcie初始化枚举和资源分配流程代码分析

pcie初始化流程

2020-08-24 21:18:06 6662 1

原创 PCIe学习笔记之Max payload size

Max payload size和max read request size1. 概述1.1 max payload size1.2 max read request size1.3 两者的关系Max payload size对性能的影响改变max payload size的大小2. 内核实现

2020-07-01 22:18:22 25020 9

原创 PCIe学习笔记之MSI/MSI-x中断及代码分析

MSI/MSI-x中断

2020-06-27 18:14:51 33349 15

原创 PCIe学习笔记之pcie结构和配置空间

pcie硬件描述

2020-06-19 21:16:41 33501 19

原创 linux内核笔记之SMMU代码分析

主要分析linux kernel中SMMUv3的代码

2020-06-10 21:56:41 10174 20

原创 linux内存管理(一): arm64内核内存布局

1. 内核内存配置AArch64 Linux通常使用以下配置:4KB页面, 使用3级或4级转换表,支持39位(512GB)或48位(256TB)的虚拟地址。64KB页面,使用2级转换表,支持42位(4TB)虚拟地址。他们的内存布局是一致的。以内核defconfig默认的4KB page + 4 levels配置为例,LINUX在arm架构上把虚拟地址空间划分为2个空间, 虚拟地址和...

2020-03-03 23:19:57 12325

原创 Linux内核调试之kdump

kdump原理和crash 工具的使用

2020-02-04 23:07:33 8457 2

原创 Linux内核笔记之PCIe hotplug介绍及代码分析

前言本文基于Linux kernel 4.19.0, 体系结构为aarch64.PCIe hotplug

2020-02-01 23:29:07 14747 1

原创 ARM GICv3 ITS介绍及代码分析

前言:在ARM gicv3中断控制器,有提到过ITS的作用,本篇就ITS进行更详细的介绍以及分析linux 内核中ITS代码的实现。inux从4.9开始,gic驱动的代码为了实现acpi的功能,代码进行过一些调整,因为个人对acpi了解有限,所以本文基于linux 4.8.17,介绍DT方式初始化的ITS代码。ITS概述:在GICv3中定义了一种新的中断类型,LPI(locality-sp...

2020-01-29 20:30:35 10944 22

原创 Linux内核笔记之中断映射

GIC硬中断和软中断的映射过程

2020-01-18 19:26:18 3336

原创 ARM SMMU学习笔记

什么是SMMU

2020-01-05 00:24:30 14814 6

原创 Linux 内核笔记之高层中断处理

本文基于Linux kernel 4.19.0, 体系结构是aarch64中断处理入口在ARM GICv3 GIC代码分析一文中,有分析到在GIC 控制器初始化时会设置ARM中断控制器的中断处理函数 handle_arch_irq。static int __init gic_init_bases(void __iomem *dist_base, struct redist_re...

2019-08-18 22:01:33 4350 2

原创 ARM GICv3 GIC代码分析

ARM GICv3初始化流程分析

2019-03-17 17:23:31 6939

原创 ARM GICv3中断控制器

GIC,Generic Interrupt Controller。本文主要介绍GIC v3控制器, 基于linux kernel 4.19.0。

2019-02-17 21:55:45 12376 3

原创 Linux内核笔记之KASLR

KASLR, kernel address space layout randomization,内核地址空间布局随机化,是linux内核的一个非常重要的安全机制。KASLR技术可以让kernel image映射的地址相对于链接地址有个偏移,安全性上有一定的提升。

2019-01-20 18:48:38 13895 2

原创 Linux内核中的几种自旋锁的实现

queued spinlock

2019-01-06 22:08:52 6202

原创 linux内核驱动编程的一道陷阱题

在面试时遇到过一道linux 内核驱动编程的题目,我觉得这道题很有价值,能够很好的反应个人的编程水平。题目很简单,凭记忆整理了下,代码如下:#include <linux/init.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/kthread.h&am

2018-12-01 17:42:57 633

原创 centos使用qemu搭建ARM64运行环境

AAA

2018-11-29 22:31:29 5831 3

原创 ARM aarch64汇编学习笔记(九):使用Neon指令(一)

arm neon指令

2018-10-07 14:51:51 9126 1

原创 ARM aarch64汇编学习笔记(三):寄存器概述

ArmV8 寄存器简单概念:ARMv8拥有两种执行模式: AArch64执行A64指令,使用64bit的通用寄存器; AArch32执行A32/T32指令,使用32bit的通用寄存器; 注: A32: 32位定长ARM指令集,需要4字节边界对齐;通过不同架构变体增强部分,32位架构执行环境现称为AArch32; T32: 16位定长Thumb指令集,需要2字节边界对齐,在...

2018-07-31 22:49:29 9803 1

原创 ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用

工欲善其事,必先利其器。 使用Qemu 虽然可以进行模拟开发,但在Qemu调试汇编有一些困难。 DS-5 (即ARM Development Studio 5) ,是一款针对 ARM 支持的 Linux 和 Android 平台的全面的端到端软件开发工具套件。DS-5 安装从官网选择一个ARM DS-5版本进行下载 我选择的版本是5.26.2, 已经支持Arm v8了。 ...

2018-07-14 19:05:45 6206 10

原创 ARM aarch64汇编学习笔记(一):搭建编译环境

最近,对arm的汇编产生了兴趣,之前对汇编的知识掌握的不深,算是从零学习吧,用blog记录下学习的点滴,希望能够坚持下去。环境搭建市面上其实是有一些arm64位的服务器可以供选择的,比如cavin的thunder x2,华为的泰山服务器等。 不过没有arm的服务器并不代表学不了arm64汇编,我主要是在x86的虚拟机上使用QEMU和cross- toolchain学习aarch64汇...

2018-05-20 23:44:26 9586 1

原创 CPU体系结构之cache小结

1.What is cache?CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量...

2018-03-25 13:51:11 28167 6

原创 稀疏矩阵概念及简单实现

稀疏矩阵:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。特性: 1.稀疏矩阵其非零元素的个数远远小于零元素的个数,而且这些非零元素的分布也没有规律。 2.稀疏因子是用于描述稀疏矩阵的非零元素的比例情况。设一个n*m的稀疏矩阵A

2018-03-12 21:51:48 86756 16

原创 PCIe设备发现过程

PCIe在调试过程中,经常会出现扫描不到对端EP设备的问题,在问题定位过程中,了解内核中pcie枚举流程至关重要。PCIe枚举过程一般分为三步: 1.创建根节点 2.扫描根节点下设备 3.为根节点下设备分配资源那么如何发现设备? 从总线扫描pcie设备的函数pci_scan_child_bus开始分析unsigned int pci_scan_child_bus(struc

2017-05-01 23:40:00 13782 5

原创 linux内核时间管理(一) : 时间概念和延迟操作

linux内核时间管理(一) : 时间概念和延迟操作

2017-05-01 14:59:40 3593

原创 linux 内核笔记之watchdog

linux 看门狗

2017-04-26 23:24:50 32407 4

原创 linux 笔记--中断子系统之workqueue

linux workqueue,cmwq

2017-03-26 16:30:23 1793

原创 linux 内核笔记--中断子系统之softirq

linux把处理硬件中断的过程分为两部分。上半部简单快速,执行时禁止部分或全部中断。下半部稍后执行,并且执行期间可以响应所有的中断。这样的设计会使系统处于中断屏蔽的状态尽可能的短,从而提高系统的响应能力。 下半部的处理方式主要有soft_irq,tasklet,workqueue三种,他们在使用方式和适用情况上各有不同。soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,在中断上下文

2017-03-19 19:09:27 5564

原创 linux socket实现内核态和用户态通信

linux sockey实现内核态和用户态通信

2017-03-05 23:51:37 4553 2

IHI_0070_C_a_System_Memory_Management_Unit_Arm_Architecture_Specification.pdf

arm smmu spec. A System Memory Management Unit (SMMU) performs a task that is analogous to that of an MMU in a PE, translating addresses for DMA requests from system I/O devices before the requests are passed into the system interconnect. It is active for DMA only. Traffic in the other direction, from the system or PE to the device, is managed by other means – for example, the PE MMUs.

2020-04-09

HI0069E_gic_architecture_specification_v3.pdf

The GICv3 architecture is designed to operate with Armv8-A and Armv8-R compliant processing elements, PEs. The Generic Interrupt Controller (GIC) architecture defines: • The architectural requirements for handling all interrupt sources for any PE connected to a GIC. • A common interrupt controller programming interface applicable to uniprocessor or multiprocessor systems

2020-01-29

GICv3_Software_Overview_Official_Release_B.pdf

This document provides a software focused overview of the features of GICv3, and describes the operation of a GICv3 compliant interrupt controller. It is also a primer on how to configure a GICv3 interrupt controller for use in a bare metal environment. This document compliments the ARM® Generic Interrupt Controller Architecture Specification GIC architecture version 3.0 and 4.0. It is not a replacement or alternative. Refer to the ARM® Generic Interrupt Controller Architecture Specification GIC architecture version 3.0 and 4.0 for detailed descriptions of registers and behaviors.

2020-01-29

空空如也

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

TA关注的人

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