移植OpenHarmony轻量系统【6】内核初始化和启动 原创 精华

连志安
发布于 2022-2-9 18:02
浏览
3收藏

摘要:本文简单介绍OpenHarmony轻量系统移植,内核初始化和启动
适合群体:想自己动手移植OpenHarmony轻量系统的朋友

上一节我们已经实现了链接脚本和启动文件,现在代码可以进入main函数,接下来我们要初始化内核、启动内核。

6.1 main函数

Main函数位于:device\board\lianzhian\gd32f303_lianzhian\sdk
移植OpenHarmony轻量系统【6】内核初始化和启动-鸿蒙开发者社区
可以看到,main函数的实现比较简单,先实现gpio和串口的初始化。
接下来是比较重要的,我们要调用内核之前,需要先调用LOS_KernelInit做内核初始化。
然后我们可以先创建自己的线程,这里我写了一个 TaskSample 函数,该函数用于创建2个线程:
//线程2,用于点灯和打印

VOID TaskSampleEntry2(VOID)
{
	printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
	led_init();
    while (1) {
        printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
		
		led_on(0);
		led_on(1);
		led_on(2);
		led_on(3);
        LOS_TaskDelay(1000);
		
		led_off(0);
		led_off(1);
		led_off(2);
		led_off(3);
		LOS_TaskDelay(1000);
    }
}

//线程1,用于打印
VOID TaskSampleEntry1(VOID)
{
	printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
    while (1) {
        printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
        LOS_TaskDelay(1000);
   
    }
}

//创建线程
VOID TaskSample(VOID)
{
    UINT32 uwRet;
    UINT32 taskID1;
    UINT32 taskID2;
    TSK_INIT_PARAM_S stTask = {0};

    stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;
    stTask.uwStackSize = 0x1000;
    stTask.pcName = "TaskSampleEntry1";
    stTask.usTaskPrio = 6; /* Os task priority is 6 */
    uwRet = LOS_TaskCreate(&taskID1, &stTask);
    if (uwRet != LOS_OK) {
        printf("Task1 create failed\r\n");
    }

    stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
    stTask.uwStackSize = 0x1000;
    stTask.pcName = "TaskSampleEntry2";
    stTask.usTaskPrio = 7; /* Os task priority is 7 */
    uwRet = LOS_TaskCreate(&taskID2, &stTask);
    if (uwRet != LOS_OK) {
        printf("Task2 create failed\r\n");
    }
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.

6.2 内核启动

内核启动函数是LOS_Start();一般来说,该函数是不会返回的,调用该函数后内核启动,会执行各种任务。
移植OpenHarmony轻量系统【6】内核初始化和启动-鸿蒙开发者社区

其实这里我的main函数是非常简单的,通常情况下,我们需要创建一个线程,该线程去执行 OHOS_Main(); 函数。不过这里我们先做简单的,后面再完善。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
1
收藏 3
回复
举报
1
3


回复
    相关推荐