启动流程
XWOS的启动流程
Categories:
少于1分钟
XWOS的启动流程
flowchart LR 预初始化阶段 --> 初始化阶段 --> 后初始化阶段 --> 主函数阶段 subgraph 预初始化阶段 direction TB exc["异常初始化"] exc["浮点单元初始化"] exc["内存初始化"] end subgraph 初始化阶段 xwos_init["xwos_init()"] end subgraph 后初始化阶段 direction LR device["设备驱动初始化"] mm["动态内存分配器的初始化"] end subgraph 主函数阶段 direction LR skd_init["初始化调度器: xwos_skd_init_lc()"] thd["建立线程"] skd_start["启动调度器: xwos_skd_start_lc()"] end
XWOS将初始化流程分为四个阶段:
- 预初始化阶段(用户定义):
xwos_preinit()
- 初始化阶段(XWOS定义):
xwos_init()
- 后初始化阶段(用户定义):
xwos_postinit()
- 主函数阶段(用户定义):
xwos_main()
预初始化阶段
预初始化阶段,用户需要提供函数的定义: void xwos_preinit(void)
:
- 需要完成CPU架构低级初始化,例如:中断的初始化,浮点运算单元的初始化等;
- 需要完成对内存的初始化,以及数据区的重定向工作。
初始化阶段
初始化阶段的函数 void xwos_init(void)
由XWOS定义,对XWOS内核进行初始化。用户不可重新定义此函数。
xwos_init()
会访问全局变量,因此必须保证在 预初始化阶段 完成对内存的初始化以及数据区的重定向工作。
在多核系统中, xwos_init()
在每个CPU的初始化流程中都会被调用一次。
后初始化阶段
后初始化阶段,用户需要提供函数的定义: void xwos_postinit(void)
:
- 用户可选择在此阶段完成驱动的初始化;
- 用户可选择在此阶段完成动态内存分配器的初始化;
主函数阶段
- 用户可选择在此阶段完成驱动的初始化;
- 用户可选择在此阶段完成动态内存分配器的初始化;
- 用户需要在此阶段建立线程;
- 用户需要在此阶段调用
xwos_skd_start_lc()
启动调度器。
用户自定义的启动流程
如果用户使用自定义的启动流程,需要在调用XWOS任何API之前调用 xwos_init()
。
此函数会访问全局变量,需要在数据区重定向工作完成之后才可被调用。
在多核系统中, xwos_init()
需要在每个CPU的初始化流程中被调用一次。
自定义的启动流程举例
TODO