======================================================================================================================================
首要,ARM开发板在刚上电或复位后都会首要进入SVC即管理形式,此刻、程序计数器R15-PC值会被赋为0x0000 0000;bootloader便是在此形式下,坐落0x0000 0000的NOR FLASH或SRAM中装载的,因而、开机或重启后bootloader会被首要履行。
接着,bootloader引导Linux内核,此刻、Linux内核相同运行在ARM的SVC即管理形式下;当内核发动结束、预备进入用户态init进程时,内核将ARM的当时程序状况CPSR寄存器M[4:0]设置为10000、从而用户态程序只能运行在ARM的用户形式。
由于ARM用户形式下对资源的拜访受限,因而、能够到达维护Linux操作体系内核的意图。
需求着重的是:Linux内核态是从ARM的SVC即管理形式下发动的,但在某些情况下、如:硬件中止、程序反常(被迫)等情况下进入ARM的其他特权形式,这时依然能够进入内核态(由于便是能够操作内核了);相同,Linux用户态是从ARM用户形式发动的,但当进入ARM体系形式时、依然能够操作Linux用户态程序(进入用户态,如init进程的发动进程)。
即:Linux内核从ARM的SVC形式下发动,但内核态不只仅指ARM的SVC形式(还包含能够拜访内核空间的一切ARM形式);Linux用户程序从ARM的用户形式发动,但用户态不只仅指ARM的用户形式。
===========================================================================================