对BSP的了解学习资料

转载 2008年04月28日 15:13:00
BSP知识

第一章 BSP常识
第一节 BSP的功能
1. Initialization:
2. Driver:
举例:
   BEGIN
Rc;     命令
     FOR
       IF(Rs==Ready)
         memory;Rd
         Break;
       ELSE
         wkafter();
     END FOR
   END
第二节 怎样理解BSP
分析BSP可以从两个角度出发:
1. BSP在宿主机上由什麽函数和文件组成,以及目录情况
2. BSP在目标机上是以什麽逻辑执行的
第二章 BSP的函数与文件
第一节  BSP的文件构成
VxWorks的BSP组成文件主要包含在四个目录下:
  Tornado/target/config/all :所有BSP的公共部分
  Tornado/target/config/comps/vxworks :基本模块描述文件(*.cdf)
  Tornado/target/config/comps/src :模块配置文件(被usrConfig.c使用)
  Tornado/target/config/bspname :与目标板相关的部分
 
下面分别介绍这两个目录下的文件:
1. config/all:在该目录下主要有如下几个文件
bootConfig.c :是所有Boot Rom的主要初始化与控制文件。BootConfig.c是usrConfig.c的一个子集,所以Boot Image只能提供完整VxWorks Image中的部分功能。Boot Image不使用MMU库(SPARC除外)。在集成环境下修改工程相关的配置信息不会影响Boot Image,只有直接修改config.h,configAll.h,bootConfig.c和bootInit.c文件才会影响到Boot Image;
bootInit.c:定义了romStart()函数,用于Boot Rom的第二阶段初始化。首先把text和data段从ROM拷到RAM中,然后初始化部分RAM,进行解压;
usrConfig.c:包含VxWorks Image的主要初始化代码。使用命令行编译时才会用到此文件;
2. config/bspname:在该目录下主要有如下几个文件
makefile: 用于命令行下编译。其中定义了一些宏,如:ROM_TEXT_ADRS,ROM_WARM_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS;
config.h:包含所有的头文件和与CPU相关的宏定义,如:对Cache和MMU的配置,RAM和ROM的定位以及大小配置,外部总线地址映射,PCI地址宏;
romInit.s:该文件包含Boot Rom和Rom-based VxWorks Image的初始化入口汇编代码,即实现了romInit()。目标板一上电就开始执行romInit(),主要完成三部分工作:
(1) 屏蔽中断,初始化CPU;
(2) 配置内存系统,通常包括关闭cache,初始化内存控制器;
(3) 初始化堆栈指针和其它寄存器以执行C语言,然后调用romStart().
Note:romInit()函数必须设计成与内存地址无关的代码(PIC),romInit.s只执行一些必要的初始化,其余的初始化工作可放到sysHwInit()中实现。
sysALib.s:包含目标板或系统相关的汇编语言函数,即实现了_sysInit()。这是Boot Rom起来以后执行的第一段代码,sysALib.s类似于romInit.s完成的工作,但它不必设计成PIC,且可调用其它库中的函数。
sysLib.c:包含目标板或系统相关的C语言函数,该文件提供板级接口,通过该接口,VxWorks和应用程序的实现与目标系统无关,sysLib.c包含src/drv目录下的驱动程序子文件,驱动程序的安装和初始化在子文件中完成。
sysSerial.c:串口驱动程序的安装和初始化。
sysNet.c:网络接口设备的安装和初始化。
bspname.h:包含与板子相关的宏定义。若要把src/drv下的某驱动程序移植到目标板上,必须在bspname.h文件开始包含目录target/h/drv下该驱动程序相对应的头文件。
bspname.h应该定义:中断向量或中断号;I/O设备地址;设备寄存器位的含义定义;系统时钟和辅助时钟最大和最小时钟速率。
第二节 BSP的函数构成
sysLib.c中应该实现一下几类函数:
1. 系统时钟中断相关的函数:sysClkConnect(),sysClkDisable(),sysClkEnable(),
sysClkInt(),sysClkRateGet(),sysClkRateSet();
2. 系统硬件初始化函数:sysHwInit(),sysHwInit2()
3. 内存相关的函数:sysMemTop(),sysNvRamGet(),sysNvRamSet()
4. 串口相关的函数:sysSerialHwInit(),sysSerialHwInit2(),sysSerialChanGet()
5. 杂项函数:sysBspRev(),sysModel(),sysToMonitor()
6. 其它可选函数:如:辅助时钟中断相关函数,总线相关函数
第三章 BSP的执行逻辑
第一节 Init的逻辑
1. Boot Init逻辑:
 


2. Driver Init的时机可以有两处:



在sysHwInit()的开始处,这些被初始化的设备是系统或调试所依赖的,我们称为“近设备”,例如串口、时钟;在用户应用程序内被初始化的设备是依赖于操作系统的,我们成为“远设备”,例如在driver中需要使用信号量。
第二节 Driver的执行逻辑
3.2.1 Driver的层次结构
1. 任务与VxWorks的接口:
•fd =open (filename, flags, mode)
•fd=creat (filename, flags)
•read (fd, &buf, nBytes)
•write (fd, &buf, nBytes)
•ioctl (fd, command, arg)
•close (fd)
•remove (filename)
2. 驱动程序表:(I/O System Driver Table: iosDrvShow())
   


设备表:(Devs List: devs())

 


文件描述符表(File Descriptor Table):iosFdShow()
                    Driver #                   Device ID
                   (Index in driver table)     (Driver dependent value)
 
 
 
 
 
          1
           2
           3
           4
           5

3. Driver的操作规整,参数规整和I/O管理:
xxOpen(pDevHdr, pName, flags, mode):返回设备Id号;
xxClose(deviceId)
xxRead(deviceId, pBuf, nBytes)
xxWrite(deviceId, pBuf, nBytes)
xxIoctl(deviceId, cmd, arg)
xxDrv(args,…):iosDrvInstall (xxCreat, xxDelete, xxOpen,xxClose, xxRead, xxWrite, xxIoctl) 往I/O系统驱动程序表添加Driver。xxDrv()在设备初始化阶段被调用,而且只能调用一次,输入参数是设备相关的;
xxDevCreate(devName,arg,…) :为设备描述结构分配内存,执行设备相关的初始化,调用iosDevAdd(pDevHdr,devName,drvNum)往设备列表内添加设备描述符,并用设备名字(drvName)和驱动程序号(drvNum)初始化DEV_HDR;
                                                 
 
3.2.2 driver的多任务运行环境
    我们按照上面的driver的抽象层次构造的driver并不完善,因为实时软件运行的是多任务,在常规操作层与上面两层之间还需要构造一个driver的多任务运行环境,通过三个角度来考虑该问题。
1. Driver的地位:driver是被任务调用的子函数,所以driver的prority和mode都继承了调用driver的任务的
2. Driver的继承地位与实际地位不符
BEGIN
   get tid pro/mode
   store tid pro/mode
   modify tid pro/mode
       process
   restore tid pro/mode
END
3. Driver的手动保护:对于临界设备的驱动程序需要手动地保护,这个保护可以加在driver中,也可以加在系统调用体内,但以加在driver内为宜,例如打印机就是一个临界设备,我们需要构造如下程序
PrintInit()
{……
semBCreate
……
}
PrintWrite()
{semTake
……
semGive
}
    通过上面的例子我们看到有些driver要依赖于操作系统,所以初始化要在系统起来以后进行。
3.2.3 中断与driver的耦合方式
1. 同步driver:类似于C语言的getchar()


2. 异步driver:



类似于C语言的bioskey(),举一个游戏的例子:

3.2.4 task与driver的耦合方式
1. 任务主动“读”:
2. 任务被动“读”:来源于网络client/server的应用,在server端启动一个“deamon task”,该任务一般优先级比较高,高于根任务,平时在阻塞态。

第四章 BSP的工程
第一节 BSP的调试
1. ICE、BDM方式:
2. “黑”调:方法是加“灯”、用示波器测片选等,目的是打通串口,达到宿主机与目标机的通信
3. “黑”调的工程步骤:

第二节 Serial driver
1. Serial的地位:

2. Driver的实现:由于串口的地位比较复杂、组织比较奇特,driver有那麽多接口,所以driver的实现很复杂。Driver有两种实现方式:查询方式和中断方式。

Unity3d第一人称游戏项目实战(内附配套学习资料)

-
  • 1970年01月01日 08:00

对BSP的了解学习资料

BSP知识第一章 BSP常识第一节 BSP的功能1. Initialization:2. Driver:举例:   BEGINRc;     命令     FOR       IF(Rs==Read...
  • xumercury
  • xumercury
  • 2008-04-28 15:13:00
  • 1919

Xilinx zynq的资料获取总结

Xilinx zynq zc702开发: 一、zynq开发整个生态系统搭建: 1.基础资料获取: https://github.com/Xilinx/           (包括:交叉...
  • wordwarwordwar
  • wordwarwordwar
  • 2017-10-01 23:09:44
  • 767

I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之根文件系统挂载

经过前面的移植,新版BSP的uboot和kernel已经能够在tqimx6q开发板上运行了,接下来我们来挂载文件系统。 DTB整理 前面的文章中提到,新版BSP的DTB管理感觉不是太好,在之前移植的B...
  • girlkoo
  • girlkoo
  • 2015-05-04 00:03:27
  • 9286

新塘N76E003V20单片机<em>学习资料</em>

新塘N76E003V20单片机<em>学习资料</em> 综合评分:0 收藏评论举报 所需: 5积分/C币 ...nuvoton N76E003 <em>BSP</em> Keil_C51 立即下载 上传者: 止沉 时间: 2018-02-03 ...
  • 2018年04月08日 00:00

新唐N76E003<em>资料</em>以及库文件

nuvoton N76E003 <em>BSP</em> Keil_C51 立即下载 上传者: 止沉 时间: 2018-02-03 综合评分: 5 积分/C币:3 新塘N76E003V20单片机<em>学习资料</em> 立即下载 上传者: CaTv...
  • 2018年04月07日 00:00

第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列

第48章     MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku...
  • flyleaf91
  • flyleaf91
  • 2016-08-26 09:52:39
  • 3017

SAP CRM 开发学习资料和教程整理

首先是SAP网站上面的相关内容 SAP Customer Relationship Management:SAP的帮助中心,里面的内容比较全面 CRM Books:相关书籍,我没有看过,因为看起来...
  • aiwuzhi12
  • aiwuzhi12
  • 2017-01-28 23:33:08
  • 1219

CRM开发要点(一)

从本文开始陆续整理下CRM的开发要点。 CRM的UI基本框架如下图所示。 A顶部标题区域;B左侧导航区域;C中间工作区域。 AB连在一起SAP称为L形区域,这一块的内容是由系统管理的,用户基本不能...
  • fanchacha
  • fanchacha
  • 2016-05-04 10:29:31
  • 2779

python学习之相关资料列表

http://www.scipy.org/topical-software.html#head-cf472934357fda4558aafdf558a977c4d59baecb Th...
  • wangeen
  • wangeen
  • 2014-02-11 16:15:27
  • 3930
收藏助手
不良信息举报
您举报文章:对BSP的了解学习资料
举报原因:
原因补充:

(最多只允许输入30个字)