首页 理论教育 操作系统实现之路-嵌入式系统软件的写入

操作系统实现之路-嵌入式系统软件的写入

时间:2023-10-21 理论教育 版权反馈
【摘要】:上面介绍的嵌入式系统软件的加载,都是建立在软件已经被成功地写入到Flash或外部存储介质上的基础上的。

操作系统实现之路-嵌入式系统软件的写入

上面介绍的嵌入式系统软件的加载,都是建立在软件已经被成功地写入到Flash或外部存储介质上的基础上的。但这些软件如何被写入这些存储介质上,则是另外一个需要介绍的问题。一般情况下,在硬件电路板开发完成之后,默认情况下所有存储设备,包括Boot ROM、Flash、外部存储器等都是空的。因此,要想使硬件运行,必须把相应的软件写入这些存储介质,以完成硬件的控制工作。

这涉及两个内容。

(1)Boot ROM软件的写入。Boot ROM中的软件是CPU复位后,开始执行的第一部分软件,因此只能通过硬件的方式来写入。

(2)Flash或外部存储介质软件的写入,即操作系统和应用程序映像的写入。这部分内容在写入前,Boot ROM中已经被成功写入内容,因此可利用Boot ROM软件提供的功能,把这些系统软件加载到Flash或外部存储介质中。

下面简单介绍这两部分内容的写入方式。

1.Boot ROM软件的写入

由于在Boot ROM软件写入前,系统是无法启动的,因此无法借用系统提供的软件功能来写入Boot ROM代码,只能通过硬件的方式。目前,常用的写入方式有两种。

(1)通过烧片的方式写入Boot ROM。即通过特殊的烧片设备,把已经编译好的Boot ROM软件烧入Boot ROM芯片中,然后再把Boot ROM芯片插到印制电路板上。一般情况下,Boot ROM、Flash等部件都是可随意在电路板上插入或拔出的。这种方式简便易行,但需要一种专门的烧片设备。

(2)通过JTAG(Join Test Action Group,IEEE标准)接口写入。JTAG接口是一个标准硬件接口,一般的CPU都提供。通过JTAG接口,可以直接驱动CPU执行特定的指令。这样在写入的时候,可以把JTAG接口的电缆,通过转换头与PC的串口或并口进行连接,然后通过PC上的软件驱动JTAG接口,把Boot ROM软件写入Boot ROM中。

这两种方式都经常使用,但第二种方式更加灵活,用途更加广泛。本书内容着重于嵌入式开发的操作系统内容的介绍,因此对这些硬件的实现不作介绍,感兴趣的读者可以参考相关的书籍。(www.xing528.com)

2.操作系统和应用程序映像的写入

在完成Boot ROM软件的写入后,操作系统和应用程序的映像就可以借助Boot ROM提供的服务来写入Flash或外部存储设备了。当然,对于Flash设备,也可以采用与Boot ROM类似的方法写入,但通常情况下,是通过调用Boot ROM提供的服务写入的。

一般情况下,Boot ROM软件会提供一些完成操作系统软件加载(这里的加载,指的是把嵌入式软件从所在的计算机写入嵌入式系统的过程,并不是指操作系统的启动过程)的功能服务,比如串口读写服务、Ethernet接口驱动、TFTP服务器等。通过这些服务,操作系统可方便地写入Flash或外部存储介质。

在系统启动的时候,Boot ROM软件会提供一个供用户选择是否更新系统软件的机会,若用户选择了更新软件,则会进入系统软件更新界面。比如,在IP路由器上,启动过程中,若通过串口连接路由器的控制口(比如Console接口)和PC的终端模拟软件(比如Windows的超级终端),则可能会显示如下界面:

如果用户在10s之内按了Ctrl+B组合键,则会进入如下界面(当然,如果用户不按该组合键,则系统会在等待10s之后,进入默认的启动过程):

用户就可以选择是通过Console接口(COM接口)还是以太网接口来更新系统软件。在选择使用以太网接口更新软件之前,需要首先配置嵌入式系统的以太网接口,包括IP地址、网络掩码、默认网关等参数,配置完成之后,才能通过TFTP,把软件下载到目标系统上。

上面列出的用户交互内容,都是由位于Boot ROM内的软件完成的,因此,在一个复杂的嵌入式系统中,Boot ROM的功能往往也十分复杂,不但要完成正常的启动和硬件初始化(这部分代码可能比较少),而且要完成系统软件的更新等功能,还可能在Boot ROM中集成软件调试功能。

对于Boot ROM代码的编写,与硬件相关的内容,比如CPU的初始化、系统硬件的初始化等,是由汇编语言完成的,而更复杂的、与硬件无关的代码,则是采用可读性更强的C语言编写的。实际上,Boot ROM软件的开发也是一项很复杂的工程,有时甚至比操作系统和应用软件本身更加复杂。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈