原子操作的实现依赖处理器硬件提供支持,在不同的处理器体系结构上,原子操作会有不同的实现,例如在x86体系结构下,通常
通过mailbox核间通信,如风扇,温度。psci:调用smc。如开关机,cpu停止启动。
第一:sp的值 init_thread_union+#THREAD_SIZE大小地址。第二:sp_el0的值init_task的地址。可知sp_el0 指向task_struct。THEA
0.002869] ===__irq_domain_add domain ffff8020c0032000 name irqchip@(____ptrval____) === //irq-gic-v3-its-platform-msi.c 在uefi下
page地址在VMEMMAP_START 开始。最终的虚拟地址是通过pfn->pa->va。虚拟地址自然是内核之前映射的线性地址区间。vmemmap是内核中page 数据的虚拟地址。针对sparse内存模型。内核申请page获取的page地址从此开始。
内存是计算机系统中最重要的核心资源之一,Buddy 系统是 Linux 最底层的内存管理机制,它使用 Page 粒度来管理内存。通常情况
【代码】arm smmu v3 (5.10)
内核的大部分管理数据结构都是通过kmalloc分配内存的,那么slab本身结构的内存管理就出现了一个鸡与蛋的问题,slab数据结构所需内取kmem_cahce。
内存释放内存分配gfp_masknode 候选策略zone 候选策略zone fallback 策略lowmem reserve 机制order fallback 策略migrate type 候选策略migr
分配每个进程的pgd。//exec加载新二进制程序pgd_alloc函数: arch/arm64/mm/pgd.c{}上述PGD_SIZE在PA_BITS为48bit的机器上:PTRS_
上述使用ops->alloc来分配;
在上面的 demo 中虽然只是简单的两三行代码,但实际上用户进程和内核配合做了非常多的工作。回想上面我们在 创建
kobject_create:内部自动关联dynamic_kobj_type,有代码可以看出,sysfs_ops的show/store函数会将动态将attribute转换成kobj_at
读写/proc/cpuinfo 文件。
当用户登录时,使用的是虚拟终端。使用Ctcl+Alt+[F1—F6]组合键时,我们就可以切换到tty1、tty2、tty3等上面去。此时显示器的内容发
一致性DMA:在驱动初始化时mapping,在驱动shutdown时unmapping**(意味着不是一次性的,是持续性的使用该DMA映射)**。硬
在头文件include/uapi/asm-generic/unistd.h 中是所有内核支持的系统调用。通过_SYSCALL宏来定义。分析getdents64系统调用。定义f
文件的创建调用 lookup_open函数,其中又调用了目录inode的create函数ext4_create:普通文件的inode_operations是ext4_file_inode_operations,以最顶层的根目
设备StreamID:sid。
编写内核驱动模块需要include这个头文件。
第一个是通过一个bridge拓展的显卡,第二个直接从switch中。
SWIOTLB概述IOMMU的核心功能就是,实现在low buffer和high buffer之间的sync,也就是内存内容的复制操作。读者可能会想,内存的复制,在内核中,不就是调用memcpy()函数来实现的吗?没错,这就是本文要介绍的IOMMU的软件实现方式——SWIOTLB。之所以说是软件实现,是因为sync操作在底层正是调用memcpy()函数,这完全是软件实现的。SWIOTLB的作用在于
IRQCHIP_DECLARE(gic_400, "arm,gic-400", gic_of_init);声明 irqchip 与初始化函数的关联,兼容 GIC-V2 的 GIC 实现有很多,不过其初始化函数都是一个。在 linux kernel 编译的时候,你可以配置多个 irq chip 进入内核,编译系统会把所有的 IRQCHIP_DECLARE 宏定义的数据放入到一个特殊的 section
前面了解到一个dma_map_ops和设备关联。在透传设备的时候,map的操作实际上上guestOS进行的行为,
该工具是ubunut系统上提取出来的。
【代码】dma_mask和coherent_dma_mask 的默认值(PCI设备)
本内容通过modetest的打印,了解drm中各个object之间的关联,即如何正确的设置crtc,connector,enc
libdrm重要api分析。
kthread_run是一个宏,用来创建一个进程,并且将其唤醒,其定义在头文件include/linux/kthread.h中.#define kthread_run(threadfn, data, namefmt, ...) \ ({ \ struct task_struct *__k \ = kthread_create(threadfn,
根据上面的lspci和lsusb。应该是一个控制器带了两个root_hub。一个高速的一个低速的。lsusb -v 可以看到iSerial信息。其中有具体的pcie
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号