内存管理
文章平均质量分 53
leo*liu
这个作者很懒,什么都没留下…
展开
-
linux进程内存布局
http://blog.csdn.net/farmwang/article/details/50094973转载 2018-02-18 21:36:44 · 189 阅读 · 0 评论 -
关于静态映射与动态映射io地址时虚拟地址的问题
关于静态映射与动态映射io地址时虚拟地址的问题:一直有个问题,当我们人为的去静态的分配好IO地址所对应的虚拟地址时,此时我们已经占用了一片虚拟地址空间,但是此时使用io_remap去动态映射时,会不会申请到的虚拟地址空间 会和我们已经占用的静态映射空间重叠,如果重叠,我们此时再去操作这个虚拟地址时就会出现很多问题。 针对这个问题, 对于arm平台: 首先需要去填充一个结构体,也就是静态...原创 2018-02-18 21:47:54 · 957 阅读 · 0 评论 -
IO_ADDRESS()的实现
上面我们说了如何去在系统中自己实现一个设置系统寄存器的一个方法,上面归根到底要进行物理地址到虚拟地址的映射 现在我们就说说IO_ADDRESS()的实现#define __REG32ALI(addr) (*((volatile unsigned long *)((addr) - ALI_REGS_PHYS_BASE + ALI_REGS_VIRT_BASE))#define read...原创 2018-02-18 21:47:18 · 4462 阅读 · 0 评论 -
有mmu和没有mmu的区别
#ifdef CONFIG_MMU#define IO_ADDRESS(x) (((x) & 0x000fffff) | (((x) >> 4) & 0x0ff00000) | IO_BASE)#else#define IO_ADDRESS(x) (x)#endif从上面的代码已经很清楚了,不带mmu的系统共就直接操作裸的寄存器 带mmu的系统就必...原创 2018-02-18 21:46:46 · 2029 阅读 · 2 评论 -
静态映射和动态映射
在linux中去操作系统寄存器时必须经过映射,即 1,静态映射IO__ADDRESS();//这只是一个工具,使用前必须先初始化静态映射表 2,动态映射ioremap(); 无论静态映射还是动态映射目的都是将外设地址映射到虚拟地址的空间(3G-4G)中分配给用作外设映射的虚拟地址空间(开启mmu后cpu看到的都是虚拟地址,访问外设时同样需要映射到虚拟地址空间) 一般写寄存器读寄存器时:...原创 2018-02-18 21:46:17 · 4711 阅读 · 0 评论 -
关于内存映射的一些疑问
http://www.cnblogs.com/hanyan225/archive/2010/10/25/1860730.html http://wenku.baidu.com/link?url=lpFmJHGfdAQlaEO6zsW6W_11hK7FuCGcuSn9rnJJHwaZIDK7oNi14KK4pQ1KMnfQRHNjPG3eJ85wwJ10-OMZ37fUG7C1B-kofVYewd...转载 2018-02-18 21:45:46 · 475 阅读 · 0 评论 -
内存与IO访问
IO空间是相对于内存空间而言的, x86一般使用IO空间 arm等嵌入式cpu一般不提供IO空间,只存在内存空间详看宋宝华第三版第11章:内存与IO访问 1.内存空间可以直接通过地址,指针来访问,程序即在程序运行中使用的变量和其他数据都有存在于内存空间中,所以变量有一个地址,这个地址一定是MMU映射过的一个va, 我们在程序中操作的寄存器的地址也是一个va(虚拟地址),只是这两个地址的...原创 2018-02-18 21:44:55 · 1699 阅读 · 0 评论 -
物理地址空间和虚拟地址空间
http://blog.csdn.net/jiasike/article/details/38852485 一、物理地址(空间) 因为CPU是32位的,其地址总线是32位的,所以其地址总线可编码的个数是2^32(4G),这2^32个物理地址的集合就是物理地址空间。这与38译码器的道理是一样的,这一点很好理解。二、虚拟地址(空间) 大...原创 2018-02-18 21:43:18 · 5662 阅读 · 0 评论 -
整个的一个外设映射关系以及phys_to_virt与io_remap
整个的一个外设映射关系以及phys_to_virt与io_remap的区别首先一定要有DDR和IO外设是同级设备的观念,其实他们只是地址总线上的不同区段的地址而已 首先我们会传入ddr的实际大小(通过内核参数mem=xx),此时会将整个DDR映射到内核的线性映射区中,在set_up的时候我们将这个线性映射区一分为2, 一部分用于内核自己用,用于支持正常内核运行所需要的内存空间,以及各种ma...原创 2018-02-18 21:48:27 · 575 阅读 · 0 评论