博文

BSP 概念解析(2009-03-19 11:29:00)

摘要:Drew在这里按照自己的理解来解释一下BSP( Board Support Package),仅供参考:

BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。

例如:

在VxWorks中的网卡驱动,首先在config.h中包含该网卡,然后将网卡含网卡的信息的参数放入数组 END_TBL_ENTRY endDevTbl [] 中,系统通过函数muxDevLoad( )调用这个数组来安装网卡驱动。

而在Linux中的网卡驱动,是在space.c中声明该网络设备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。


纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

Tornado中BSP的编译和上层应用程序不同,用命令行或直接在Tornado环境下Build,在Tornado下不能跟踪调试。

用户也可以添加自己的程序到BSP中,但严格来说不应该算BSP.一般来说这种做法不建议。因为一旦操作系统能良好运行于最终的主板硬件后,BSP也就固定了,不需要做任何改动。而用户自己在BSP中的程序还会不断的升级更新,这样势必对BSP有不好的影响,对系统造成影响,同时由于BSP调试编译环境较差,也不利于程序的编译调试。

上层程序

Tools - Applications
--------------
I/O System
VxWorks Libraries
TCP/IP 
Wind Kernel

BSP
--......

阅读全文(3481) | 评论:0

嵌入式系统中的CACHE问题(2009-03-19 11:11:00)

摘要:随着社会的发展、人们生活水平的提高,人们对嵌入式计算机应用的要求也越来越高。因此,对嵌入式系统的性能要求也越来越高。明显体现在嵌入式系统的CPU速度的不断提高上。但问题也随之而来,嵌入式CPU的主频不断地提高,一方面加强了CPU的处理能力,另一方面,在速度上造成了与慢速的系统存储器极不相配的情况,从而影响了整个系统的性能。
为了解决这个问题,引入了CACHE技术。CACHE是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。通过在主存和高速CPU之间设置一个小容量的高速存储器,在其中存放CPU常用的指令和数据,CPU对存储器的访问主要体现在对SRAM的存取,CPU可以不必加等待状态而保持高速操作。   采用CACHE技术,解决了CPU与主存之间速度不匹配的问题;但它又带来了一些其它问题,如本文将提到的一致性问题。 1 问题的发现与原因 在进行某嵌入式系统项目的开发过程中,有一个环节需要使用DMA方式进行数据传输。当程序运行后,发现传到目的地的数据块中经常会有一些错误的字节。如:数据本应为00 01 02 03 04 05 06 07 08 09 0A 0B ...(16进制),结果却是00 01 02 03 00 00 00 00 08 09 0A 0B ...。在某些环节也出现了类似的问题。例如,通过HDLC通道向外发送数据,发送的总是缓冲区初始化时的内容,实际要发送的数据总是发不出去,但使用调试工具看内存中的数据,却是正确的。 经过一段时间的调试,发现出现这种现象的环节都使用了DMA传输数据。在通过HDLC通道发送数据的例子中,HDLC通道内部也是用DMA方式从内存直接读数据并向外发送。经过分析,认为问题的原因是出在CACHE上,是由于CACHE数据与内存数据的不一致性造成的。 所谓CACHE数据与内存数据的不一致性,是指:在采用CACHE的系统中,同样一个数据可能既存在于CACHE中,也存在于主存中,数据一样则具有一致性,数据若不一样就叫做不一致性。具体表现在两个方面: (1)更新时可能CACHE中的数据更新,而主存未更新,则造成数据丢失; (2)在有DMA控制器的系统和多处理器系统中,有多个部件可以访问主存。这时,可能其中有些部件是直接访问主存,也可能每个DMA部件和处理器配置一个CACHE。这样......

阅读全文(2118) | 评论:0

基于32位嵌入式系统的实时图像采集模块(2009-03-10 14:10:00)

摘要:1 32位嵌入式系统及其应用现状 1.1 32位嵌入式系统概述 嵌入式系统是后PC时代的主导,当低端的嵌入式系统无法满足信息化、智能化、网络化时代的更高要求时,32位嵌入式系统应运而生。32位嵌入式系统是电脑硬件与软件的有机结合。嵌入式设计的目的在于满足某种特殊的功能。嵌入式系统的大体构架可分为五部分:处理器、内存、输入与输出、操作系统与应用软件。32位嵌入式系统可分为硬件和软件两个平台。硬件平台的设计包括处理器电路、网络功能、无线通信及使用接口等的设计。嵌入式软件为信息、通信网络或消费性电子产品等系统中的必备软件,为硬件产品的驱动程序、控制处理和基本接口功能服务,以提高硬件产品的价值。嵌入式软件为该硬件产品不可缺少的重要组成部分。

1.2 32位嵌入式系统的应用现状目前大多数视频图像采集采用摄像头传感器,再通过视霸卡或实时图像采集(压缩)卡对视频图像进行采集(或压缩)后送入计算机进行处理。由于摄像机的输出已转换成模拟NTSC或PAL制式并以Svideo或混合视频信号方式输出,且摄像头传感器的象素点在输出时序上很难与采集卡的采样点一一对应,因此视频图像数字化后图像质量损失较大,图像分辨率上限受限式限制。另外,这种方法存在系统成本高、结构复杂等局限性,不便于推广和普及应用。为此,最新出现了采用先进摄像技术的图像采集卡,极大地改善了图像质量损失较大、成本高、不便于推广等缺点。这类先进摄像技术(如CMOS摄像技术)的采集卡的突出优点是占用计算机资源少,数据传输速率较高,通用性好。例如采用USB接口的摄像头在一定程度上满足了实时性要求,突出了采样速率高、图像质量高、通用性好的特点。但采用这种技术的图像采集卡必须具有压缩处理,且图像大小受限制,成本随之提高。为此,本文以OmmVision公司的OV6630芯片为例,提高一种新的基于32位嵌入式系统ISA总线接口的实时图像采集技术,旨在充分利用其快速、图像质量高、成本低和通用性好的优点。其中,VSYNV为场同步输出脉冲,HREF为行同步输出信号,PCLK是用来锁存有效数据的时钟(当系统时钟为17.73MHz时,PCLK为8.86MHz),即象素时钟,Y[7:0]是8位亮度数据总线,UV[7:0]为8位色度数据总线。本设计是基于32位嵌入式系统的实时图像采集,其突出的优点是:图像质量无损、实时性强、接口电路简单、......

阅读全文(2692) | 评论:0

Windows CE下串行通信的实现(2009-03-10 13:59:00)

摘要:1 Windows CE简介 Windows CE是一种小型的、基于ROM的、具有Win32子集API的操作系统。它的优势在于小尺寸、Win32 API子集和对多平台的支持能力。在Windows CE下编程需要注意的是,Windows CE设备的资源很少,存储器、显示器都很小,接口也比较少,而且根据实际情况变化很大。另外,Windows CE只支持Unicode,这在编程中要格外注意。在Windows CE中,除了一些基本的Windows通用控件以外,还有一些专门设计的控件,比如CommandBar。Windows CE体积虽小,但是它的功能并不少,内存管理、文件操作、多线程、网络功能等等它都支持,可以说是麻雀虽小,五脏俱全。 2 Windows CE下的串行通信 串行端口在Windows CE下属于流接口设备,它是串行设备接口的常规I/O驱动程序调用和与通信相关的具体函数的结合。串行设备被视为用于打开、关闭、读写串行端口的常规、可安装的流设备。Windows CE的通信函数和其它大多数Windows的通信函数相同。特别要注意的是,Windows CE不支持直接对串行端口的寄存器进行编程。常用的串行端口函数介绍如下: (1)打开和关闭串行端口 CreateFile函数用于打开串行口。 hPort=CreateFile(TEXT(“COM1:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)。注意COM1后要有一个冒号。最后一个参数dwFlagsAndAttributes必须为0,因为Windows CE只支持非重叠I/O。第3个参数dwShareMode也必须为0,通信端口不能像文件一样被共享。这个函数的返回值是已打开的串行端口的句柄或者是INVALID_HANDLE_VALUE。 关闭串行口可以调用CloseHandle(hPort)。 (2)配置串行端口 配置串行口主要是用DCB结构配置端口设置,包括波特率、停止位、数据位长度、校验位、流量控制等等,还有配置超时值。 首先打开串行端口,用GetCommState函数获得当前打开串口配置,然后根据需要修改DCB成员,最后用SetCommState函数设置新的串口配置。 DCB PortDCB; /创建DCB变量 Port.DC......

阅读全文(2174) | 评论:0

一种嵌入式系统的内存分配方案(2009-03-03 17:03:00)

摘要:摘要:实时性、可靠性的要求,使得许多嵌入式应用使用自己的内存管理程序。本文探讨嵌入式系统中对内存管理的要求、存在的问题以及可能的解决策略;介绍一种“一次分配,多次使用”的动态内存分配方法,并给出2个例子。 关键词:嵌入式系统 内存管理 一次分配多次使用 1 嵌入式系统中对内存分配的要求 ①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。也就是内存分配的请求必须得到满足,如果分配失败可能会带来灾难性的后果。嵌入式系统应用的环境千变万化,其中有一些是对可靠性要求极高的。比如,汽车的自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能相应的操作,就会发生车毁人亡的事故,这是不能容忍的。 ③高效性。内存分配要尽可能地少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得无限大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统有限的空间和有限的板面积决定了可配置的内存容量是很限的。 2 静态分配与动态分配 究竟应用使用静态分配还是动态分配,一直是嵌入式系统设计中一个争论不休的总是。当然,最合适的答案是对于不同的系统采用不同的方案。如果是系统对于实时性和可靠性的要求极高(硬实时系统),不能容忍一点延时或者一次分配失败,当然需要采用静态分配方案,也就是在程序编译时所需要的内存都已经分配好了。例如,火星探测器上面的嵌入式系统就必须采用静态分配的方案。另外,WindRiver公司的一款专门用于汽车电子和工业自动化领域的实时操作系统OSEKWorks中就不支持内存的动态分配。在这样的应用场合,成本不支持内存的动态分配。在这样的应用场合,成本不是优先考虑的对象,实时性和可靠性才是必须保证的。当然,采用静态分配一个不可避免的总是就是系统失去了灵活性,必须在设计阶段就预先知道所需要的内存并对之作出分配;必须在设计阶段就预先考虑到所有可能的情况,因为一旦出现没有考虑到的情况,系统就无法处理。这样的分配方案必须导致很大的浪费,因为内......

阅读全文(2273) | 评论:0

三种嵌入式操作系统的分析与比较(2009-03-03 16:58:00)

摘要:摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 关键词:嵌入式系统 嵌入式操作系统 Palm OS Windows CE Linux 1 嵌入式系统与嵌入式操作系统 1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力 ;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 1.2 嵌入式操作系统 嵌入式操作系统EOS(Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度作,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而方的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下特点: ①可装卸性。开放性、可伸缩性的体系结构。 ②强实时性。EOS实时性一般较强,可用于各种设备控制当中。 ③统一的接口。提供各种设备驱动接口。 ④操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。 ⑤提供强大的网络功能,支持TCP/IP协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。 ⑥强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预......

阅读全文(2393) | 评论:0

Windows CE开发初步(2009-03-03 16:55:00)

摘要:[转帖]Windows CE开发初步
许多开发人员都尝试了基于无线装置的软件编程,然而这些思想达于成功的关键之处在于他们能否深入了解Windows CE的功能和缺点。本文就此介绍了Windows CE的一些基本特性,并指出过渡到基于无线装置的软件开发所应具备的知识。 开始 Windows CE操作系统支持很多特性,并能被很多一系列不同的CPU编译。她支持多线程,包含多种可选择的GUI。诸如她的堂兄弟一样,Windows CE也具有台式计算机操作系统的特性,所以开发人员无需花太多的时间就可以很容易地进行基于Windows CE的软件开发。 在这一小节中,我们关注的是如何在基于Windows CE的Pocket PC和Pocket PC2002平台的开发。这两个平台都是通过Windows CE3.0实现的。微软也发布了一套新式的Windows CE版本,即Windows CE.NET,也就是常说的Windows CE4.0。 Pocket PC2002对象平台需要下载一套新SDK,但她集成在eMbedded Tools 3.0软件中,当编写代码时和使用Pocket PC很类似,但是她还有以下几方面的改进。 1.通讯改进 新的连接管理器
支持对象交换(OBEX) 电话API 2.可用性改进 新的消息响应系统 当前屏幕外壳 敏锐的最小化特色 3.网络浏览器的新特性 4.新的HTML控件基于Windows CE的Pocket PC平台的开发
为了在Windows CE3.0系统中进行开发,你必需下载微软的eMbedded Tools 3.0软件,这一套软件包含了eMbedded Visual C 3.0和 eMbedded Visual Basic 3.0,同时她也提供了基于Pocket PC、掌上PC、变携式PC的所有SDK。Visual C 和Visual Basic都是独立的,如果你想进行特定对象平台的开发,就要下载Pocket PC2002的额外SDK。 所有的SDK都附带仿真器,你可以利用这一仿真器在台式PC机中进行模拟试验。无需一个对象Pocket PC系统,你就可以在Pocket PC或Pocket PC2002上进行开发。你所需要的是eMbedded Visua......

阅读全文(3296) | 评论:0

VMware下Linux的安装及简单设置(2009-03-03 16:51:00)

摘要:当你听别人说起Linux、FreeBSD甚至OS2等等新奇的操作系统时,是不是也想尝试看看?但是当听到需要重新切割硬盘,原有数据还有可能丢失时,是否又有些犹豫?当初我也是在Linux的门外彷徨很久,直到我找到了VMware。因为它既保证了Linux能正确安装且正常运行,又不破坏原来的操作系统,为我们除去了费心研究如何把硬盘分区分得合理和高效的苦恼。下面,我给大家介绍一下怎样用这款软件来安装Linux。 一、VMware的安装及配置 简单地说,VMware就是一款虚拟机软件,它可以在你现有的操作系统上虚拟出一个新的子机。这个子机一方面建立在你正在运行的操作系统之上,同时,它又拥有自己独立的CPU、硬盘、内存及各种硬件。当然,这些都是虚拟出来的。值得一提的是虚拟的硬盘其实就是母机上的一个文件,你可以随意地对其进行分区、格式化、安装操作系统等操作而不会对原有的系统产生任何影响。虚拟子机所使用的内存大小、硬盘容量大小等都可以根据你的需要进行调整。 1.VMware的下载及安装 你可以从许多软件下载网站得到VMware的安装程序。在此,我推荐以下两个网址: (1)VMware的大本营www.VMware.com (2)中国虚拟机论坛www.VWware.cn 注意: 安装程序有for Windows和for Linux之分,请下载正确的版本。我的主机是Windows2000 Server,下载的安装程序是VMware-work-Station一4.5.2—8848.exe。 VMware的安装很简单,需要提醒大家的是:安装VMware之后,必须先到VMware的网站填写资料以取得30天的试用注册码。30天后如果你不想购买正式版的注册码,那就只好再去登录VMware的网站索取下一个月的序列号。 启动VMware后,其主界面如图1。 2.VMware的配置 VMware安装完毕后,利用它可以建立多个虚拟机,每新建一个虚拟机,就会要求你建立一个配置文件。这个配置文件实际上相当于新电脑的“硬件配置”,你可以在配置文件中决定虚拟机的硬盘如何配置,内存多大.准备运行哪种操作系统,是否有网络等。配置Linux虚拟机的步骤如下。 (1)选择File菜单下的“New Virtual Machine”出现新虚拟机向导后单击“下一步”,选择“Typical”典型安装。 ......

阅读全文(3042) | 评论:0

LINUX根文件系统的目录树(2009-03-03 16:47:00)

摘要:目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。

每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏系统、恢复备份等的工具。

/usr 文件系统包含所有命令、库、man页和其他一般操作中所需的不改变的文件。 /usr 不应该有一般使用中要修改的文件。这样允许此文件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr 很容易是数百兆),且易于管理(当升级应用时,只有主/usr 需要改变,而无须改变每台机器) 即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损坏。

/var 文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的), log文件、formatted manual pages和暂存文件。传统上/var 的所有东西曾在 /usr 下的某个地方,但这样/usr 就不可能只读安装了。

/home 文件系统包含用户家目录,即系统上的所有实际数据。一个大的/home 可能要分为若干文件系统,需要在/home 下加一级名字,如/home/students 、/home/staff 等。

虽然上面将不同的部分称为文件系统,但它们不必是真的分离的文件系统。如果系统是小的单用户系统,而用户希望简单化,可以很容易地放在一个文件系统中。根据磁盘容量和不同目的所需分配的空间,目录树也可以分到不同的文件系统中。重要的是使用标准的名字,即使/var 和/usr 在同一分区上,名字/usr/lib/libc.a 和/var/adm/messages 必须能工作,例如将/var 下的文件移动到/usr/var ,并将/var 作为/usr/var 的符号连接。

Unix文件结构根据目的来分组文件,即所有的命令在一个地方,所有的数据在另一个地方,所有的文档又在一个地方,等等。另一个方法是根据属于的程序分组文件,即所有Emacs文件在一个目录中,所有TeX文件在另一个中,等等。后一种方法的问题是文件难于共享(程序目录经常同时包含静态可共享的......

阅读全文(2652) | 评论:0

Linux的启动和核心介绍(2009-02-26 15:07:00)

摘要:前几天大家对Linux的启动有些讨论。
  于是整理了一下前段时间与他人交流的提纲,希望起到抛砖引玉的作用。
  Xiaoman04@hotmail.com
  这是一次对Linux介绍后的整理。
  对象是一些刚对Linux核心感兴趣,并且准备进一步研究和改造的同志。
  因为是由提纲整理而成,有些乱,见谅!
   
  四部分内容:
  一、Linux核心源码结构介绍
  二、编译和配置的过程
  三、系统启动顺序的相关文件
  四、核心改造的一些经验
  一、
  当我们安装好一个Linux系统,通常核心源码存放在/usr/src/linux/目录。
  下面先看看这目录下的各个子目录及文件。
  [/]#cd /usr/src/linux
  [linux]#ls -aF
  ./ MAINTAINERS drivers/ kernel/ scripts/
  ../ Makefile fs/ lib/
  COPYING README include/ mm/
  CREDITS Rules.make init/ modules/
  Documentation/ arch/ ipc/ net/
  下面我们逐一描述:
  COPYING
  GPL版权申明,看后你至少应该知道,你对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务。其中之一就是公开源代码。 bitsCN#com中国网管联盟
  CREDITS
  光荣榜,你应当感谢的一些人的信息,其中的每一个人都对Linux做出过很大贡献。
  Documentation/
  文档目录,可有选择地看一下你感兴趣的部分
  MAINTAINERS
  维护人员列表,对当前版本的内核各部分都有谁负责,如果你研究的够深入,可以与他们讨论
  Makefile
  如果你在UNIX编译过程序,可以看明白README,Linus 所写,核心及其编译配置方法简单介绍Rules.make: make时使用的一些共同规则

阅读全文(2056) | 评论:0