RISC-V Linux启动时的页表创建相对来说还是比较容易理解的,都是C语言创建的,代码也比较少。主要就是setup_vm()和setup_vm_final()两个页表创建函数。理解了sv39的一些地址格式后,再去分析源码就比较容易。不过不同kernel版本代码都不一样,需要具体情况具体分析。 本篇提到了setup_vm()会检查kernel入口地址是否2M...
RISC-V Linux启动时的页表创建相对来说还是比较容易理解的,都是C语言创建的,代码也比较少。主要就是setup_vm()和setup_vm_final()两个页表创建函数。理解了sv39的一些地址格式后,再去分析源码就比较容易。不过不同kernel版本代码都不一样,需要具体情况具体分析。 本篇提到了setup_vm()会检查kernel入口地址是否2M...
使用qemu调试 这种问题比较适合使用qemu调试,但是需要注意的是此时还没有enable page table,而gdb读出的符号是最终的虚拟地址,比如在setup_vm设置断点是断不下来的: (gdb) target remote :1234 (gdb) b setup_vm Breakpoint 2 at 0xffffffff80a05aba (gdb) c 我们需要先从qemu的代码里面拿到kernel load的地址:...
RISC-VLinux启动,经历了两次页表创建过程,第一次使用C函数setup_vm()创建临时页表,第二次使用C函数setup_vm_final()创建最终页表。 具体细节参考代码中的注释,下面的代码省略了一些不重要的部分。 setup_vm() asmlinkagevoid__initsetup_vm(uintptr_tdtb_pa){uintptr_tva, pa, end_va;uintptr_tload_pa = ...
setup_trap_vector la a0, handle_exception csrw CSR_TVEC, a0--设置Trap Vector为handle_exception函数。 2.2 异常处理入口函数 Linux下异常处理入口函数为: SYM_CODE_START(handle_exception)/** If coming from userspace, preserve the user thread pointer and load ...
boot_jump_linux kernel--使用images->ep地址,以gd->arch.boot_hart和images->ft_addr作为第1-2参数。 RISC-V kernel启动时保存a0/a1寄存器到s0/s1: _start _start_kernel mv s0, a0 mv s1, a1 setup_vm--以DTB物理地址为参数,配置页表映射。
临时页表分析 MMU开启前,需要建立好kernel、dtb、trampoline等页表。以便MMU开启后,并且在内存管理模块运行之前,kernel可以正常初始化,dtb可以正常地被解析。这部分页表都是临时页表,最终的页表在setup_vm_final()建立。 临时页表创建顺序: 首先为fixmap创建早期的PGD
https://mp.weixin.qq.com/s/9lHolIPqRQow33ToIhGLOA 简单介绍arch/riscv/kernel/head.S中的启动流程。 1. vmlinux.lds.S vmlinux.lds.S是用于链接vmlinux的链接脚本文件: 其中: a. 输出的架构是 ... RISCV Linux Kernel IC linux 转载 mob604756efcf97 ...
make ARCH=riscv vmlinux -j $(nproc) 1. 2. 3. 4. 5. 6. 7. Build BBL (Berkeley Boot Loader): AI检测代码解析 cd.. git clone https://github.com/riscv/riscv-pk.git cd riscv-pk mkdir build cd build ../configure --enable-logo --host=riscv64-unknown-elf --with-payload=../...
zygote进程是所有java服务的父进程,它是由init进程从配置⽂件中获取app_process程序的启动⽅式(包括参数)并启动的;会进⼊⽂件 frameworks/base/core/jni/AndroidRuntime.cpp,然后进⼊此⽂件中的函数:startVm正式启动ART虚拟机,然后调用通过native方法"com.android.internal.os.ZygoteInit",启动Zygote进程,进...