摘要:
相对于栈而言,堆这片内存面临着一个稍微复杂的行为模式:在任意时刻,程序可能发出请求,要么申请一段内存,要么释放一段已经申请过的内存,而且申请的大小从几个字节到几个GB都有可能,我们不能假设程序一次申请多少堆空间,因此,堆的管理显得较为复杂。 那么,使用 malloc() 在堆上分配内存到底是如何实现 阅读全文
摘要:
选中某个终端后,按 ctrl + shift + t 新建一个终端在同一个窗口。alt + 1 切换到第一个终端,alt + 2 切换到第二个终端 阅读全文
摘要:
参考资料 QEMU 官网:https://www.qemu.org/ documemtation:安装路径/qemu/share/doc/about/index.html http://wiki.100ask.org/Qemu 安装 ubuntu 安装 qemu-system-arm sudo ap 阅读全文
摘要:
paging_init主要完成初始化内核的分页机制,通过对boot阶段页表的覆盖,填充新的一级页表 建立二级页表项由 set_pte_ext 宏实现,实际上底层调用的是在内核启动之初获取的 list->processor->set_pte_ext,这是处理器相关的处理函数,对应的函数实现为 cpu_ 阅读全文
摘要:
memblock 作用 内核初始化阶段是用内存分配器 memblock 进行管理,因为内核后期使用的内存分配器初始化过程中有很多内存结构体,不可能在静态编译阶段就静态初始化所有的这些内存结构体,如伙伴分配器,那么伙伴分配器如何获取内存来初始化自己呢 ?为了达到这个目标,我们先实现一个满足要求的但是可 阅读全文
摘要:
问题: 利用vscode查看代码时,设置了禁用非活动区域着色后,可以让非活动区域的代码变灰。 但是在一些编译脚本中配置的宏不能被vscode识别,导致原本活动区域的代码变灰,想查看代码不是很方便。如下图: 解决: 在vscode中添加全局宏定义。 步骤: 1.ctrl+shift+p,选择对应的编辑 阅读全文
摘要:
编译内核代码,会定义宏 __KERNEL__ The kernel includes a set of headers that is exported to userspace. Many headers can be exported as-is but other headers requir 阅读全文
摘要:
在系统启动的汇编阶段,为kernel image、dtb 建立了临时页表,开启了MMU,进入了虚拟空间的世界,进入到start_kernel,内核要访问内存,要访问IO地址空间,那么就必须要为物理地址建立页表,以实现物理地址和虚拟地址之间的映射。 在内核初始化前期,内存管理系统还未初始化,现在除了临 阅读全文
摘要:
// 每个 PGD 页表项对应 512 个 PTE#define PTRS_PER_PTE 512// 由于只有二级页表,二级页表没有 PMD,所以为1,表示一个 PGD 页表项对应一个 PMD 页表项 #define PTRS_PER_PMD 1// 一共有 2048 个 PGD 页表项,也就是一 阅读全文
摘要:
在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门用于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行,内核总是驻留在内存中。该kernel的执行起点是st 阅读全文