内核配置
确保内核配置选项中启用了debugfs支持(CONFIG_DEBUG_FS=y)并重新编译内核
挂载debugfs文件系统
mount -t debugfs none /sys/kernel/debug
kernel_page_tables
确保内核配置选项中启用了如 …
确保内核配置选项中启用了debugfs支持(CONFIG_DEBUG_FS=y)并重新编译内核
mount -t debugfs none /sys/kernel/debug
确保内核配置选项中启用了如 …
init_pg_dir页表的主要的作用就是在boot阶段,能够把kernel image的编译时VA(也就是0xffffxxxxxxxxxxxx,但是在使能了CONFIG_RANDOMIZE_BASE会加一个offset)映射成u-boot加载时的PA。 所以这个页表的大小就是根据kernel image所占用空间来决定。
#define EARLY_PAGES(vstart, vend, add) ( 1 /* PGDIR …
u-boot或者uefi启动Linux的时候,会把device tree 所在的地址通过x0寄存器传给Linux。 kernel在boot阶段会使用到x0寄存器,所以在primary_entry -> preserve_boot_args 会把device tree的地址保存到x21寄存器:
SYM_CODE_START_LOCAL(preserve_boot_args)
mov x21, x0 // x21=FDT
在init_idmap_pg_dir阶段,会把这个x21地址所对应的物理地址mapping到kernel结尾之后2M对的的地方,这个地方其实不是1:1的映射 …