06 2023 档案

摘要:memblock 作用 内核初始化阶段是用内存分配器 memblock 进行管理,因为内核后期使用的内存分配器初始化过程中有很多内存结构体,不可能在静态编译阶段就静态初始化所有的这些内存结构体,如伙伴分配器,那么伙伴分配器如何获取内存来初始化自己呢 ?为了达到这个目标,我们先实现一个满足要求的但是可 阅读全文
posted @ 2023-06-24 22:25 流水灯 阅读(417) 评论(0) 推荐(0) 编辑
摘要:问题: 利用vscode查看代码时,设置了禁用非活动区域着色后,可以让非活动区域的代码变灰。 但是在一些编译脚本中配置的宏不能被vscode识别,导致原本活动区域的代码变灰,想查看代码不是很方便。如下图: 解决: 在vscode中添加全局宏定义。 步骤: 1.ctrl+shift+p,选择对应的编辑 阅读全文
posted @ 2023-06-23 21:45 流水灯 阅读(1194) 评论(0) 推荐(0) 编辑
摘要:编译内核代码,会定义宏 __KERNEL__ The kernel includes a set of headers that is exported to userspace. Many headers can be exported as-is but other headers requir 阅读全文
posted @ 2023-06-23 21:37 流水灯 阅读(68) 评论(0) 推荐(0) 编辑
摘要:在系统启动的汇编阶段,为kernel image、dtb 建立了临时页表,开启了MMU,进入了虚拟空间的世界,进入到start_kernel,内核要访问内存,要访问IO地址空间,那么就必须要为物理地址建立页表,以实现物理地址和虚拟地址之间的映射。 在内核初始化前期,内存管理系统还未初始化,现在除了临 阅读全文
posted @ 2023-06-22 23:09 流水灯 阅读(237) 评论(0) 推荐(0) 编辑
摘要:// 每个 PGD 页表项对应 512 个 PTE#define PTRS_PER_PTE 512// 由于只有二级页表,二级页表没有 PMD,所以为1,表示一个 PGD 页表项对应一个 PMD 页表项 #define PTRS_PER_PMD 1// 一共有 2048 个 PGD 页表项,也就是一 阅读全文
posted @ 2023-06-22 14:33 流水灯 阅读(75) 评论(0) 推荐(0) 编辑
摘要:在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门用于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行,内核总是驻留在内存中。该kernel的执行起点是st 阅读全文
posted @ 2023-06-10 21:50 流水灯 阅读(512) 评论(0) 推荐(0) 编辑
摘要:kernel 自解压 顶层的vmlinux: elf格式,反汇编得到的是未压缩的内核的反汇编文件,这个vmlinux才是真正的Linux内核。 arch/arm/boot/compressed/vmlinux: elf格式,包含解压缩程序、Image二进制代码的压缩版;反汇编,从指令执行地址可知,只 阅读全文
posted @ 2023-06-04 19:42 流水灯 阅读(196) 评论(0) 推荐(0) 编辑
摘要:低于128K的内存分配采用具有内存池缓存机制的 brk 方式,可以减少缺页中断、系统调用的次数。高于128K时采用匿名内存映射区的mmap方式, 避免产生太大的内存碎片 如果分配后的虚拟内存没有被访问的话,虚拟内存是不会映射到物理内存的,这样就不会占用物理内存了。只有在访问已分配的虚拟地址空间的时候 阅读全文
posted @ 2023-06-03 12:21 流水灯 阅读(1436) 评论(0) 推荐(0) 编辑
摘要:早期Linux内核是基于x86体系结构设计的,x86页表中有3个标志位是ARM32硬件页表项没有的。PTE_DIRTY:cpu在写操作时会设置该标志位,表示对应页面被写过,为脏页。PTE_YOUNG:CPU访问该页时会设置该标志位。在页面换出时,如果该标志位位置了,说明该页刚被访问过,页面是youn 阅读全文
posted @ 2023-06-03 11:59 流水灯 阅读(203) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示