例如: 在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调试编译环境较差,也不利于程序的编译调试。
BSP(Board Support Package),板级支持包,也称为硬件抽象层HAL或者中间层。
它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。
BSP是相对于 *** 作系统而言的,不同的 *** 作系统有不同定义形式的BSP,要求BSP所实现的功能也有所不同。
在嵌入式Linux系统中,主要是初始化底层硬件并引导 *** 作系统;同时,BSP又是和硬件相关的,还要考虑对硬件的初始化 *** 作。这些初始化 *** 作主要是对CPU、内存、中断等相关的寄存器及协处理器进行正确的配置。
在不同的开发阶段,因为核心和文件系统所处的位置不同,BSP所要完成的工 作也有所不同;在开发调试阶段,BSP要能够与主机通信并从主机下载核心;在目标产品中,BSP要能够从非易失存储设备中加载核心。
扩展资料
BSP有两个特点:硬件相关性和 *** 作系统相关性。
设计一个完整的BSP需要完成两部分工作:
A、 嵌入式系统的硬件初始化和BSP功能。
片级初始化:纯硬件的初始化过程,把嵌入式微处理器从上电的默认状态逐步设置成系统所要求的工作状态。
板级初始化:包含软硬件两部分在内的初始化过程,为随后的系统初始化和应用程序建立硬件和软件的运行环境。
系统级初始化:以软件为主的初始化过程,进行 *** 作系统的初始化。
B、 设计硬件相关的设备驱动。
简单点说Linux BSP开发就是把Linux在某个板子上跑起来。这个板子不一定是ARM的,可能是任何一个arch的,比如PPC/MIPS,甚至x86也可以算上,还有一些比较少见的像SPARC/ColdFire之类的。
题主可能比较疑惑BSP应该开发到什么程度是吧?也就是说要把Linux跑到什么程度?是有个串口能跑shell就可以了?还是网络、USB什么的都要全弄起来?
据我了解(我隔壁就是BSP Team),跑到什么程度,看公司(客户、老板)的开发要求,同时也看公司有没有上层的开发人员专门管这些事情。
比如,你这个板子只用在很简单的环境里,网络、USB都不需要,那么串口能起来就基本可以了。但是如果恰好客户有要求网络必须是OK的,那做BSP的人一般就要把网络也调通,如果客户要求USB能用,那么做BSP的人可能也要弄USB。
实际开发过程中,BSP开发的边界在哪,看老板、客户的要求。
一般来说开发流程,初始化CPU、内存这些是第一步,然后是串口、shell、文件系统也要起来,然后就是根据需求是否要调一些基本的驱动了。
我见过有些板子,客户只要最基本的东西,这种BSP开发很轻松,但是有些板子,连USB-OTG都要起来,那么开发BSP的人就很苦逼,因为USB-OTG太难搞了,但没办法,只能硬着头皮去学、去搞。
BSP开发的边界就是没边界,当然,有些公司比较好,会专门招几个驱动工程师,这种公司里,开发BSP的人会稍微轻松点,搞不定的就丢给写驱动的人了——就是我这样的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)