- SylixOS動態啓核接口
SylixOS 支持動態關啓核操做,經過以下應用函數;架構
VOID Lw_PowerM_CpuSet(ULONG ulNCpus, UINT uiPowerLevel);函數
函數Lw_PowerM_CpuSet原型分析:ui
參數 ulNCpus是運行態的CPU 核個數;blog
參數 uiPowerLevel是CPU能耗級別。接口
- 基本流程
系統函數調用流程如圖 2.1:原型
- 先使用Lw_PowerM_CpuSet( ),設置關核個數,判斷設置運行態的核數與啓動的核數是否相等,若是小於,則關閉對應個數的核,等核關閉後,能夠再使用該接口開啓剛關閉的核,實現動態關啓核。
- Lw_PowerM_CpuSet( )調用API_CpuUp()函數設置要啓動的cpu核。
- API_CpuUp(),判斷當前cpu 是否啓動,若是沒啓動,關中斷,調用bspCpuUp(),完成啓動後開中斷;
- Arm V7 T3 架構bspCpuUp(),由bsp最小系統實現該功能,調用API_KernelSmpCallAllOther()設置SMP其它核調用的指定函數,通常用於清數據段cache和等待其它核啓動信息,而後寄存器啓動該核,設置該核啓動地址;
- 啓動時進入 startup.s 文件中的reset復位,跳轉到secondaryCpuResetEntry()函數,進入啓動其它核流程,關D-Cache、I-Cache和MMU,再跳轉到halSecondaryCpuMain();
- halSecondaryCpuMain()調用API_KernelSecondaryStart()函數從核啓動入口,調用鉤子函數 halSecondaryCpuInit()初始化從核VFP、MMU、Cache、GIC。
- 該動態啓核過程有些bug須要修復,在關核前須要將該核上的任務遷移到其它核上運行,若是該核上的任務沒有遷移,再次啓核會致使系統奔潰。
圖 2.1 啓核操做大體流程it