自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 中断软件流程源码分析(基于Linux4.14) 之一

中断控制器初始化我们现在的项目使用的中断控制器是gicv3的,对应的型号有gic500/600。下面主要介绍gicv3控制器的kernel初始化流程。 中断控制器在dts中的声明 gic: interrupt-controller@12000000 { compatible = "arm,gic-v3"; 驱动名字匹配字符串...

2020-05-04 18:25:29 398

原创 ARM Linux中的cache(3)

4)MMU中和cache相关的页表项属性ARMv7的页表项下面以常见的二级页表为例说明,页面大小是4096 Bytes1)第0级页表项上面的P、Domain属性管理其下的所有二级页表项2)第1级页表项上面的[11:0]中的属性值只管理该4KB页面。3)和cache相关的属性都在二级页表项中,如下:XX和YY的定义是一样的,见下表:...

2020-05-04 18:17:11 473

原创 ARM Linux中的cache (2)

关于cache的一些知识内存管理单元MMU除了使用页表完成物理地址和虚拟地址的映射外,还包括对这些地址的管理。这些管理是通过设置内存属性完成的,比如是否过cache、cache属性、是否可读、可写、可执行、内存类型(normal 、device-GRE)、是否共享,共享范围等等… 这些属性都在页表项中定义,属性的有效范围至少是一个页面。1)Cache的结构现在Cache一般组相连方式的...

2020-05-04 18:08:10 980

原创 ARM Linux中的cache (1)

Arm32 flush cache函数函数:flush_cache_all定义:#define flush_cache_all() __cpuc_flush_kern_all()从sharkl3的32 bit的System.map文件看,此函数最终对应的是下面的函数v7_flush_kern_cache_allENTRY(v7_fl...

2020-05-04 18:07:17 1045

原创 linux bootmem (5)

C代码阶段在arm64汇编阶段完成了kernel 代码段(应该是含有data和bss部分)的页表映射、内存属性的初始化和mmu的使能,内核栈和其它的cpu功能的初始化。下面正式介绍bootmem内存分配器。bootmem初始化start_kernel -->setup_arch --> early_fixmap_init...

2020-05-04 17:58:59 223

原创 Linux bootmem (4)

映射kernel地址空间swapper_pg_dir其实就是swapper进程(pid等于0的那个,其实就是idle进程)的地址空间,用它来代表kernel地址空间。和恒等映射的区别是,这段空间映射没有扩展页表的需求,当然它也是使用section mapping。和前面的恒等映射一样,swapper_pg_dir也是需要3个页面。映射kernel空间adrp x0, swapper_...

2020-05-04 17:57:26 288

原创 linux bootmem (3)

恒等映射IDMAP空间由于后面kernel会自己重新再建立页表,所以这里采用的映射比较粗糙,在level2里使用的是Block descriptor(称之为section mapping),每个block descriptor可以映射2MB物理地址,所以最多只要3级页表就ok了,即Level0~level2。这3级页表用3个4KB页面存放。恒等映射和kernel空间映射都是这种方式。恒等映...

2020-05-04 17:54:35 264

原创 Linux bootmem(2)

Arm64的汇编阶段__create_page_tables这个函数是系统入口调用的stext函数的一部分,属于最早期的和内存相关的函数,其作用是创建内核映射页表。由于在打开MMU时,有一个地址映射ON/OFF的切换过程,需要一段恒等映射(identity mapping,有资料翻译为一致性映射,即物理地址和虚拟地址相同)的空间可以保证在打开MMU那一点附近的程序代码可以平滑切换。...

2020-05-04 17:50:16 138

原创 Linux bootmem (1)

bootmem分配器简介本文基于Linux4.14中arm64的代码,着重介绍在系统启动过程中内存的bootmem。bootmem分配器是系统启动初期的内存分配方式,在耳熟能详的伙伴系统建立前内存都是利用bootmem分配器来分配的,伙伴系统框架建立起来后,bootmem会过度到伙伴系统。在启动过程期间, 尽管内存管理尚未初始化, 但是内核仍然需要分配内存以创建各种数据结构. 因此在系...

2020-05-04 17:41:48 128

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除