小核引导RTOS

2024-04-04 11:20
文章标签 引导 rtos 小核

本文主要是介绍小核引导RTOS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考

  • 参考1. How does FSBL load the FreeRTOS on the small core and execute it?
  • 参考2. Duo now supports big and little cores?Come and play!Milk-V Duo, start!

日志

FSBL Jb2829:g362832ac6-dirty:2024-04-02T13:31:11+00:00				# 版本信息
st_on_reason=40f0003
st_off_reason=800e0003
P2S/0x1000/0xc00a400.
SD/0x9400/0x1000/0x1000/0.P2E.
DPS/0xa400/0x2000.
SD/0xa400/0x2000/0x2000/0.DPE.
DDR init.							# DDR 初始化
ddr_param[0]=0x78075562.
pkg_type=1
D2_4_1
DDR3-4G-BGA
Data rate=1866.
DDR BIST PASS
PLLS/OD.
C2S/0xc400/0x9fe00000/0x3600.2RET.:00/0x3600/0x3600/0.RSC.[M1S./208x2f8a0000]/P0rxe8 0s0y0s0t0e0m0 /i0nxi1tb 0d0o0n.eRT: [1.289126]CVIRTOS Build Date:Apr  2 2024  (Time :13:31:11) 		# FreeRTOS 启动;
RT: [1.295040]Post system init done
RT: [1.298355]create cvi task
RT: [1.301172][cvi_spinlock_init] succeess
RT: [1.305076]prvCmdQuRunTask run
SD/0xfa00/0x1b000/0x1b000/0.ME.
L2/0x2aa00.
SD/0x2aa00/0x200/0x200/0.L2/0x414d3342/0xcafedbb7/0x80200000/0x37400/0x37400
COMP/1.
SD/0x2aa00/0x37400/0x37400/0.DCP/0x80200020/0x1000000/0x81900020/0x37400/1.
DCP/0x73c7a/0.
Loader_2nd loaded.					# 第二阶段:Opensbi;
Switch RTC mode to xtal32k
Jump to monitor at 0x80000000.
OPENSBI: next_addr=0x80200020 arg1=0x80080000
OpenSBI v0.9

可知:

  1. FSBL Jb2829...,FSBL启动,打印版本信息;
  2. DDR初始化完成后,紧跟RTOS任务初始化打印,中间无引导小核的工作打印

所以可以先对FSBL有个大致认知,再确认RTOS启动过程。

编译框架

# fsbl/Makefile.DEFAULT_GOAL := all	# 如果没有指定.DEFAULT_GOAL,make会执行第一个在Makefile中定义的目标。
MAKEOVERRIDES =			# 不传递任何父make的变量给子make,保持子make实例的独立性ARCH ?=					# make 传参可带ARCH=xxx 指定架构;ifneq ($(origin CROSS_COMPILE),command line)ifeq ($(ARCH),riscv)	# 如果不是命令行 make ARCH=xxx 形式,指明由RiscV核心来完成引导启动工作CROSS_COMPILE := ${CROSS_COMPILE_GLIBC_RISCV64}BOOT_CPU ?= riscv
...
ifeq (${CHIP_ARCH},)		# 必带参数:CHIP_ARCH$(error CHIP_ARCH is undefined)
...
ifeq (${CROSS_COMPILE},)	# 必带参数:CROSS_COMPILE$(error CROSS_COMPILE is undefined)
...
HOSTCC		:=	gcc
export HOSTCCCC			:=	${CROSS_COMPILE}gcc
...							# 工具链配置
include ${MAKE_HELPERS_DIRECTORY}build_macros.mk	# Makefile 宏定义,如:assert_boolean、add_define_val
include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk	# Make 辅助实现
...
include ${PLAT_MAKEFILE_FULL}	# 在plat_makefiles.mk中定义,指向:plat/${CHIP_ARCH}/platform.mk文件,
# fsbl/plat/sg200x/platform.mk,工作:
# - 定义哪些源码文件加入编辑链接;
# - 定义链接脚本文件;all: fip bl2 blmacros		# 第一目标all,依赖于fip、bl2、blmaacros
...
include ${MAKE_HELPERS_DIRECTORY}fip.mk	# 目标:fip
$(eval $(call MAKE_BL,2))				# 目标:bl2
$(eval $(call MAKE_BL,macros))			# 目标:blmacros

目标fip

目标fip有如下涉及RTOS的内容

# fsbl/make_helpers/fip.mk
...
fip: fip-all
...
fip-all: fip-dep$(print_target)${Q}echo "  [GEN] fip.bin"${Q}. ${BUILD_PLAT}/blmacros.env && \${FIPTOOL} -v genfip \'${BUILD_PLAT}/fip.bin' \--MONITOR_RUNADDR="$${MONITOR_RUNADDR}" \--BLCP_2ND_RUNADDR="$${BLCP_2ND_RUNADDR}" \...--BL2='${BUILD_PLAT}/bl2.bin' \...--BLCP_2ND='${BLCP_2ND_PATH}' \--MONITOR='${MONITOR_PATH}' \--LOADER_2ND='${LOADER_2ND_PATH}' \		...

由实际编译过程打印有:

  • --BLCP_2ND='${SDK_TOP}/freertos/cvitek/install/bin/cvirtos.bin' \,RTOS定义为BLCP_2ND;

    其运行地址BLCP_2ND在源头在板型目录下的memmap.py文件中定义,如文件:build/boards/cv181x/cv1813h_milkv_duos_sd/memmap.py

    class MemoryMap:...DRAM_BASE = 0x80000000DRAM_SIZE = 512 * SIZE_1M# ==============# C906L FreeRTOS# ==============FREERTOS_SIZE = 2 * SIZE_1M# FreeRTOS is at the end of DRAMFREERTOS_ADDR = DRAM_BASE + DRAM_SIZE - FREERTOS_SIZEFSBL_C906L_START_ADDR = FREERTOS_ADDR
    

    可知:

    • Duos 内存起始地位:0x80000000;大小:512MB;
    • FreeRTOS镜像运行地址(非加载地址):0x9fe00000(内存倒数2MB位置);大小:2MB;

    转化路径:mempa.py – build/scripts/mmap.mk --> build/output/${PROJECT_FULLNAME}/cvi_board_memmap.h。

    关联方式:软链如上cvi_board_memmap.h文件链接到:fsbl/build/cvi_board_memmap.h;

  • --MONITOR='${SDK_TOP}/opensbi/build/platform/generic/firmware/fw_dynamic.bin' \,Opensbi定义为MONITOR;

    借鉴ATF,MilkV将Risc-V下的Opensbi等同于ATF中的BL31,也称为Monitor;

        # ==============================# OpenSBI | arm-trusted-firmware# ==============================# Monitor is at the begining of DRAMMONITOR_ADDR = DRAM_BASEATF_SIZE = 512 * SIZE_1KOPENSBI_SIZE = 512 * SIZE_1KOPENSBI_FDT_ADDR = MONITOR_ADDR + OPENSBI_SIZE
    

    可知:

    • Opensbi镜像运行地址:0x80000000;大小:512KB;
  • --LOADER_2ND='${SDK_TOP}/u-boot-2021.10/build/cv1813h_milkv_duos_sd/u-boot-raw.bin' \,U-boot定义为LOADER_2ND;

    借鉴ATF,MilkV将Risc-V下的U-boot等同于ATF中的BL32;

        # ===================# FSBL and u-boot-2021# ===================CVI_UPDATE_HEADER_SIZE = SIZE_1KUIMAG_SIZE = 16 * SIZE_1M# kernel image loading bufferUIMAG_ADDR = DRAM_BASE + 24 * SIZE_1M...# u-boot's run address and entry pointCONFIG_SYS_TEXT_BASE = DRAM_BASE + 2 * SIZE_1M
    

    可知:

    • U-boot运行地址:0x8020000(内存偏移2MB);大小:2MB;

启动流程

​ 由上一章节可知追寻着BLCP_2ND的引用位置即可知晓RTOS如何加载启动。
----待继续补充 240403

这篇关于小核引导RTOS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875647

相关文章

Android 引导图层、引导页

Android 引导图层(参考gith项目) Android 引导图层参考gith项目 简介不多说 先上图 部分代码说明 简介: 最最轻量级的新手引导图层库,支持单页,多个引导,支持设置不同的图形,支持动画等,例如:Activity 、fragment、各种对应View 皆可; 不多说 先上图: OK ;可以根据自己的需求重新定义 显示的效果;都

linux-5.6.6 内核引导

本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:povcfe 原文地址:https://bbs.pediy.com/thread-261718.htm     本文详细讲解linux内核的加载过程,参考linux-insiders,并结合linux-5.6.6代码对原文的部分老旧内容做修改 引导 1.按

win10 gpt分区+uefi引导 卸载双系统ubuntu

1、首先暴力卸载ubuntu 在win10里面磁盘管理中找到对应的linux磁盘分区 删除卷OK 2、重启 出现下面(根据机型不同界面可能不一样 ) 3、exit 退出grub引导 进入uefi引导  选择win10引导项 (当然你要是一直按着进入bios boot的那个按键的话 也不用看第二步了 直接选择windows启动项进去 dell的话是F12) 4、进入

FreeRTOS学习笔记—④RTOS通信管理篇/同步互斥与通信(正在更新中)

二、RTOS的核心功能   RTOS的核心功能块主要分为任务管理、内核管理、时间管理以及通信管理4部分,框架图如下所示:   (1)任务管理:负责管理和调度任务的执行,确保系统中的任务能够按照预期运行。   (2)内核管理:负责系统核心功能的管理,包括内存、中断、异常处理和系统启动等。   (3)时间管理:负责所有与时间相关的操作,包括系统时钟、定时器、任务延迟和周期性任务的执行。   (4)通

基于STM32的RTOS--freertos的使用(HAL实现多任务)

一:STM32cubemx配置         1:工程建立                         (1)打开stm32cubemx  点击进入芯片选择页面                                         (2)选择对应的芯片型号双击         2:调试接口配置                  3:时钟设置

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

基于中心引导判别学习的弱监督视频异常检测

WEAKLY SUPERVISED VIDEO ANOMALY DETECTION VIA CENTER-GUIDED DISCRIMINATIVE LEARNING 基于中心引导判别学习的弱监督视频异常检测 abstract 由于异常视频内容和时长的多样性,监控视频中的异常检测是一项具有挑战性的任务。在本文中,我们将视频异常检测看作是一个弱监督下视频片段异常分数的回归问题。因此,我们提出了

集成电路学习:什么是RTOS实时操作系统

RTOS:实时操作系统         RTOS,全称Real Time Operating System,即实时操作系统,是一种专为满足实时控制需求而设计的操作系统。它能够在外部事件或数据产生时,以足够快的速度进行处理,并在规定的时间内控制生产过程或对处理系统做出快速响应。RTOS的主要特点包括及时响应、高可靠性、多任务处理、确定性、资源管理、优先级调度、中断处理和时间管理等。 一、RT

C1-2 ABB二次SDK开发——手把手教登录对应的机器人控制器(图片引导操作)登录机器人控制器和刷新机器人列表

1.完成配置后我们开始进行操作 C1-1 ABB二次SDK开发——C#Window窗体-环境配置(带ABB二次开发SDK资源包)-CSDN博客文章浏览阅读95次。3.记住路径,右键C#引用,然后导入ABB.Robotics.Controllers.PC.dll。2.安装资源文件PCABB二次开发的SDK,并打开安装路径。1.新建VSC#的windowfrom项目。4.在框架代码主界面代码中添加。

ESP8266使用ESP8266_RTOS_SDK-3.4开发

参见 windows+mingw32+ESP8266 RTOS SDK开发环境搭建和HelloWorld显示 把从github上拉取的完整的工程,切换分支即可