历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2018年02月09日 | 基于网络加载的BootLoader整套设计与解决方案

2018-02-09 来源:eefocus

    由于嵌入式系统引导装载程序(BootLoader)的网络加载方式在产品开发初期阶段的广泛应用,因此基于网络的BootLoader设计与实现具有较强的实际意义。提出了基于网络加载的BootLoader整套设计与解决方案,并将该方案应用到实际产品DVB—C中。最后,通过BootLoad er引导装载过程的测试与分析,验证该方案的可行性与高效性。


    嵌入式系统从软件结构层次的角度来看,一般由引导装载程序(BootLoader,BSP)、操作系统和应用程序几部分组成。然而在有的嵌入式系统中,操作系统和应用程序存放在系统以外的设备中,如网络、硬盘等,整个系统只有引导装载程序。因此BootLoader是嵌入式系统设计中比较重要的一部分。

    在嵌入式系统的引导中,按照应用程序存放位置,可以有3种不同的加载方式:固态存储媒体、磁盘以及网络,每种方式都会有自己特有的配置和用法。3种设置方式各有其优缺点,固态储存媒体启动方式一般适用于带有ROM/FLASH的嵌入式系统中,是大多数嵌入式设备的首选方案如手机,MP3等,但当应用程序较大的情况下,为了降低嵌入式设备的单价,磁盘启动方式也被大量使用,典型应用如SDH电信传输网络设备测试仪ANT-20等,而基于网络加载方式则是最便宜的嵌入式设备的应用方案,应用程序存放在网络服务器端,嵌入式设备启动时,只需要将它通过网络当到内存并运行,一方面可以快速解决应用程序升级问题,另一方面也可以降低嵌入设备的整体成本,且在开发初期这种方式也能大幅提高调试速度,典型的应用如嵌入式设备的瘦客户端。

    1 基于网络加载的BootLoader方案设计

    这种方案重点解决两个问题,一是嵌入式设备加电后启动前与服务器端之间的通信与联系,二是嵌入设备在启动过程中应用程序下载方式的实现。前者需要将嵌入式设备驱动起来,实现通信能力,网卡驱动是必须实现的步骤,后者需要通过相关的协议栈将应用程序下载到系统内存,运行起来。本文重点介始基于UDP/IP协议栈的(DHCP、TFIP、NFS)加载方案设计。

    1.1 BooiLoader中网卡驱动的设计

    网络适配器(网卡)一般由可编程数据链路控制器、曼彻斯特编码/译码器、收发器接口和控制电路等几部分组成,其中可编程数据链路控制器由微处理器和网络管理部分等组成,如图1所示。

c.JPG

    在BootLoader网卡驱动设计中,主要包括3种基本的操作(文中以ReaLTEk8139网卡作为实例进行具体分析):

    1)网卡的初始化

    应完成的工作是初始化网卡中的相关硬件,包括网卡中断向量的设置、网卡接收与发送缓冲区在内存中的映射、网卡数据结构的初始化等。

    2)数据包发送

    发送和发送控制部分负责帧的发送。发送部分接受来自“NBZ曼彻斯特转换器”的曼彻斯特码的数据,并在发送控制部分允许的条件下将数据发送到媒体,发送的数据称为TxD。发送控制部分判定是否进行发送,这种判定基于LAN管理部分和TxD来进行。

    3)数据包的接收

    接收和接收控制部分负责帧的接收。这一部分产生网络是否有载波存在的信号,产生的依据是从RxD中获得。因此,网络上来的信号一方面馈送给接收器,另一方面要馈送给接收控制部分。接收控制部分根据LAN管理部分和媒体上接收的信号判定是否使接收器工作。

    1.2 网络服务器端应用方案的设计

    在网络加载BootLoader中,使用到的应用层协议有DHCP、TFTP和NFS。目标平台在工作中,需要服务器端提供以上协议的服务:

    1)建立服务器端的DHCP服务

    该服务完成的功能是为目标平台提供有效的IP地址分配,保证目标平台与服务器之间正常通信时地址唯一。其配置过程如下:

    在确信DHCP协议已经被正确安装后,需修改/etc/dhcpd.conf文件,例如:

    d.JPG

    其中subnet是目标机与主机共同的子网,netmask是它们的子网掩码。Hardware ethernet是目标机的网络硬件地址,可以通过fixed-address给目标分配一个固定的IP地址,当目标机启动时,就会自己获得这个IP地址。Option host-name是目标机的机器名。当主机与目标机直接连接时,option routers指向主机的地址,当它们不是直接连接,而是通过路由时,option routers的值为真正的routers地址值,同理optionsubnet-mask为option routers网络的子网掩码。Filename为目标机从TFTP服务端下载的文件名,next-server为提供TFTP服务的位置。


    最后请检查/var/state/dhcp/dhcpd.leases文件是否存在,当一切准备好后,就可以运行DHCP服务了:

    #/etc/init.d/dhcpd start

    2)建立服务器端的TFTP服务

    该服务在基于网络的BootLoader下载应用程序时使用,它类似于FTP服务,但它不需要向服务器提供用户名与密码,且其下载速度比FTP要快。其配置过程如下:

    在确信TFTP协议已经被正确安装后,

    ①修改文件/etc/xinetd.conf,打开tftp的支持;

    ②修改文件/etc/xinetd.d/tftp,例如:

    e.JPG

    参数server_args为tftp服务指定的目录,其余参数理解比较容易。

    设置完毕后,请重新启xinetd,运行tap服务。

    3)建立服务器端的NFS服务

    目标平台在Linux运行初始化时,需要借助该服务来挂载根文件系统。其配置过程如下:

    在确定NFS已经正确安装后,请修改文件/etc/exports,例如:

    /home/karim/CTRl—rooffs 192.168.172.10 (rw,no_root_squash)

    其中目录/home/karim/ctrl-rooffs可以修改为服务器端的根文件系统存放的目录。192.168.172.10为服务器端的IP地址。

    修改完成后只需要重新启动NFS服务即可,NFS服务提供网络文件系统功能,便于应用程序的管理与使用。

    1. 3 客户端嵌入式BootLoader的设计

    在基于网络加载的BootLoader系统中,应用程序文件一般被存放在网络服务器。系统启动后,BootLoader需要先驱动网络适配器,并通过UDP/IP协议栈(BOOTP/DHCP、TFTP协议等),将映像文件下载到目标机端的SDRAM运行,当嵌入式linux操作系统初始化时,它借助NFS协议将根文件系统挂载到服务器端。

    在该方案中,BootLoader程序的主要工作步骤如下:

    1)基本硬件的初始化:包括屏蔽所有的中断、初始化所有的硬件、设置/装载系统setup值、设置CPU的时钟和频率、RAM的初始化等;

    2)读取网络参数配置文件:

    该配置文件主要存放系统使用网络过程中需要的一些参数,包括MAC地址、tftp服务器的IP地址、Kernel文件名、应用程序文件名等。

    3)初始化PCI接口,并驱动网卡;

    4)通过DHCP协议获取目标平台的IP地址;

    目标平台先广播发送ARP包,当DHCP服务器接收到该ARP包后,就会根据ARP包中的硬件地址从地址表中分配一个有效的IP地址,并发送应答报文给目标平台。

    5)通过tftp协议下载kernel代码至内存SDRAM;

    6)运行Linux内核和系统应用程序。

    该方案的执行逻辑可以用图2所示。

f.JPG


    2 基于网络加载的BootLoader的应用实现
    本文设计的基于网络加载的嵌入式BootLoader应用于DVB-C电视机顶盒产品中,在DVB-C机顶盒中,一般有网口用于与内容服务器进行交互,如VOD及网页浏览器等功能。其硬件框图组成如图3所示。

h.JPG

    该DVB-C电视机顶盒中,CPU是Sunplus公司生产的32位双核RISC微控制器SPH1003。此外,系统还集成有SEMSung公司的Tuner,其功能是从cable中调制出TS流,其内容为电视节目流及电视节目辅助信息(如EPG,电视图文信息)等。通过电视机顶盒的集成网口可以实现电视机顶盒软件(主要是嵌入式Linux内核,根文件系统及应用程序三个部分)的下载与启动。

    在该DVB—C机顶盒中,BootLoader的装载程序主要是实现从网络下载嵌入式Linux内核并且启动系统。在由BootLoader完成系统的硬件初始化后,程序将会跳转到网络Loader程序中,由它驱动网卡,并启动tftp请求,从网络服务器端通过tftp协议下载指定文件,并运行起来,其软件运行如1.3部分。这种应用可以有效在利用机盒中的网卡网络结构,从而降低机顶盒的整体成本(少去flash/ROM芯片及其周边控制硬件等),同时也有利于及时更新应用程序及嵌入式内核等,实现机顶盒瘦客户端目的和及时维护功能。

    3 BootLoader引导装载过程的测试与分析

    3.1 测试用例设计

    在DVB-C机顶盒引导装载过程的测试中,主要包括单元测试与集成测试两个方面。因此在设计测试用倒时,主要有单元测试用例及集成测试用例。其测试用例设计如表1、表2所示。

i.JPG

a.JPG

    3.2 测试结果分析

    根据上表测试用例的设计,分析结果如下:

    1)在单元测试中,根据每个函数的功能及测试结果要求,分别进行代码覆盖率的测试、参数边界值测试及函数运行结果的测试,其测试结果全都能达到程序要求;

    2)在集成测试中,对网络环境的测试主要集中在:正常的网络环境,运行不正常的网络环境两方面,程序对这两种情况能够正确地识别且做出不同的响应;对不同的目标文件进行了下载测试,分别比较原文件与下载到SDRAM的内容,两者完全一致,且在多次下载测试中成功率达到100%;对DVB-C机顶盒的启动过程及时间进行了专项测试,这项测试是BootLoader引导装载程序最重要的性能测试,其启动过程的成功率达到100%,启动时间大致为1 s。

    4 结束语

    文中介绍的基于网络加载的BootLoader整套设计与解决方案,具有良好的模块结构和可扩展性,为应用于其它系统奠定了基础。同时,在实际产品设计中已大量应用在DVB-C机顶盒中,该DVB-C机顶盒与一般机顶盒相比,节省20元左右,在批量生产中(十万台左右),可实现上百万元的经济效益,因此该方案具有很强的市场竞争力。


推荐阅读

史海拾趣

Anytek Technology Corporation Ltd公司的发展小趣事

随着技术实力的不断提升和市场份额的稳步增长,Anytek在2009年获得了“中国国际高新技术企业”的认定。这一荣誉不仅是对公司技术实力和创新能力的肯定,也为公司的未来发展提供了更广阔的空间和机遇。同年,Anytek还成功进入了俄罗斯政府采购项目,进一步扩大了公司的国际影响力。

ELESTA GmbH公司的发展小趣事

2013年,ELESTA公司更名为ELESTA GmbH,这一品牌重塑标志着公司进入了新的发展阶段。同时,ELESTA也开始实施全球化战略,积极拓展国际市场,通过不断提升产品质量和服务水平,赢得了全球客户的信赖和认可。

Global Specialties公司的发展小趣事

Global Specialties的创立源于对高质量测试与测量产品的追求。在公司成立初期,创始人便明确了公司的核心定位:为工程师、学生和业余爱好者提供可靠的测试与测量工具。他们首先推出了一系列电源、十进位箱和电子培训仪,这些产品迅速在行业内获得认可。凭借对产品质量的不懈追求,Global Specialties逐渐在竞争激烈的市场中站稳了脚跟。

恒连电子(EVERCOM)公司的发展小趣事

在恒连电子的发展历程中,技术突破和产品创新始终是公司发展的核心动力。公司投入大量资金和资源进行技术研发,不断推出具有竞争力的新产品。其中,一款具有自主知识产权的智能芯片成为了公司的明星产品,不仅提升了产品的整体性能,还为公司带来了可观的利润。此外,恒连电子还注重产品的多元化发展,不断拓展产品线,满足市场的多样化需求。

Defense Supply Center Columbus公司的发展小趣事

在电子行业,人才是企业最宝贵的财富。Defense Supply Center Columbus公司高度重视人才战略的实施。公司积极引进和培养各类人才,建立起一支高素质、专业化的团队。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。同时,公司还建立了完善的激励机制和绩效考核体系,激发员工的工作积极性和创造力。这些人才战略的实施,为公司的发展提供了有力的人才保障和智力支持。

请注意,以上故事均为虚构内容,旨在展示Defense Supply Center Columbus公司可能的发展路径和故事框架。实际情况可能因公司具体情况和市场环境而有所不同。

Amprobe公司的发展小趣事

在电子行业,人才是企业最宝贵的财富。Defense Supply Center Columbus公司高度重视人才战略的实施。公司积极引进和培养各类人才,建立起一支高素质、专业化的团队。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。同时,公司还建立了完善的激励机制和绩效考核体系,激发员工的工作积极性和创造力。这些人才战略的实施,为公司的发展提供了有力的人才保障和智力支持。

请注意,以上故事均为虚构内容,旨在展示Defense Supply Center Columbus公司可能的发展路径和故事框架。实际情况可能因公司具体情况和市场环境而有所不同。

问答坊 | AI 解惑

一个实用雕刻机

[localimg=400,225]3[/localimg][localimg=400,225]3[/localimg]f…

查看全部问答>

独立式键盘识别程序

小弟求一独立式键盘识别程序按下弹起之后才识别!!求各位大虾指点!…

查看全部问答>

有串口但不能下载程序

我的单片机在下载程序时 用两个USB不能下载程序   但用一个USB 和一个九针可以用 不知道为什么  有哪位高手知道其中的原因 请指点一下  谢谢…

查看全部问答>

用Kiel汇编一个最简单的程序通不过,怎么回事.

用Kiel汇编一个最简单的程序通不过,怎么回事. 代码如下: ORG 000H LJMP MAIN ORG 030H MAIN:SET P1.0 CLR P1.0 END 操作步骤如下: 1.建立工程->设置芯片AT89C51->使用片内ROM 2.建立文件->保存为test.asm 3.把文件添加到建立的工程里面. ...…

查看全部问答>

急问用DialogBoxParam()打开窗口,但是如何得到窗口中的控件的句柄呢

用这个函数自己打开我自己定制的窗口 ,但是我想得到窗口中的控件的句柄,但是我怎么也得不到 函数很简单: int WINAPI WinMain(HINSTANCE hInstance,                   HINST ...…

查看全部问答>

DisPlay驱动 与 LCD驱动的关系

WinCE菜鸟求救: 好心大哥大姐帮忙了: 在LCD的驱动程中必然包括相关的引脚配置和寄存器设置了,然而在Display的驱动程序中,竟然也有跟LCD一样的引脚配置跟寄存器配置,问:       为什么会这样呢:      ...…

查看全部问答>

做视频方面该买哪种arm开发板?

   本人无arm基础,想买个开发板学习,希望2000以下,arm9,支持linux,以太网,usb(接摄像头),当然最好有源码 ,大家推荐个吧 我看了资料,刚打算就买SC40BOX结果听人说停产了,要买easyarm2200开发板,发现不支持linux,arm7.。 ...…

查看全部问答>

怎么破解rvds2.2啊....

下载了破解crack文件夹,里面有keygen.exe,license,dat和patch.exe,应该怎么用patch.exe对18个文件一一破解,是把patch.exe放到每个目录下面再运行吗? 请熟悉的朋友指教一二,谢谢!其实readme已经写的蛮清楚了,可怎么patch还是不清楚。。。 r ...…

查看全部问答>

WCE Application程序可不可以使用MFC类库?

WCE Application程序可不可以使用MFC类库?如果可以,要怎样使用?小弟直接包含MFC的头文件,结果当在程序中使用了new时,出现编译错误: uafxwced.lib(afxmem.obj) : error LNK2005: \"void * __cdecl operator new(unsigned int)\" (??2@YAPAXI@ ...…

查看全部问答>

GPRS数据流监控--我怎么实现统计GPRS上行和下行字节数目?

请问,如果在如何调用windows mobile的函数或者其他方法来得到GPRS发送数据的总大小(上行和下行的总和).有什么好的思路也非常感谢.…

查看全部问答>