开发 QuickVisor BSP 工程

更新时间:
2024-01-10

开发 QuickVisor BSP 工程

BSP 工程简介

板级支持包工程(Board Support Package)通常简称为 BSP 工程,主要包含跟板卡密切相关的启动代码和设备驱动代码,负责处理器的启动引导、时钟树的初始化、物理内存和地址空间的管理、中断的配置和处理,向内核提供标准的硬件访问接口和设备对象。

创建 BSP 工程

BSP 工程的创建流程

首先,选择 File > New > QuickVisor BSP 菜单,开始创建 BSP 工程,为新建的 BSP 工程输入名称,单击 Next 按钮进入编译配置界面。

然后,右键工程 Propeities -> QuickVisor Setting -> BSP Setting 进入 BSP Setting 配置页面。

接着,选中目标工程单击右键选择 Build Project 或者单击工具栏的一键编译按钮,进行工程编译。

BSP 工程的目录结构

BSP 工程模板的目录结构如下:

项目说明
/src/docs/*板级支持包相关的芯片手册和调试手册。
/src/drvs/*板级支持包包含的设备驱动源码文件。
/src/test/*板级支持包的测试程序或测试报告。
/src/startup.S板级支持包的汇编引导程序,启动执行的第一行代码。
/src/bsp_init.c板级支持包的 C 语言初始化程序,调用内核初始化接口并注册相关设备驱动对象。
/src/bsp_libs.c板级支持包需要提供给内核使用的标准接口和相关回调函数。
/config.h板级支持包相关的内存和设备地址空间,以及设备中断号等配置信息。
/readme.txt板级支持包相关的使用文档,以及硬件平台的基本信息和参考资料链接。

实现 BSP 工程

BSP 工程初始化流程

注意:系统初始化的完整逻辑可以在 BSP 模板工程中的 startup.S 和 bsp_init.c 文件中找到。

QuickVisor BSP 系统初始化主逻辑如下:

  • CPU 复位,跳转到汇编入口。
  • CPU 运行模式初始化、初始化启动栈、异常向量表初始化、.data 和 .bss 段初始化、跳转到 C 函数入口。
  • 初始化调试打印端口、初始化系统核心、创建 boot_thread 用于执行第二阶段的系统初始化、启动多任务系统。
  • 执行 boot_thread:注册驱动程序、注册设备实例、创建控制台线程、解析并创建虚拟机实例、多核唤醒。
  • CPU Core 运行,开始执行系统任务。

BSP 需要实现的接口

注意:BSP 接口的详细定义可以在 quickvisor/libquickvisor/src/include/bsp/qv_bsp.h 头文件中找到。

QuickVisor BSP 需要实现的接口如下:

函数名称功能描述
qv_bsp_hyp_params内核初始化物理内存、地址空间 和 ROMFS 后,将调用该函数获取内核配置。
qv_bsp_idle_hook当 CPU 空闲时将执行 idle 线程,idle 线程将调用该函数。
qv_bsp_delay_loop该函数实现指定时长的循环计数。
qv_bsp_logic_cpuid该函数用于获取当前 CPU 的逻辑 ID 号。
qv_bsp_printk该函数用于打印调试信息。
qv_bsp_boot_addr该函数用于获取指定 CPU 启动后执行代码的起始物理地址。
qv_bsp_boot_stack该函数用于获取指定 CPU 启动时使用的临时栈的地址和大小。
qv_bsp_sys_reboot该函数用于重启整个系统。
qv_bsp_sys_shutdown该函数用于关闭整个系统。
qv_bsp_irq_chip_init该函数用于初始化 interrupt 控制器。
qv_bsp_cpu_timer_init该函数用于初始化 percpu 定时器。
qv_bsp_smp_chip_init该函数用于初始化 smp 管理单元。
文档内容是否对您有所帮助?
有帮助
没帮助