创建BSP工程
在实际的项目中,如果需要开发一款新的BSP,一般都是拿一个已有的BSP在此基础上做修改而成。但是在本教程中,我们完全从头开始创建一个空的BSP模板,带领大家一步步的完善这个BSP,最后实现SylixOS最小系统的功能。
首先我们要熟悉RealEvo-IDE的基本使用,比如创建base和bsp工程等等,这个需要大家提前进行学习。全志R16是cortex-a7架构的,所以在创建base工程时我们要选择这个架构类型:
在创建bsp工程时,我们选择arm-none模板:
这个选项会创建一个最基础的BSP模板,不包含任何的开发板相关代码,有助于我们在此基础上添加代码:
我们以上图为例来简单看下SylixOS BSP的基本组织。
1. bsp目录
bsp目录下包含了最重要的几个文件:
- bspInit.c:SylixOS系统启动初始化文件,在这个文件中会初始化系统的一系列内核组件和外设驱动。
- bspLib.c:SylixOS BSP接口文件,这个文件中包含了一系列的内核会使用的接口,需要根据不同的芯片去实现这些接口。比如关闭/使能中断向量号、获取BSP信息、系统TICK初始化等等。
- bspMap.h:系统物理地址和虚拟地址空间映射关系文件,这个文件中用两个表来描述了系统需要使用的物理地址空间和虚拟地址空间如何映射。
- startup.S:SylixOS内核入口初始化文件,主要包含了架构相关的一些设置,比如中断向量表设置、栈设置等等。由于这些设置都是架构相关的,所以使用汇编来实现的。
- config.h:直接包含最外层的config.h。
2. driver目录
这个目录下主要放BSP开发者需要实现的各种外设的驱动,比如中断控制器、串口、网络等等。然后在bspInit.c中会去调用这些驱动的初始化函数。在BSP最小系统的开发中,我们需要实现串口、中断控制器和定时器这三个驱动。
3. user目录
这个目录下只有一个main.c文件,这个文件中的t_main线程会去创建一个shell来让使用者和SylixOS进行交互。在实际的使用中,这个文件保持原样即可,一般不需要进行改动。
4. config.h
这个文件中主要包含了物理内存空间的划分,主要就是内核代码段、数据段、DMA内存段、APP内存段这四个空间的大小配置,这个我们会在后面专门有一章节来进行讲解。
5. makefile
bsp_allwinner_r16.mk、config.mk和Makefile是控制着BSP编译的三个文件,在实际的项目中,可能由于一些需求需要手动修改这些文件,但是在本BSP开发教程中,这几个文件默认即可,不需要进行额外修改。
6. 链接脚本
config.ld和SylixOSBSP.ld这两个文件控制着SylixOS内核镜像如何进行链接,在实际使用中很少需要改动这个两个文件,一般默认即可。
通过上面的介绍,我们对SylixOS BSP的文件组织有了一个基本的认识,从下一章节开始我们就正式开始编写代码了,让我们一起来揭开SylixOS BSP的神秘面纱吧 ♪(^∇^*)
评论