中国开发网: 论坛: 程序员情感CBD: 贴子 22710
李颖: 嵌入式系统以及如何构造一个嵌入式系统概览-6
嵌入式系统以及如何构造一个嵌入式系统概览-6

发信人: dot (爱吃萝卜和青菜), 信区: Embedded
发信站: 武汉白云黄鹤站


引导内核--当没有LILO或BIOS时

当一个微处理器最初启动时,它首先执行在一个预定地址处的指令.通常这个位置是只读
内存,其中存放着系统初始化或引导程序.在PC中,它就是BIOS.这些程序要执行低级的CP
U初始化并配置其他硬件.BIOS接着判断出哪一个磁盘包含有操作系统,再把OS拷贝到RAM
中,并把控制权交给OS.实际上,整个过程远非这么简单,不过对我们的理解已经足够.运行
在PC上的Linux系统依赖于该PC的BIOS来提供这些配置和OS加载功能.

在一个嵌入式系统里,常常没有上述的BIOS;这样,你就需要去提供等价的启动代码.还好
,一个嵌入式系统的BIOS并不需要像PC BIOS引导程序那样有那么多的灵活性,因为它通常
仅需处理一种硬件配置方案.这些代码比较简单但也另人厌烦.它是一些把特定的数写入
指定硬件寄存器的指令序列.不过这是很关键的代码,因为这些数值必须要符合你的硬件
并且要按特定顺序来完成.在大多数情况下,(这些代码中)有一个最小化的加电自检模块
用以检查内存,让一些LED闪现一下,也可能探测一些其它让Linux OS启动和运行的必要硬
件.这些启动代码是高度硬件专用性的,因而,不具移植性.

有幸的是,大多数系统为核心微处理器和内存使用了食谱式的硬件设计.典型地,芯片制造
商有一个可供设计参考的演示板--新设计多少可以从中直接拷贝一些.对这些食谱式的设
计,经常有现成的启动代码可用,而且可以很容易地被修改以适应你的需要.很少(会遇到
)有需要从头开始编写的启动代码.

为了测试你的(启动)代码,你可以使用一个包含它自己的仿真内存的电子仿真器(in-cir
cuit emulator),这里的仿真内存用以替换目标内存.你把待测代码加载到仿真器中并通
过仿真器调试它.如果没有可用的仿真器,也可以跳过这一步,不过需要一个较长的调试周
期.

这些代码最终要从非易失性存储器中运行,通常是用闪存或EPROM芯片,你要想办法把这些
代码放进前述芯片中,放入的具体方法依赖于"目标"硬件和工具.一个常见的方法是把闪
存或EPROM芯片插入到一个EPROM或闪存"烧炉"中.这种方法将把你的程序"烧入"(存入)芯
片中.然后,把芯片插入到你目标板上的一个插槽中,打开电源.这种方法要求在板子上具
有插槽化(socketed)部分;然而,有些设备包格式(结构)不允许被插槽化(socketed).

另一种办法是通过一个JTAG接口.一些芯片包含一个JTAG接口,从而可以对芯片编程.这是
一种最简便的办法.芯片可以被永久地焊接到板子上.一段电缆从板子上的JTAG连接器(通
常是一个PC卡)连接着一个JTAG接口.接下来要求在操纵JTAG接口的PC上做一些用户定制
性编程.在仅需较少运行量的产品中,也可以使用这种方法.
DISSENT IS THE HIGHEST FORM OF PATRIOTISM !

--Thomas Jefferson

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录