// disable interrupts before pulling preserveddata off the stack disable_irq kernel_exit 1 //异常返回,把全部压入栈中的寄存器弹出。 相应于kernel_entry。 el1_sp_pc: /* *Stack or PC alignment exception handling */ mrs x0,far_el1
1、uImage生成过程 (1)vmlinux根目录下vmlinux为kernel未经过任何处理的原始可执行文件。根据arch/arm/kernel/vmlinux.lds连接文件生成: . = PAGE_OFFSET + TEXT_OFFSET; =0xC0000000 + 0x8000 内核运行时虚拟…
在ARM状态下,寄存器R7 ~ R0称之为Lo-registers;寄存器R15 ~ R8称之为Hi-registers。R13通常作为Stack Pointer(SP),R14用作Link Register(LR),R15作为Program Counter(PC)。 Thumb状态下的SP对应ARM状态下的R13,LR对应ARM状态下的R14,PC对应ARM状态下的R15。 ARM处理器的存储器组织结构 ARM的数据类型 ARM体系...
除了irq mode,linux kernel在处理abt mode(当发生data abort exception或者prefetch abort exception的时候进入的模式)和und mode(处理器遇到一个未定义的指令的时候进入的异常模式)的时候也是采用了相同的策略。也就是经过一个简短的abt或者und mode之后,stack切换到svc mode的栈上,这个栈就是发生异常那个时间点current...
本文将对 ARM Linux 的自解压过程进行一个简单介绍。arch/arm/* 下的大多数机器都会使用压缩的内核,其自解压过程是一样的。 Bootloader Bootloader,无论是RedBoot、U-Boot还是EFI,都将内核映像放置在物理内存中的某个位置,并通过寄存器传递一些参数来执行它。
ARM Linux启动分析---head-armv.S内幕 Linux启动后执行的第一个文件是arch/arm/kernel下的head-($PROCESSOR).S文件,processor代表的是该cpu的类型。ARM 6及其以后的处理器核心支持32位地址空间。这些处理器可以在26位和 32位PC的模式下操作。在26位PC模式下,R15寄存器的表现如同在以前的处理器上,代码只能运行在...
sp(Stack pointer) EL1t: t表示选择SP_EL0EL1h:h表示选择SP_ELx(x>0) PC(Program Counter)在armv7上PC是一个通用寄存器R15,在armv8上PC不在是一个寄存器,它不能直接被修改。必需使用一些隐式的指令来改变,如PC-relative load SPSR PSTATE (Processor state)在aarch64中,调用ERET从一个异常返回时,会将...
Linux Kernel创建用户栈,为栈分配内存空间,处理传递给用户的参数,将参数压入栈中,压入指向参数的argv,计算出argc并将其压栈。 libc的_start函数将 Linux Kernel创建的栈和libc库函数接上头,由体系结构相关的汇编语言编写,核心作用是将栈顶地址赋值给SP,还将Linux设置的栈传递、参数传递以及一些库函数的函数指针传递...
R13,栈指针(Stack Pointer) R13寄存器中存放的是栈顶指针,M3/M4 的栈是向下生长的,入栈的时候地址是往下减少的。 裸机程序不会用到PSP,只用到MSP,需要运行RTOS的时候才会用到PSP。 堆栈主要是通过POP,PUSH指令来进行操作。在执行 PUSH 和 POP 操作时,...
1) 相应的 R0~R12、相应的 R13(Stack Pointer,SP,栈指向)和 R14(the Link Register,LR,链路寄存器)。 2) 相应的 R15(PC)、相应的 CPSR。特权模式(除 System 模式外)还可以存取相应的 SPSR。只有HYP 模式可以存取 ELR_hyp。 7、通用寄存器根据其分组与否可分为以下两类: ...