mps2 的資料很少,所以唯一能下載的是 ARM 官方的 V2M-MPS2_CMx_BSP
提取啟動(dòng)文件與連接腳本
安裝 Keil.V2M-MPS2_CMx_BSP.1.8.0.pack 后, 在 V2M-MPS2_CMx_BSP1.8.0DeviceCMSDK_CM3SourceGCC 路徑下,有 mps2-an385 的啟動(dòng)文件與連接腳本
把 V2M-MPS2_CMx_BSP1.8.0DeviceCMSDK_CM3SourceGCCgcc_arm.ld 復(fù)制到工程 qemu-mps2-arm 目錄下,可以改為 link.lds。
把 V2M-MPS2_CMx_BSP1.8.0DeviceCMSDK_CM3SourceGCCstartup_CMSDK_CM3.S 復(fù)制到工程 qemu-mps2-arm/drivers 目錄下
【備注】也可把整個(gè) V2M-MPS2_CMx_BSP1.8.0DeviceCMSDK_CM3 目錄復(fù)制到工程 qemu-mps2-arm/drivers 目錄下
通過(guò)簡(jiǎn)單了解到,這個(gè)啟動(dòng)文件與連接腳本,與 STM32F103 系列的很像。
scons 構(gòu)建環(huán)境的搭建
RT-Thread BSP 使用 scons 進(jìn)行構(gòu)建,所以需要 SConscript SConstruct 兩個(gè)文件,另外需要 rtconfig.py 文件,這幾個(gè)文件可以從其他的 RT-Thread bsp 如 bspstm32stm32f103-fire-arbitrary 復(fù)制過(guò)來(lái),修改一下構(gòu)建路徑即可
SConscript 文件 無(wú)需修改,內(nèi)容如下,遍歷 當(dāng)前與子目錄下的 SConscript,獲取構(gòu)建的目標(biāo)
RT-Thread building script for bridge
import os
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
SConstruct 文件:只需要修改 RTT_ROOT 的路徑
import os
import sys
import rtconfig
if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
RTT_ROOT = os.path.join(os.getcwd(), '..', 'rt-thread')
print(RTT_ROOT)
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
from building import *
TARGET = 'rtthread.' + rtconfig.TARGET_EXT
DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
AR = rtconfig.AR, ARFLAGS = '-rc',
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
env['ASCOM'] = env['ASPPCOM']
Export('RTT_ROOT')
Export('rtconfig')
prepare building environment
objs = PrepareBuilding(env, RTT_ROOT)
make a building
DoBuilding(TARGET, objs)
rtconfig.py 文件: 基本不需要修改,注意復(fù)制一份 STM32F103 系列 Cortex-M3 的,如 bspstm32stm32f103-fire-arbitraryrtconfig.py
圖形配置文件
RT-Thread 在 ubuntu 下使用 scons --menuconfig 進(jìn)行圖形界面配置,需要相應(yīng)的 Kconfig 文件,當(dāng)前需要兩個(gè) Kconfig 文件,BSP 下 Kconfig 與
bsp/drivers 下的 Kconfig,如 從 bspstm32stm32f103-fire-arbitrary 復(fù)制一份,修改一下
qemu-mps2-arm/Kconfig 內(nèi)容,注意修改 RTT_DIR 路徑
mainmenu "RT-Thread Project Configuration"
config BSP_DIR
string
option env="BSP_ROOT"
default "."
config RTT_DIR
string
option env="RTT_ROOT"
default "../rt-thread"
config PKGS_DIR
string
option env="PKGS_ROOT"
default "packages"
source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "$BSP_DIR/drivers/Kconfig"
qemu-mps2-arm/drivers/Kconfig
這里需要配置一下 MCU 的信息,如 select ARCH_ARM_CORTEX_M3,用于選擇 RT-Thread 的 rt-thread/libcpu/arm/cortex-m3/
mps2-an385 的串口是 uart0 開(kāi)始的,配置一個(gè)用于 MSH shell 的串口,當(dāng)前驗(yàn)證是 uart0 可以正常工作
menu "Hardware Drivers Config"
config SOC_MPS2_CORTEX_M3
bool
select ARCH_ARM_CORTEX_M3
select RT_USING_COMPONENTS_INIT
select RT_USING_USER_MAIN
default y
menu "Onboard Peripheral Drivers"
config BSP_USING_UART0
bool "Enable UART0"
default y
config BSP_USING_UART1
bool "Enable UART1"
default n
endmenu
endmenu
默認(rèn)需要有一個(gè) rtconfig.h,這個(gè)文件可以手動(dòng)創(chuàng)建,內(nèi)容為空即可,然后通過(guò) scons --menuconfig,即可刷新 rtconfig.h 的內(nèi)容,同時(shí)生成 .config 默認(rèn)配置文件
mps2-an385 相關(guān)的文件
當(dāng)前 把 KeilV2M-MPS2_CMx_BSP1.8.0DeviceCMSDK_CM3 復(fù)制到 工程 qemu-mps2-arm/drivers/ 目錄下,
創(chuàng)建并修改 qemu-mps2-arm/drivers/SConscript,用于編譯 qemu-mps2-arm/drivers 驅(qū)動(dòng)相關(guān)的文件
import rtconfig
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
src = Split('''
CMSDK_CM3/Source/system_CMSDK_CM3.c
board.c
drv_common.c
drv_uart.c
''')
list = os.listdir(cwd)
CPPPATH = [cwd]
CPPPATH += [cwd + '/CMSDK_CM3/Include']
CPPPATH += [cwd + '/cmsis/core/include']
objs = []
if rtconfig.PLATFORM in ['gcc']:
src += ['CMSDK_CM3/Source/GCC/startup_CMSDK_CM3.S']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
objs = objs + group
Return('objs')
從其他 bsp,復(fù)制一份 board.c board.h 文件 到 qemu-mps2-arm/drivers,board 初始化
從其他 bsp,復(fù)制一份 drv_uart.c drv_uart.h 文件 到 qemu-mps2-arm/drivers,串口驅(qū)動(dòng)
從其他 bsp,復(fù)制一份 drv_common.c 到 qemu-mps2-arm/drivers,當(dāng)前主要是 定時(shí)器初始化
編譯并解決編譯錯(cuò)誤
scons 構(gòu)建 drivers/system_CMSDK_CM3.c354: error: #error device not specified!,可以在
qemu-mps2-arm/drivers/CMSDK_CM3/Source/system_CMSDK_CM3.c 文件上面定義 MCU 的型號(hào) #define CMSDK_CM3
scons 構(gòu)建 缺少 core_cm3.h 文件: 這部分可以復(fù)制 Keil MDK5 pack 路徑下的 ARMCMSIS5.8.0CMSISCoreIncludecore_cm3.h 下
工程里面創(chuàng)建 qemu-mps2-arm/drivers/cmsis/core/include 目錄,把以下文件復(fù)制過(guò)來(lái)
ARMCMSIS5.8.0CMSISCoreIncludecmsis_compiler.h
ARMCMSIS5.8.0CMSISCoreIncludecmsis_gcc.h
ARMCMSIS5.8.0CMSISCoreIncludecmsis_version.h
ARMCMSIS5.8.0CMSISCoreIncludecore_cm3.h
ARMCMSIS5.8.0CMSISCoreIncludempu_armv7.h
待進(jìn)一步完善驅(qū)動(dòng)、配置、修改并啟動(dòng) RT-Thread
小結(jié)
本篇主要是 RT-Thread qemu mps2-an385 bsp 相關(guān)文件的準(zhǔn)備工作,了解構(gòu)建過(guò)程,并為進(jìn)一步 適配啟動(dòng) RT-Thread 做準(zhǔn)備
本篇的 qemu board mps2-an385 資料比較少,主要是通過(guò) ARM 官方 Keil.V2M-MPS2_CMx_BSP.1.8.0.pack 獲取到,并且文檔也比較少,
不過(guò) RT-Thread 移植主要是 定時(shí)器與 串口的移植, CPU 架構(gòu)部分,RT-Thread libcpu 已經(jīng)支持 ARM Cortex-M3,所以移植起來(lái)主要是 BSP 相關(guān)的適配與修改
接下來(lái)開(kāi)始 適配與修改BSP,讓 mps2-an385 RT-Thread 跑起來(lái).
-
ARM處理器
+關(guān)注
關(guān)注
6文章
360瀏覽量
41724 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3246瀏覽量
114731 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
270瀏覽量
59463 -
STM32F103
+關(guān)注
關(guān)注
33文章
477瀏覽量
63602 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1285瀏覽量
40091
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論