MM
文章平均质量分 87
Tommy_wxie
Tommy_wxie
展开
-
Linux内核内存分配函数
i. 分配函数的选择kmalloc():如果需要连续的物理页,可以使用此函数,这是内核中内存分配的常用方式,也是大多数情况下应该使用的内存分配方式。传递给函数的最常用的标志是GTP_ATOMIC和GTP_KERNEL。前面的标志表示进行不睡眠的高优先级分配。在中断处理程序和其他不能睡眠的代码段中需要。后面的标志可以睡眠,在没有持自旋锁的进程上下文中使用。此函数返回内核逻辑地址。get_转载 2013-03-13 13:51:48 · 1797 阅读 · 0 评论 -
Linux设备驱动之内存映射
1. 内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。 2. 映射的种类把同原创 2012-01-17 13:41:48 · 3835 阅读 · 0 评论 -
linux 用户空间与内核空间——高端内存详解
摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而内核空间有自己的规则;本文旨在探讨内核空间的地址映射。 Linux内核地址空间划分通常32位Linux内核虚原创 2013-12-04 18:04:27 · 52189 阅读 · 7 评论 -
linux-3.2.36内核启动3-setup_arch中的内存初始化2(arm平台 分析建立页表)
又是一个国庆七天假,之前有很多打算可是到最后,只有linux愿意陪我。介绍pageing_init之前,我们了解几个定义pte_t 页表项pmd_t 页中间目录项pud_t 页上级目录pgd_t 页全局目录项我的arm平台#define PMD_SHIFT 21#define PGDI转载 2013-12-03 11:40:24 · 2752 阅读 · 0 评论 -
linux-3.2.36内核启动2-setup_arch中的内存初始化1(arm平台 分析高端内存和初始化memblock)
上一篇微博留下了这几个函数,现在我们来分析它们 sanity_check_meminfo(); arm_memblock_init(&meminfo, mdesc); paging_init(mdesc); request_standard_resources(mdesc); 在上一微博有展现根转载 2013-12-03 11:39:27 · 4687 阅读 · 0 评论 -
linux-3.2.36内核启动1-启动参数(arm平台 启动参数的获取和处理,分析setup_arch)
最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动。看的过程中总结了一点东西,希望可以帮助大家调试内核。当我开始看的时候,第一件事是从网上搜集资料,不看不知道,一看吓一跳!牛人太多了,像这种内核启动的上古代码早就被人分析的彻彻底底。这注定我写的只能是烂微博了。为了此微博有存在的必要,我会显示内核启动打印的代码位置(用绿色表示)及出现错误打印的原因(用红色转载 2013-12-03 11:38:51 · 2776 阅读 · 0 评论 -
运行地址和加载地址
运行地址和加载地址 在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢? 加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般转载 2013-12-04 16:19:04 · 1847 阅读 · 0 评论 -
linux-3.2.36内核启动4-setup_arch中的内存初始化3(arm平台 bootmem_init源码分析)
void__init bootmem_init(void){ unsigned long min, max_low, max_high; max_low = max_high = 0; find_limits(&min, &max_low,&max_high);static void __init转载 2013-12-03 11:41:10 · 2130 阅读 · 0 评论 -
kmalloc linux内存管理
开辟内存在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmalloc ,vmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,vfree,或free_pages. kmalloc函数返回的是虚拟地址(线性地址). kmalloc特殊之处在于它分配的内存是物理上连续的,这对于要进行DMA的设备十分重要. 而用vmalloc分配的内存只是线转载 2013-02-21 13:32:46 · 1516 阅读 · 0 评论 -
关于内存泄露追踪函数mtrace
关于mtrace调查内存泄露的过程,mtrace是glibc的一个函数,他的机制实际上是把内存泄露信息打印到环境变量到MALLOC_TRACE设 置的文件里,然后使用mtrace命令来查看log信息,因为mtrace调用会增加系统开销,所以一般放在debug宏定义中:比如说下面的函数:#include#include#ifdef Debug#include#endifi原创 2012-03-28 17:32:47 · 2627 阅读 · 0 评论 -
linux内存管理之uboot第一步
在进入讲解linux内存管理的kernel阶段以前,了解一下uboot阶段是如何准备好内存物理设备的,这是非常有意义的。通常进入到linux内核阶段之后,对内存芯片的物理特性寄存器访问是比较少的,强调的是linux在管理上的用法,而大部分必要工作由uboot阶段进行处理,如打开内存功能,配置内存,初始化内存设备,获得内存基本信息等。 下面以笔记的形式讲述调试uboot内存的方法,分别以A转载 2013-03-14 13:59:26 · 4464 阅读 · 0 评论 -
cat /proc/meminfo
cat /proc/meminfo 读出的内核信息进行解释:MemTotal: 507480 kBMemFree: 10800 kBBuffers: 34728 kBCached: 98852 kBSwapCached: 128 kBActive: 304248 kBInac原创 2012-02-17 15:15:14 · 1872 阅读 · 0 评论 -
ION基本概念介绍和原理分析
转载前的话:ION将内核态形形色色的内存分配纳入统一的管理接口之中,更重要的设计意图是为内存在不同用户态进程之间传递和访问提供了支持。每个ion_buffer与一个struct file关联,其handle纳入进程file desc空间而不是/dev/ion设备内单独的handle空间,方便之处如下:每个buffer一个handle,便于更灵活地细粒度地控制每个buffer的使用周期;转载 2014-09-05 15:04:31 · 15641 阅读 · 1 评论