原创 PCIe學習筆記之Max payload size

本文基於linux 5.7.0, 平臺是arm64 1. 概述 1.1 什麼是max payload size 我們都知道,PCIe設備是以TLP的形式發送報文的,而max payload size(簡稱mps)決定了pcie設備

原创 linux內核筆記之SMMU代碼分析

2020/06/10: first version, 主要介紹smmu驅動的初始化流程 在前一篇博文ARM SMMU學習筆記中, 介紹了SMMU的一些基本概念以及SMMU地址轉換的基本流程,本文主要分析linux kernel中

原创 ARM SMMU學習筆記

1. 什麼是SMMU? SMMU(system mmu),是I/O device與總線之間的地址轉換橋。 它在系統的位置如下圖: 它與mmu的功能類似,可以實現地址轉換,內存屬性轉換,權限檢查等功能。 2. 爲什麼需要SMMU

原创 PCIe學習筆記之MSI/MSI-x中斷及代碼分析

本文基於linux 5.7.0, 平臺是arm64 1. MSI/MSI-X概述 PCIe有三種中斷,分別爲INTx中斷,MSI中斷,MSI-X中斷,其中INTx是可選的,MSI/MSI-X是必須實現的。 1.1 什麼是MSI中斷

原创 PCIe學習筆記之pcie結構和配置空間

PCIe概述 PCI Express,是計算機總線PCI的一種,它沿用現有的PCI編程概念及通信標準,但建基於更快的串行通信系統。 PCIE總線使用的是高速差分總線,並採用端到端的連接方式, 現在的高速總線基本上都是串行總線,這樣

原创 Linux學習筆記之內核線程

某些情況下,內核需要在後臺執行某些操作,我們可以使用內核來實現,內核線程和普通的進程間的區別在於內核線程沒有獨立的地址空間,它只在內核空間運行,從來不切換到用戶空間去;並且和普通進程一樣,可以被調度,也可以被搶佔。 創建內核線程的

原创 linux socket實現內核態和用戶態通信

最近有一個的需求,需要將一些linux用戶態的命令做成自動化。 比如在用戶態執行lspci命令,判斷獲取的設備中是否有某個型號的pci卡,這就需要linux內核態和用戶態交互。實現的方法是通過linux內核態編程。在內核驅動中通

原创 linux內存管理 -- arm64內核內存佈局

1. 內核內存配置 AArch64 Linux通常使用以下配置: 4KB頁面, 使用3級或4級轉換表,支持39位(512GB)或48位(256TB)的虛擬地址。 64KB頁面,使用2級轉換表,支持42位(4TB)虛擬地址。

原创 Linux內核筆記之中斷映射

前言 本文基於linux 4.19, 體系結構是aarch64. 1. 硬中斷和虛擬中斷號 在Linux 內核筆記之高層中斷處理一文中,介紹了ARM gic中斷控制器對於硬中斷的處理過程。gic的中斷處理程序是從ack一個硬件中斷

原创 linux 筆記--中斷子系統之workqueue

workqueue是另一種將工作推後的形式,它允許重新調度及休眠。 workqueue的實現 本文基於linux 內核4.10,workqueue 實現爲CMWQ(Concurrency Managed Workqueue),引入

原创 ARM GICv3 GIC代碼分析

前言 在前一篇博文(ARM GICv3中斷控制器)中, 介紹了GIC的一些基本概念,本文主要分析了linux kernel中GIC v3中斷控制器的代碼(drivers/irqchip/irq-gic-v3.c) linux ke

原创 Linux內核調試之kdump

前言 本文主要介紹kdump服務和crash的使用,並結合一個簡單的實例演示如何分析內核奔潰的原因。 本文基於linux kernel 4.19, 體系結構爲aarch64。 kdump概述 1. kdump kdump 是一種先

原创 linux內核筆記--中斷子系統之tasklet

在 中斷子系統之softirq中有介紹過,linux將中斷處理分成了兩部分,tasklet是下半部比較常用的機制,一般具有以下特點: 1.tasklet既可以動態分配,也可以靜態聲明,且數量不限。 2.tasklet只可以在一

原创 Linux設備之字符驅動設備(一)

一、字符驅動設備 字符設備是能夠像字節流(類似文件)一樣被訪問的設備,有字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現open、close、read、write系統調用。 內核中使用cdev結構體來描述字符設備

原创 Linux內核筆記之PCIe hotplug介紹及代碼分析

前言 本文基於Linux kernel 4.19.0, 體系結構爲aarch64. PCIe hotplug概述 PCIe熱插拔,是指在系統上電運行時,允許插入或拔出PCIe設備。拔出時不需要平臺提前下電,插入時直接生效,不需要系