
linux学习
文章平均质量分 96
梦幻方程式
Linux发烧友
展开
-
Linux内存管理 - 概述(一)
内存中的物理内存页的管理;分配大块内存的伙伴系统;分配较小块内存的slab、slub和slob分配器;分配分连续内存块的vmalloc机制进程的地址空间Linux内核一般将处理器的虚拟地址空间划分为两个部分。底部比较大的部分用于用户进程,顶部则专用于内核。虽然进程间的上下文切换期间回改变下半部分,但虚拟地址空间的内核部分总是保持不变。在IA-32系统上,地址空间在用户进程和内核之间划分的典型比例为3:1。给出4GB虚拟地址空间,3GB将用于用户空间,而1GB将用于内核。原创 2024-06-02 21:08:25 · 1062 阅读 · 0 评论 -
Linux内存管理 - 页表基本概念
用来将虚拟地址空间映射到物理地址空间的数据结构称为页表。实现两个地址空间的关联最容易的方法是使用数组,对虚拟地址空间中的每一页,都分配一个数组项。该数组项指向与之关联的页帧,但有一个问题。例如,IA-32体系结构使用4KB页,在虚拟地址空间为4GB的前提下,则需要包含100万项的数组。在64位体系结构上,情况会更糟糕。每个进程都需要自身的页表,因此系统的所有空间都用来保存页表,也就是说这个方法是不切实际的。原创 2024-06-01 18:59:07 · 842 阅读 · 0 评论 -
Linux内存管理 - 内存申请(一)
但位置不同,kmalloc()分配的内存处于3GB~high_memory之间,而vmalloc()分配的内存在VMALLOC_START~4GB之间,也就是非连续内存区。由于 vmalloc() 没有保证申请到的是连续的物理内存,因此对申请的内存大小没有限制,如果需要申请较大的内存空间就需要用此函数了。kmalloc分配的内存,它的物理地址与虚拟地址只有一个PAGE_OFFSET偏移,不需要为地址段修改页表,而vmalloc分配内存时需要修改主内核页表.然后逐页分配内存来从物理上填充hole。原创 2024-05-30 10:06:45 · 1001 阅读 · 0 评论 -
Linux DMA driver 分析
DMA技术在音视频传输、网络通讯、数据存储领域有着广泛应用。原创 2024-05-24 11:32:53 · 1383 阅读 · 1 评论 -
Linux设备驱动probe过程(三)
本周把最后一个坑填上,看下热插拔设备驱动是如何probe的。这部分的代表设备有PCI和USB。鉴于USB流传度和通用性更广,本文选用USB作为分析示例。原创 2024-04-28 10:27:23 · 1788 阅读 · 2 评论 -
Linux设备驱动probe过程(四)
Component框架是为了设备驱动能够按照一定顺序初始化而提出的架构。Linux中复杂的子系统一般由多个设备模块组成,而内核加载每个模块时间和顺序不定,通过component框架可以保证设备初始化加载前,所依赖的设备全部加载完毕。master和component。master是设备树中的 “超级设备(superdevice)”,负责管理该超级设备下的"普通"设备。component是由master管理的普通设备,需要先初始化。原创 2024-05-09 21:39:45 · 1399 阅读 · 0 评论 -
Linux设备驱动probe过程(二)
上周整理了非热插拔设备驱动的probe过程,留了个小尾巴,这周先补上,共2个遗留课题:1. 热插拔设备驱动probe过程2. 以ko方式加载的driver如何实现probe原创 2024-04-22 21:30:54 · 1977 阅读 · 0 评论 -
【0408-0414】学习笔记
当您知道设备不可热插拔并且已经注册,并且您想在驱动程序绑定到设备后从内存中删除其一次性运行的probe()基础结构时,请使用此选项而不是platform_driver_register()。这两个函数都会调到__platform_driver_register,platform_driver_probe会多一些内容,用于non-hotpluggable device。我们必须同步运行探测,因为我们会检查是否找到要绑定的设备,如果有,则会错误退出。原创 2024-04-08 18:51:02 · 1151 阅读 · 0 评论 -
Linux设备驱动probe过程(一)
非热插拔类型设备驱动probe过程,整理了设备驱动的一些流程,记录从kernel加载到driver probe的完整过程原创 2024-04-18 16:53:10 · 1568 阅读 · 0 评论