龙芯OpenHarmony课程 【2】启动分析

本文详细介绍了龙芯开发板的启动流程,包括启动文件start.S和链接脚本ld.script的作用,系统从start函数开始执行,经过初始化、内核加载直至启动的过程。重点解析了main函数中的bsp_init初始化步骤及内核启动前的各项准备工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 启动文件和链接脚本

龙芯开发板的板级代码位于:device\loongson\ls1c300b_hrst 文件夹
其中,启动文件位于 device\loongson\ls1c300b_hrst\src\lib 文件夹下,文件名:
start.S 文件
链接脚本:device\loongson\ls1c300b_hrst 文件夹下
ld.script 文件

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区


可以看到链接的地址是 0x80200000,也就是说我们编译出来的固件要加载到这个地址运行。

2 系统启动流程

代码启动流程图如下,首先 start 函数会做芯片相关初始化,然后跳转到main函数,接下来会调用bsp_init进行板级初始化,包括串口初始化等,接下来进入 run_los 函数,进行LOS_KernelInit内核初始化,create_test_task创建测试线程,最后调用LOS_Start启动内核。
流程如下:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区

3 main函数

启动文件 start.S 中会执行CPU相关的初始化,例如内存初始化、代码拷贝、BSS段清零等。最后会执行main函数,如下:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区


我们来看下main函数:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区


可以看到main函数首先执行 bsp_init 进行板级初始化,
bsp_init 函数主要执行串口初始化、硬浮点初始化,中断初始化等,最后打印CPU时钟:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区


clk_print_all 函数打印的CPU时钟信息可以在通过打印看到,如下:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区

执行完 bsp_init 初始化后,会开始执行 run_los 执行openharmony内核,代码如下:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区

create_test_task 会根据相关的宏创建对应的测试线程,开发者可以根据需要打开相应测试:

慧睿思通 龙芯OpenHarmony课程 【2】启动分析-鸿蒙HarmonyOS技术社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值