SylixOS動態啓核架構流程

  1. SylixOS動態啓核接口

SylixOS 支持動態關啓核操做,經過以下應用函數;架構

VOID  Lw_PowerM_CpuSet(ULONG  ulNCpus, UINT  uiPowerLevel);函數

函數Lw_PowerM_CpuSet原型分析:ui

參數 ulNCpus是運行態的CPU 核個數;blog

參數 uiPowerLevel是CPU能耗級別。接口

  1. 基本流程

系統函數調用流程如圖 2.1:原型

  1. 先使用Lw_PowerM_CpuSet( ),設置關核個數,判斷設置運行態的核數與啓動的核數是否相等,若是小於,則關閉對應個數的核,等核關閉後,能夠再使用該接口開啓剛關閉的核,實現動態關啓核。
  2. Lw_PowerM_CpuSet( )調用API_CpuUp()函數設置要啓動的cpu核。
  3. API_CpuUp(),判斷當前cpu 是否啓動,若是沒啓動,關中斷,調用bspCpuUp(),完成啓動後開中斷;
  4. Arm V7 T3 架構bspCpuUp(),由bsp最小系統實現該功能,調用API_KernelSmpCallAllOther()設置SMP其它核調用的指定函數,通常用於清數據段cache和等待其它核啓動信息,而後寄存器啓動該核,設置該核啓動地址;
  5. 啓動時進入 startup.s 文件中的reset復位,跳轉到secondaryCpuResetEntry()函數,進入啓動其它核流程,關D-Cache、I-Cache和MMU,再跳轉到halSecondaryCpuMain();
  6. halSecondaryCpuMain()調用API_KernelSecondaryStart()函數從核啓動入口,調用鉤子函數 halSecondaryCpuInit()初始化從核VFP、MMU、Cache、GIC。
  7. 該動態啓核過程有些bug須要修復,在關核前須要將該核上的任務遷移到其它核上運行,若是該核上的任務沒有遷移,再次啓核會致使系統奔潰。

圖 2.1 啓核操做大體流程it

相關文章
相關標籤/搜索