Windows CE系统开发,BSP包中的几个常见文件详解

Windows CE系统开发,BSP包中的几个常见文件详解

BSP介绍(Board Support Package)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括:

(1)      单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持;

(2)      为操作系统提供设备驱动程序和系统中断服务程序;

(3)      定制操作系统的功能,为软件系统提供一个实时多任务的运行环境;

(4)      初始化操作系统,为操作系统的正常运行做好准备。

1.1.1    sources.cmn文件

sources.cmn是Common Source文件,BSP内所有的源代码编译都会用到该文件。里面定义一些比较常用的名词或环境变量或路径。

例如在OAMPL138 MCBSP驱动目录下source 文件中“INCLUDES=$(INCLUDES);..\INC”这行伪代码,其中“(INCLUDES)”部分及时引用source.cmn文件中的INCLUDE环境变量,定义如程序清单 0.1所示。

程序清单 0.1 定义      件平台相关的文件,主要 INCLUDE环境变量

INCLUDES=$(_PLATFORMROOT)\common\src\inc;

大家可以看看这段英文介绍;

Sources.cmn is a build configuration system file that allows you to set common variables. This can be useful if more than one directory in the build tree need the a variable set to the same value because it can reduce your maintenance efforts. 

Each build tree can use one sources.cmn file.  When build.exe runs, it will determine the root of the build tree by looking for the top most folder with a Dirs file. Build.exe then sets BUILDROOT to the top most folder with a Dirs files.  Makefile.def in
Public\Common\OAK\Misc will include $(BUILDROOT)\sources.cmn if it exists.

Some of the variables that are commonly set in sources.cmn include CDEFINES, ADEFINES and INCLUDES.

CDEFINES and ADEFINES are used to set macros that are common to multiple build folders. These might include RAM and ROM sizes, but might also include OEM and CPU specific macros.

The include path, INCLUDES, can be set in sources.cmn which is very helpful, especially if and when you change the directory structure.

The Platform directory tree should have WINCEOEM set to 1, so sources.cmn is a good place to do this rather than setting it in each sources file.

Note: Starting with Windows CE 5.0, sources.cmn is no longer really an option. It is required because sources.cmn needs to at least set _COMMONPUBROOT, _ISVINCPATH, and _OEMINCPATH. These were set by build.exe in prior versions.

1.1.2    XXX.bat文件

DAT文件用于在WinCE启动的时候,定义文件系统的结构,也就是定义有哪些文件夹,哪些文件在什么位置等。每次冷启动的时候,Filesys模块会根据.dat文件中的内容来创建目录以及目录下的文件。

在BSP中我们可以找到platform.dat。在创建一个WinCE的工程以后,可以在工程目录下面找到project.dat。可以在这两个.dat文件中定义我们所需的根目录以及相应的子目录和文件,当然Windows文件夹及其包含的子文件夹除外。用户可以通过定义快捷方式的方法来引用Windows目录下的文件,如程序清单 0.2所示。

程序清单 0.2 DAT文件应用示例

root:-Directory("My Documents")

root:-Directory("Program Files")

Directory("\Program Files"):-Directory("My Projects")

Directory("\Program Files"):-Directory("Accessories")

Directory("\Program Files"):-Directory("Communication")

Directory("\Program Files\My Projects"):-File("My Project Program", "\Windows\Myproj.exe")

root:-File("\control.lnk", "\Windows\control.lnk")

简单解释一下,上面的内容是先创建My Documents和Program Files两个根目录,然后在Program Files下面创建My Projects,Accessories和Communication三个子目录,然后拷贝被定义在Windows目录下的存在于ROM中的Myproj.exe文件到My Projects目录下面,且名字为My Project Program。这里需要说明的一点就是,像Myproj.exe这样的文件都是从ROM中拷贝出来的,所以必须在BIB文件中包含了该文件。最后一行意思是在根路径下创建control.lnk,该文件来自ROM中的control.lnk文件,是一个快捷方式文件。对上面的一些格式做个解释;

1.    Root Directory的语法格式

root:[-Directory("dir_name")] [-Permdir("dir_name")]

[-File("target_filename", "source_location")]

root:表示根目录。

-Directory(“dir_name”):定义根目录下的目录名。

-Permdir(“dir_name”):定义一个永久的目录,用户是不能通过RemoveDirectory函数删除的。

-File(" target_filename", " source_location"):定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。

2.    Directory的语法格式:

Directory("dir_name"):[-Directory("dir_name")]

[-File("target_filename", "source_location")]

Directory(“dir_name”):表示目录名。”\”表示根目录。

-Directory(“dir_name”):表示目录下的路径,就是子目录。

-File(" target_filename", " source_location"):定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。

DAT中所使用的语法定义比较简单,看看例子就知道如何修改了,一般我们会通过修改project.dat和platform.dat来改变WinCE启动后的文件路径结构。其中platform.dat是和平台相关的,而project.dat是和WinCE工程相关的。

1.1.3    Config.bib文件

Config.bib文件是BSP中一个重要的内存,他用于指定CPU内存分配,先来看看OAMPL138该部分内容是怎么安排,如程序清单 0.3所示。

程序清单 0.3 CONFIG.BIB文件MEMORY部分

MEMORY

    NK                     80000000    02000000    RAMIMAGE

    RAM                   82000000    0173F800    RAM

    DISPLAY                8373F800    00600000    RESERVED

    EMACBUF              83D3F800    000C0000    RESERVED

    ARGS                   83DFF800    00000800    RESERVED

#if defined BSP_DSPLINK

    DSPLINK               83E00000    00200000    RESERVED

    EXTENSIONRAM        84000000    04000000    RESERVED

#else

    EXTENSIONRAM        83E00000    04200000    RESERVED

#endif

简要说明下,在CONFIG.BIB中指定的MEMORY都指的是虚拟内存,如果知道其对应的物理地址,可以参照OEMADDRTAB.INC代码。

在上述的代码中 NK 指定的是Kernel在加载到RAM中存放的地址区域,0x80000000表示的是Kernel的内存起始地址,0x02000000表示的是Kernel的大小,从这里可以看出,内核最大不能超过32MB。

另外一个需要注意的是,在上述代码中ARGS非常重要,它是建立BSP和OS共享参数的区域,一般在BSP中设置的参数都保存在ARGS区域中。如果有需要,在OS启动之后,通过KernelIoControl获取到这段区域,读取其中参数之后进行相关的系统设置。例如在Bootloader启动的过程中,改变了显示屏的参数,则Bootloader将其参数保存在ARGS当中,OS启动之后,LCD驱动获取ARGS区域,解析参数,调整LCD显示屏的设置,这样LCD才能正常显示。

l       小技巧

在 BootLoader 编译的时候,有时候发现nb0文件很难生成,其实就是config.bib 文件未做相关的设置。看看OAMPL138是怎么做,如程序清单 0.4所示,其中的设置参照程序清单 0.3,不做解释。

程序清单 0.4 NB0生成技巧

    ROMSTART=80000000

    ROMWIDTH=32

ROMSIZE=2000000

另外有时候为了提高RAM的利用率,需要将“NK”区域用于加载Kernel剩余部分的内存释放出来给RAM用,达到扩大程序运行内存的目的。看起来不可思议,其实很简单,只需要在Config.bib文件中加入“AutoSize = ON”即可。

1.1.4    Platform.bib文件

该文件包含了和硬件平台相关的文件,以驱动模块为主。该文件还定义这些模块和文件以什么方式被加载到内存中。具体格式如程序清单 0.5所示;

程序清单 0.5 Platform.bib格式

Name  Path      Memory      Type 

  Name:模块的名字,比如一个dll或者exe文件的文件名。

  Path:路径,一般都是WinCE的工程的Release目录。

  Memory:指定该模块被放在哪个区域,一般都是NK区域。

  Type:定义了文件的类型,具体如下表 0‑1所示;

表 0‑1 TYPE类型


类型


描述


S


系统文件。


H


隐藏文件。


R


只压缩模块的资源部分。


C


压缩模块的所有部分。


D


禁止调试。


N


模块是不可信任的。


P


告诉Romimage.exe不需要检查CPU的类型。


K


告诉Romimage.exe必需固定该模块的内核地址。有该标记的模块只能被LoadKernelLibrary函数加载。


X


告诉Romimage.exe对该模块签名。


M


运行时加载整个模块,不要按需分页。


L


告诉Romimage.exe不要分离ROM DLL。

  一般FILES项的Type只支持S,H,N,D几个类型,而MODULES项的Type是都支持的。

  举个例子吧:

  INIT.EXE     %_WINCEROOT%RELEASEINIT.EXE    NK   SH

  MYDLL.DLL   %_WINCEROOT%RELEASEMYDLL.DLL   NK  SHK

  对于BIB文件来说同样支持“条件编译”,我们可以通过设置环境变量来选择性地将某些模块打包到WinCE image中。一般在BSP中,对于一些驱动模块的环境变量我们IF来进行条件判断。而对于WinCE的系统模块来说,一般都是SYSGEN变量,应该使用@CESYSGEN IF来判断。

l       小技巧

通常修改Platform.bib或则Platform.reg文件,都需要系统重新“sysgen”一次,“Sysgen”一次需要耗费比较长的时间,在工作中实在无法忍受。

如此,我们一般采用这种方法来处理。在Platfrom.bib文件同级目录下,建议一个以平台名称命名的bib文件,如OAMPL138.bib,然后在将该文件INCLUDE到Platfrom文件中(如程序清单 0.6所示),需要修改的时候只修改OAMPL138.bib文件,之后Make Run-Time Image即可生效。

程序清单 0.6 INCLUDE

#include "$(_TARGETPLATROOT)\FILES\OAMPL138.bib"

时间: 2024-09-17 03:33:50

Windows CE系统开发,BSP包中的几个常见文件详解的相关文章

基于S3C2410的Windows CE 5.0 BSP移植

基于S3C2410的Windows CE 5.0 BSP移植 摘要  嵌入式开发中一个重要的环节是板级支持包(BSP)的开发,实际开发过程更倾向于移植BSP而不是重新开发BSP.本文先介绍了samsung公司的S3C2410微处理器和嵌入式操作系统Windows CE 5.0 特性,分析BSP结构,在此基础上,通过bootloader, OAL, 触摸屏驱动的移植来具体探讨BSP移植过程.   1 引言 在当今后PC时代,嵌入式系统应用得越来越广泛,嵌入式产品充斥着许多领域,日常生活的手机,MP

移动开发-v4包中的ViewPager与ViewPager有什么不同?

问题描述 v4包中的ViewPager与ViewPager有什么不同? 开发-v4包中的ViewPager与ViewPager有什么不同?-viewpager不用v4包"> 两种ViewPager,第二种在用的时候,这样添加进xml里就会闪退.网上找到的都是v4的ViewPager,也不知道第二种怎么用 请问第二种非v4包中的ViewPager怎么用?有什么特殊吗 解决方案 v4是低版本兼容包 如果是低版本,没有viewpager就需要引入v4包 Android Support v4 是最

IOS开发中NSURL的基本操作及用法详解_IOS

NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便. 1.URL URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL可能包含远程服务器上的资源的位置,本地磁盘上的文件的路径,甚

windows系统下node.js环境配置与安装教程图文详解(详细版)_win服务器

国内目前关注最高,维护最好的一个关于nodejs的网站应该是http://www.cnodejs.org/ windows系统下简单nodejs环境配置. 第一步:下载安装文件 下载地址:官网https://nodejs.org/en/download/ 这里用的是 第二步:安装nodejs 下载完成之后,双击 node-v6.9.1-x64.msi,开始安装nodejs,默认是安装在C:\Program Files\nodejs下面 第三步:安装相关环境 打开C:\Program Files\

用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

原文:用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解                  关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版---------------------------------------------------------     基于 官方原版的安装包 +

Android开发时在模拟器之间短信的收发详解教程

本文通过运行两个Android模拟器,介绍在Android中如何实现短信服务(SMS,short message service)的功能.通过这个例子,我想带给大家的是:更加熟悉之前介绍过的Android应用程序的概念及技术细节,且通过实例调度大家的兴趣.我之所以选择SMS为例子,主要原因是SMS已经非常成熟了,从中可以发掘更多的信息和技术细节,而且我相信大部分人发短信比打电话多. 1.温故知新 广播接收者:一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应.许多广播源

Android中asset和raw的区别详解_Android

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到 R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 *读取文件资源

Android 中Manifest.xml文件详解

Android 中Manifest.xml文件详解 每一个Android项目都包含一个清单(Manifest)文件--AndroidManifest.xml,它存储在项目层次中的最底层.清单可以定义应用程序及其组件的结构和元数据. 它包含了组成应用程序的每一个组件(活动.服务.内容提供器和广播接收器)的节点,并使用Intent过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的. 它还提供了各种属性来详细地说明应用程序的元数据(如它的图标或者主题)以及额外的可用来进行安全设置和单

Android中asset和raw的区别详解

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到 R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 *读取文件资源