ARM64多核CPU啟動流程

2021-07-09 15:25:24 字數 1039 閱讀 3793

arm64多核cpu啟動流程

arm64使用acpi parking protocol specification

bp核:

start_kernel//開始初始化核心需要的全域性變數,硬體資源等

-> setup_arch

-> setup_processor

-> cpu_init //設定irq堆疊

-> rest_init //在最後啟動其他核

-> kernel_thread(kernel_init, null, clone_fs);

kernel_init

-> kernel_init_freeable();

-> smp_init

-> cpu_up()

-> _cpu_up()

-> __cpu_up()

-> boot_secondary

-> cpu_ops[cpu]->cpu_boot(cpu);

-> try_to_run_init_process("/sbin/init")

-> run_init_process

-> do_execve

-> try_to_run_init_process("/etc/init")

-> try_to_run_init_process("/bin/init")

const struct cpu_operations smp_parking_protocol_ops = ;

cpu_ops[cpu]->cpu_boot(cpu); 呼叫了 smp_parking_protocol_cpu_boot,

smp_parking_protocol_cpu_boot

-> writeq(__pa(secondary_entry), &mailbox->entry_point);

secondary_entry

-> secondary_startup

-> __secondary_switched

-> secondary_start_kernel //正式啟動下乙個cpu,ap核

arm64入棧出棧 棧 ARM64

棧 棧 是一種具有特殊的訪問方式的儲存空間 後進先出,last in out firt,lifo sp和fp暫存器 sp暫存器在任意時刻會儲存我們棧頂的位址.fp暫存器也稱為x29暫存器屬於通用暫存器,但是在某些時刻我們利用它儲存棧底的位址 注意 arm64開始,取消32位的 ldm,stm,pus...

ARM64除錯環境

自從上一次zctf做了一道arm64的逆向題目後,我決定記錄下利用qemu搭建arm64的環境的過程,以後肯定會遇到更多arm平台下的reverse和pwn。我要模擬的是64位的arm環境,所以需要使用的是qemu system aarch64。在kali下,使用apt get install qe...

arm64 頁表對映

armv8最多支援48根位址,4級頁表,這樣最多支援user space和kernnel space 分別是256tb 其中user space佔據低端位址 kernel可以支援48 42 39 根位址 config arm64 va bits 39 is not set config arm64 ...