diff --git a/kernel/common/los_config.c b/kernel/common/los_config.c index b894e7967b30c8c326d96e4e1d0f57846f0c2598..c59fe9175b91af38e53f9596051c9a74986bc40b 100644 --- a/kernel/common/los_config.c +++ b/kernel/common/los_config.c @@ -231,9 +231,7 @@ LITE_OS_SEC_TEXT_INIT INT32 OsMain(VOID) if (ret != LOS_OK) { return ret; } -#if (LOSCFG_KERNEL_SMP == 1) - release_secondary_cores(); -#endif + OsInitCall(LOS_INIT_LEVEL_VM_COMPLETE); ret = OsIpcInit(); @@ -267,6 +265,10 @@ LITE_OS_SEC_TEXT_INIT INT32 OsMain(VOID) OsInitCall(LOS_INIT_LEVEL_KMOD_EXTENDED); +#if (LOSCFG_KERNEL_SMP == 1) + release_secondary_cores(); +#endif + OsInitCall(LOS_INIT_LEVEL_KMOD_TASK); #ifdef LOS_INIT_STATISTICS diff --git a/kernel/common/los_init.c b/kernel/common/los_init.c index 6ba26aa9d93efdd2157048eeb85b247343cf56f3..0dc3626145a0c9a9ff9b99b6f41cf9b0e8e73939 100644 --- a/kernel/common/los_init.c +++ b/kernel/common/los_init.c @@ -72,7 +72,7 @@ STATIC VOID InitLevelCall(const CHAR *name, const UINT32 level, struct ModuleIni g_initCurrentLevel = level; g_initCurrentModule = initLevelList[level]; } else { - while (g_initCurrentLevel != level) { + while (g_initCurrentLevel < level) { } } @@ -106,7 +106,7 @@ STATIC VOID InitLevelCall(const CHAR *name, const UINT32 level, struct ModuleIni #endif } while (1); - if (level >= LOS_INIT_LEVEL_VM_COMPLETE) { + if (level >= LOS_INIT_LEVEL_KMOD_TASK) { LOS_AtomicInc(&g_initCount); while ((LOS_AtomicRead(&g_initCount) % LOSCFG_KERNEL_CORE_NUM) != 0) { }