MQX简易移植

1. 概述


MQX BSP即板级支持包,是指针对某一特定的板子的系统软件包,包括 MQX操作系
统内核,MFS 文件系统(如果需要支持文件系统功能的话),RTCS 协议栈(如果需要)、
USB协议栈(如果需要)以及板子上所有硬件的驱动程序。
Freescale公司针对主要的 coldfire处理器,开发了比较完整的驱动程序,基本上包含了
所有 coldfire 芯片集成的片上模块。因此,在大多数情况下,我们都无需开发驱动程序。
Freescale提供了多个其官方评估板的BSP。本文档描述如何在自己开发的板子上移植MQX
BSP,以 Nicrosystem开发的NSCF51ACR1开发板为例,给出了详细的移植过程。
注意:
 本文档只针对freescale公司的 coldfire处理器,并不适用将MQX 移植到别的架构。 
 本文档只描述板级支持包的移植,不包含芯片级的移植,即假定板子上采用的
coldfire处理器MQX 已经支持了。
 MQX 操作系统不能商用在其他公司的处理器上,如果需要这样做,则需要联系飞
思卡尔等公司了解授权事宜。
 
2. MQX 源代码结构
从飞思卡尔网站免费下载的 MQX 系统,安装后,在安装目录下(下面以%installdir 表
示)会创建如下子目录:
 
 Config:该目录下包含配置文件。
 Demo:几个综合性的 demo工程 Nicrosystem                                                            
  Doc:MQX 的英文文档,包括用户手册,MFS参考手册等
  Lib:包含每个板子 BSP的最终输出结果:库文件,头文件等
  Mfs:MFS文件系统源码和examples
  Mqx:MQX 操作系统代码,BSP相关代码,驱动代码
  Rtcs:TCP/IP协议栈代码和 examples
  Shell:shell代码
  Tools:一些辅助的工具
  Usb:USB 协议栈代码,包括 device 协议栈和 host 协议栈两部分,每部分又有几个
examples
移植 MQX BSP 首先相关的是 config目录和 mqx 目录。下面再详细说明下这两个目录
的结构。
Config目录的基本结果如下图:
 
该目录众多子目录分成两大类:
  Common:该子目录包括的是所有板子 bsp共用的配置文件。
  maximum_config.h:MQX 全功能配置,基本上把 MQX 的所有功能都打开了,很
自然生成的 image也最大,最系统硬件资源的需求也最大
  small_ram_config.h:针对比较小 SRAM 的微控制器的典型配置,大多数情况下采
用该配置即可
  smallest_config.h:最小配置,只打开 MQX 最基本的功能,针对资源极端受限的应

  verif_enabled_config.h:一些辅助的配置。主要是针对 MQX 内部错误检查的使能
配置。
  所有其它子目录:每个子目录都对应一个板子(或者说对应一个 bsp)。里面包含针对
每个 bsp的个性化配置
对于我们移植mqx到新的板子,common目录的内容通常不需要做任何改动,但需要在
config目录下创建一个新的子目录,以你的板子的名称命名,包含针对你的板子的个性化配
置。
MQX 目录的结构如下:
 
  Build:该子目录包含不同编译器(codewarrior,IAR 等)的子目录,每个子目录下
则是各个板子bsp和psp的工程文件。此外,还包括一个 bat 子目录,里面是各个
板子bsp,psp的链接后批处理脚本。
  Examples:样例程序,演示 mqx 主要功能,比如消息邮箱,中断服务等,可以用
该目录下的程序测试验证移植的 mqx bsp是否功能正确
  Source:包含 mqx 内核的所有代码,所有驱动程序代码,以及bsp相关代码。
Mqx目录是移植的重点,需要在 build目录为自己的板子分别创建bsp和 psp的工程文Nicrosystem                                                            
 5
件;在 source\bsp 目录下创建一个新子目录,以自己的板子名称命名。如果你的板子有
freescale未提供驱动的硬件,那么你还需要在 source\io目录下为它编写驱动。
 
3. MQX BSP移植指南
移植的基本步骤如下:
  选择一个基线bsp作为起点
  复制选择的 bsp和psp工程文件,配置文件,源码
  修改相关的配置文件,工程文件和源程序
  创建默认的 I/O设备初始化文件
  Build
下面以 nicrosystem的 NSCF51ACR1 开发板为例子,描述每个步骤。
3.1 选择基线 bsp
通常我们不需要从零开始创建一个新的bsp,我们可以选择 freescale 提供的某个 bsp作
为起点,加速开发。NSCF51ACR1 开发板采用飞思卡尔coldfire V1 系列的 MCF51AC128微
控制器为主芯片。因此我们选择飞思卡尔提供的m51acdemo bsp为基线,因为这个demo板
采用的是 MCF51AC256芯片,与NSCF51ACR1 的MCF51AC128是同一系列,非常接近。
 
3.2复制选择的 bsp和 psp工程文件,配置文件,源码
  在 %installdir\mqx\build\cwmcu63 目 录 下 , 复 制 bsp_m51acdemo.mcp 和
psp_m51acdemo.mcp,分别命名为 bsp_nscf51acr1.mcp和 psp_nscf51acr1.mcp
  在%installdir\mqx\build\bat 目录下,复制bsp_m51acdemo.bat 和 psp_m51acdemo.bat,分
别命名为bsp_nscf51acr1.bat和 psp_nscf51acr1.bat
  在%installdir\mqx\source\bsp 目录下,创建一个新的目录,命名为 nscf51acr1,拷贝
%installdir\mqx\source\bsp\m51acdemo目录下所有文件到新目录nscf51acr1。
  在 %installdir\lib 目 录 下 创 建 新 目 录 , 命 名 为 nscf51acr1.cw , 并 在
%installdir\lib\nscf51acr1.cw目录下创建子目录 mqx
 
3.3 修改
  修改 bsp_nscf51acr1.bat 和 psp_nscf51acr1.bat文件,将其中所有的m51acdemo字符串替
换为nscf51acr1
  将新创建的$installdir\mqx\source\bsp\nscf51acr1\目录下的 m51acdemo.h 文件改名为
nscf51acr1.h,打开这个文件,将里面所有的 m51acdemo字符串替换为 nscf51acr1
  将新创建的$installdir\mqx\source\bsp\nscf51acr1\cw\dbg 目录下的 m51acdemo.cfg 和
m51acdemo.mem文件改名为 nscf51acr1.cfg和 nscf51acr1.mem
  修改nscf51acr1.mem文件,将里面的:
range  0x00000410 0x0003FFFF 4 ReadWrite // Second Section of the
256KBytes  of Flash Memory 
reserved    0x00040000  0x007FFFFF
改为:
range  0x00000410 0x0001FFFF 4 ReadWrite // Second Section of the
128KBytes  of Flash Memory 
reserved    0x00020000  0x007FFFFF
  修改$installdir\mqx\source\bsp\nscf51acr1\cw\intflash.lcf文件,将其中的:
     rom         (RX): ORIGIN = 0x00000440, LENGTH = 0x0003FBBF  # Code + Const
data # = 0x3FFFF - 0x440 :: 256K Flash
修改为:
rom         (RX): ORIGIN = 0x00000440, LENGTH = 0x0001FBBF  # Code + Const data #
= 0x1FFFF - 0x440 :: 128K Flash
  将$installdir\mqx\source\bsp\nscf51acr1\目录下所有文件,包括.c,.h以及其他类型的文件
中出现的 m51acdemo字符串全部替换为 nscf51acr1
  用 codewarrior for Microcontroller V6.3 打 开
%installdir\mqx\build\cwmcu63\psp_nscf51acr1.mcp,然后按照 3.3.1节的步骤做修改
  用 codewarrior for Microcontroller V6.3 打 开
%installdir\mqx\build\cwmcu63\bsp_nscf51acr1.mcp,然后按照 3.3.2节的步骤做修改
  按照 3.3.3节的说明,做其他源码的修改
 
3.3.1  修改 psp工程设置
分别对 Debug regABI和 release regABI两个target做同样的设置修改。下面只以Debug
regABI为例。
最原始的界面如下: Nicrosystem                                                               MQX 移植指南
 7
 
  将 m51acdemo user config重命名为nscf51acr1 user config。删除 user_config.h文件,点
击右键->add files…,重新加入%installdir\config\nscf51acr1\user_config.h
  点击Debug RegABI setting按钮(或者按ALT+F7),弹出设置对话框:
 
点 choose,选择 output Directory为%installdir\lib\nscf51acr1.cw\mqx
  选择Access Paths,出现:
 
 
将 删除,点击add加入%installdir\config\nscf51acr1
  选择 BatchRunner P…,出现
 
点 choose,将 替换为
%installdir\mqx\build\bat\psp_nscf51acr1.bat Nicrosystem                                                        
3.3.2  修改 bsp工程设置
原始的工程打开后如下:
 
  修改 m51acdemo User Config为 nscf51acr1 User Config,将 user_config.h删除,加入
%installdir\config\nscf51acr1\user_config.h
  将 m51acdemo BSP Files改名为 nscf51acr1 VSP Files,然后删除掉下面的所有文件,右
键 add files…,重新加入%installdir\mqx\source\bsp\nscf51acr1目录下以及其子目录下的
所有.h和.c文件。如下图所示:
 
  点击 Debug RegABI setting按钮(或者按 ALT+F7),弹出设置对话框:
 
点 choose,将 换成%installdir\lib\nscf51acr1.cw\mqx
  选择 Access Paths,出现如下对话框 Nicrosystem                                                       
 
将其中的(project)..\..\..\config\m51acdemo,..\source\bsp\m51acdemo,
\source\bsp\m51acdemo\cw分别替换成对应的%installdir\config\nscf51acr1,
%installdir\mqx\source\bsp\nscf51acr1,%installdir\mqx\source\bsp\nscf51acr1\cw。简单说就是
把所有出现 m51acdemo的项全换掉
  再选择 Coldfire Target,出现:
 
将 File Name里的 m51acdemo_regabi_d.a 换成 nscf51acr1_regabi_d.a Nicrosystem                                           
  选择 BatchRunner P…,出现
 
将对应的 bsp_m51acdemo.bat 换成%installdir\mqx\build\bat\bsp_nscf51acr1.bat
3.3.3源码修改
这部分是与你板子的硬件设计直接相关的,简单说,你的硬件与所选择的baseline bsp
板子有任何差异,都要做相应修改,这部分基本上就是整个移植过程中,开发工作量最大的
一部分。
下面我们以NSCF51ACR1 开发板为平台,以两个例子来说明修改方法。第一个例子是
芯片时钟初始化,第二个例子是对 SD卡的支持。
  芯片时钟初始化
NSCF51ACR1 开发板采用的晶振是25MHZ,这点与我们作为基线版本的 M51acdemo
是不同的,飞思卡尔的 m51acdemo上用的是 4MHZ晶振。所以在系统启动最开始对时
钟的初始化要做修改,即设置 CPU主频。
找到%installdir\mqx\source\bsp\nscf51acr1\bsp_init.c文件,将其中的
_mqx_clock_init_20MHz()函数删除,添加新的_mqx_clock_init_25MHz(),将系统主频设
置为50MHZ,这块代码需要根据 MCF51AC128手册来写
在nscf51acr1.h中修改
#define BSP_SYSTEM_CLOCK                              (40000000L)
为:
#define BSP_SYSTEM_CLOCK                              (50000000L)
  SD卡支持
NSCF51ACR1 开发板支持 SD卡,而飞思卡尔官方的m51acdemo没有此功能,为此需
要在bsp中添加对SD卡的支持,核心就是添加 SD卡的驱动程序。
NSCF51ACR1开发板的SD卡是通过MCF51AC128的SPI1驱动的,因此需要SPI驱动,                                                    
这个在 m51acdemo bsp中已经加入了,所以不需要修改。我们需要的是SD卡驱动程序,
飞思卡尔在 MQX中已经实现,代码在%installdir\mqx\source\io\sdcard。我们打开
bsp_nscf51acr1.mcp,在 peripheral IO Drivers 下面创建一个目录,命名为sdcard,,再在
sdcard下创建个子目录 sdcrad_spi,将%installdir\mqx\source\io\sdcard下的.h和.c文件加
到 sdcard下,将%installdir\mqx\source\io\sdcard\sdcard_spi目录下的.h和.c文件加到
sdcard_spi下。如图:
 
这样 sdcard的驱动程序就加入到bsp中了。接下来要创建 sdcard的初始化参数配置文
件。在%installdir\mqx\source\bsp\nscf51acr1 下创建一个新文件:init_sdcard0.c,将这个
文件加入 bsp工程,如下图所示:
 
在 init_sdcard0.c中添加代码,如下:
 
在 nscf51acr1.h文件中添加:
 
在 user_config.h中检查 BSPCFG_ENABLE_SPI0 是否为 1,如没有,则添加
#define BSPCFG_ENABLE_SPI0  1
在 bsp.h里添加:
#include <sdcard.h>
#include <sdcard_spi.h>
extern const SDCARD_INIT_STRUCT _bsp_sdcard0_init;
打开 Debug RegABI Settings,选择Access Paths,添加%installdir\mqx\source\io\sdcard
和%installdir\mqx\source\io\sdcard\sdcard_spi,如下图:
 
点 OK 确认退出。
打开%installdir\mqx\build\bat\bsp_nscf51acr1.bat,添加:
copy /Y ..\..\..\mqx\source\io\sdcard\sdcard.h  .
copy /Y ..\..\..\mqx\source\io\sdcard\sdcard_spi\sdcard_spi.h .
 
至此,SD卡支持完成,其他硬件差异的支持步骤与此类似,可能需要你开发相应的驱
动程序。
最后打开bsp_nscf51acr1.mcp build,生成的库文件以及用户需要用到的头文件全部自动
拷贝到%installdir\lib\nscf51acr1\mqx 下。
再打开 psp_nscf51acr1.mcp, build,生成psp的库,也拷贝到%installdir\lib\nscf51acr1\mqx
下。
这样就完成了MQX BSP的移植。
当然如果还需要MFS、RTCS等功能,还要针对这些组件进行移植,相关的步骤与此类
似,但都比较简单。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值