基于Linux的嵌入式系统的启动设计.pdf

上传人:asd****56 文档编号:70339074 上传时间:2023-01-19 格式:PDF 页数:4 大小:120.02KB
返回 下载 相关 举报
基于Linux的嵌入式系统的启动设计.pdf_第1页
第1页 / 共4页
基于Linux的嵌入式系统的启动设计.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《基于Linux的嵌入式系统的启动设计.pdf》由会员分享,可在线阅读,更多相关《基于Linux的嵌入式系统的启动设计.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、电子科技 2 0 0 4 年第 6 期(总第 1 7 7 期)3基于Linux的嵌入式系统的启动设计 王 静1,刘夏伟2 (1长沙理工大学 计算机与通信工程学院,湖南 长沙,410076;2中国电子科技集团公司第四十八研究所,湖南 长沙,410111)摘 要 Linux 在嵌入式系统开发领域得到了广泛的使用。在不同的嵌入式系统开发中,都需要编制硬件平台相关的启动程序。该文以一个基于 SA1110 微处理器的数据采集系统为实例,讨论基于 Linux 的嵌入式系统中启动程序的设计。关键词 嵌入式系统;Linux;SA1110 中图分类号 TP316 1 引言 嵌入式系统是指以应用为中心,以计算机技

2、术为基础,软/硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗等要求严格的专用计算机系统1。随着应用复杂性的增加,仅仅只包含一些简单控制流程的嵌入式系统不能满足应用的需要,因此,嵌入式操作系统就应运而生。当前,Linux作为一个类 Unix的操作系统在嵌入式系统开发领域得到了越来越广泛的应用。Linux具有以下特点2:(1)精简的内核,高效、稳定;(2)支持不同的 CPU 和多种体系结构,如 X86,ARM,MIPS,SPARC,ALPHA 等;(3)高定制性,内核与用户界面完全独立,各部分可以定制性很强;(4)价格低廉;(5)开放源码,软件资源丰富,可获取广泛支持等。在一个嵌入式系统中,通

3、常没有基本输入/输出系统(BIOS),这样就需要去提供功能等价的启动代码。这些代码是一些把特定的参数写入指定硬件寄存器的简单、关键的指令序列,因为这些参数必须要符合硬件并且按特定顺序来完成,这一步是整个系统后续工作的基础。因此,在不同的嵌入式系统设计中,都需要编制硬件平台相关的启动程序,当然,基于 Linux的嵌入式系统设计也不例外。收稿日期:2004-05-26 2 一个基于Linux的嵌入式系统硬件体系结构实例 如前所述,基于 Linux 的嵌入式系统的启动是严重依赖于硬件平台的,这里以一个基本、通用的嵌入式数据采集系统为例来说明启动程序的设计,其硬件结构框图如图 1 所示。CPU 采用

4、Intel 的 StrongARM SA1110 微处理器3。内存模块采用 32M SDRAM和 216M Flash。外部接口模块包括数据采集/交换接口、液晶显示屏、和 JTAG 口。为调试软件方便,将 SA1110CPU 上的 JTAG口从硬件板上引出,另一端连接在主机上,通过该JTAG 下载线可以将启动代码下载到系统的 Flash中。红外线接口可以直接接在主机的串口上。可以使用该串口下载编译后的 Ramdisk(内存虚拟盘,用于控制系统的启动)、Linux内核、应用程序和进行系统级的调试。通过数据采集/交换接口,该系统连接若干个数据采集节点,与下层数据采集节点组成主从关系,这些数据采集节

5、点可以是可编程控制器(PLC)、温控仪、流量计等设备。系统依次发出查询信息,对下层节点进行轮询。下层节点监听网络,如要读取数据,则把自己测量的数据打包返回,要是写入数据,则解释系统传入的数据并将结果写入相应设备。主系统与从节点进行串口通信中的数据结构可基于 Linux 的嵌入式系统的启动设计 IT Age/Mar.15,2004 4参照 Modbus 协议4来定义(Modbus 是 PLC 之间进行通信的总线标准,目前国内使用的大部分 PLC 都遵从这一标准),限于篇幅,其具体的数据结构在此不作进一步讨论。I nt elSA1110微处理器Fl ash8MFl ash8MJTAG接口液晶显示接

6、口SDRAM32M(byte)数据采集/交换接口串口数据/地址总线电源模块红外结构串口数据采集节点1Modbus数据采集节点n 图 1 硬件体系结构框架图 3 Linux启动程序开发 3.1 Blob 简介 Boot Loader5是在嵌入式 Linux操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间映射,从而将系统的软硬件环境设置为一个合适的状态,以便为最终调用操作系统内核作好准备。Blob 即 Boot Loader Object,是专门针对具体开发板的 Boot Loader,其功能是使 Linux内核装入Flash或 SDRAM中,以及为 Linu

7、x内核提供虚拟盘(Ramdisk)。通常 Blob 是依赖于硬件实现的,没有一个通用的 Blob,对于两块不同的硬件板而言,即使它们是基于同一种 CPU 构建的,要想让运行在一块硬件板上的 Blob 程序也能运行在另一块硬件板上,通常需要修改 Blob 的源程序。系统加电或复位后,SA1110 微处理器从地址0 x00000000 取它的第一条指令。而基于 CPU构建的嵌入式系统通常都有某种类型的固态存储设备(如 ROM、EEPROM或 FLASH等)被映射到这个预先设定的地址上。因此在系统加电后,CPU将首先执行 Blob 程序。图 2 描述了一个同时装载有Blob、内核的启动参数、内核映像

8、和根文件系统映像的固态存储设备的典型存储空间分配结构。3.2 Blob的操作模式 大多 Blob 都包含两种不同的操作模式 5:启动加载模式和下载模式。这种区别仅对于开发人员才有意义,从最终用户的角度看,Blob 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。Kernel(内核)根文件系统B l obBoot参数 图 2 固态存储设备的空间分配结构图(1)启动加载模式:这种模式也称为自主模式,Blob 从硬件板 Flash 上将操作系统加载到SDRAM中运行,也即“脱机运行”,整个过程并没有用户的介入。嵌入式产品发布时就工作在这种模式下。(2)下载模式:在这种模

9、式下,目标机上的Blob 将通过串口连接或网络连接等通信手段从主机下载文件,如下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Blob 保存到目标机硬件板的 SDRAM 中,然后再被 Blob 写到目标机上的 Flash 中。Blob 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 Blob 的这种工作模式。3.3 Blob启动的实现 Blob 启动采用多阶段来实现,该系统将其分为阶段 1 和阶段 2 这两个步骤来实现。阶段 1 中是依赖于硬件平台的代码,用汇编语言来实现,以达到短小精悍的目的;阶段 2 则用 C语言来实现,这样可以实现更为复杂的功

10、能,而且代码会具有更好的可读性和可移植性。两个实现阶段的具体分析如下:(1)阶段 1 的实现 阶段 1 包括:硬件设备初始化、为加载 BlobSDRAM 32MB Flash 8MB Flash 8MB Intel SA1110 微处理器 电源模块 数据采集/交换接口 液晶显示 接口 红外结构 JTAG 接口 数据采集 节点 1 数据采集 节点 n Kernel(内核)根文件系统 基于 Linux 的嵌入式系统的启动设计 电子科技/2004 年 6月 15日 5的阶段 2 准备 SDRAM空间、设置堆栈、跳转到阶段 2 的 C 代码入口点。a)硬件设备初始化 这是 Blob 一开始就执行的操作

11、,其目的是为阶段 2 的执行以及随后的 kernel 的执行准备好一些基本的硬件环境。它包括以下步骤:屏蔽所有的中断;设置 SA1110 的速度和时钟频率;初始化 SDRAM;初始化 LED;关闭 SA1110内部指令数据 cache。b)为加载 Blob 的阶段 2 准备 RAM空间 为了获得更快的执行速度,通常把阶段 2 中执行的代码加载到 RAM 空间中来执行,因此在阶段1 中必须为加载 Blob 的阶段 2 准备好一段可用的RAM空间。由于阶段 2 大部分是 C 语言代码,因此在考虑空间大小时,除了阶段 2 可执行映像的大小外,还必须考虑到所需堆栈空间。该系统设置了 1M Byte的

12、RAM空间,Blob 可以将阶段 2 的可执行映像分配到从系统 RAM起始地址开始的 1M Byte 空间内执行,也以分配到整个 RAM空间的最顶端执行。c)设置堆栈 设置堆栈是为了执行 C 代码作好准备。将堆栈指针 sp 的值设置为指向为阶段2 分配的 RAM空间的最顶端。经过上述三个执行步骤后,系统的物理内存分配如图 3 所示。为阶段2可执行映像准备的RAM地址空间.Ramdisk(虚拟盘).堆栈指针SP栈底0 x0000,0000内核映像R A M地址空间.Blob内核映像的阶段2可执行映像的最大空间:64KB0 x0000,40000 x0001,0000Fl ash地址空间Blob内

13、核映像的阶段1可执行映像的最大空间:1KB堆栈指针SP栈顶 图 3 RAM 空间分配结构图d)跳转到阶段 2 的 C 代码入口点 在编译、链接 Blob 时,采用一段 trampoline 汇编小程序来作为 main()函数的外部接口来跳转至main()函数。将这段 trampoline 小程序作为阶段2 可执行映像的入口点。然后在 trampoline 汇编小程序中用 SA1110 跳转指令跳入 main()函数中去执行。当 main()函数返回时,SA1110 执行路径再次回到 trampoline 程序。(2)阶段 2 的实现 Blob 的阶段 2 包括:初始化本阶段要使用到的硬件设备、

14、检测系统内存映射(Memory Map)、将kernel 映像和根文件系统映像从 Flash上读到 RAM空间中、内核启动参数设置、调用内核。a)初始化本阶段要使用到的硬件设备 初始化硬件板上的红外线串口,以便和终端用户进行 I/O 输出信息;初始化计时器等。设备初始化完成后,可以输出一些打印信息,程序字符串、版本号等。b)检测系统内存映射 内存映射是指在整个 4GB 物理地址空间中有哪些地址范围被分配用来寻址系统的 RAM 单元。在 SA1110 中,从 0 xC000,0000 开始的 512M地址空间被用作系统的 RAM 地址空间,但是在搭建具体的硬件板只把 SA1110 预留的全部 R

15、AM 地址空间中的一部分映射到 RAM 单元上,而让剩下的那部分预留 RAM 地址空间处于未使用状态。因此Blob 的阶段 2 必须知道 SA1110 预留的全部 RAM地址空间中的哪些被真正映射到 RAM 地址单元,哪些是处于未被占用的状态。c)将 kernel 映像和根文件系统映像从 Flash上基于 Linux 的嵌入式系统的启动设计 IT Age/Mar.15,2004 6读到 RAM空间中 对 于 内 核 映 像,一 般 将 其 拷 贝 到 从(MEM_START0 x8000)这个基地址开始的大约1MB 大小的内存范围内。而对于根文件系统映像,将其拷贝到 MEM_START+0 x

16、0010,0000 开始的地方。如果用 Ramdisk 作为根文件系统映像,则其解压后的大小一般是 1MB。由于 SA1110 是在统一的内存地址空间中寻址Flash等存储器设备的,因此从 Flash上读取数据与从 RAM 单元中读取数据差不多,用循环拷贝就可以完成从 Flash设备上拷贝映像的工作。d)内核启动参数设置 在将内核映像和根文件系统映像拷贝到 RAM空间中后,就可以准备启动 Linux内核了。但是在调用内核之前,需要设置 Linux内核的启动参数。Linux 2.4 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表以标记 ATAG_COR

17、E 开始,以标记 ATAG_NONE 结束。每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组成。数据结构 tag和tag_header定 义 在Linux内 核 源 码 的include/asm/setup.h 头文件中6。需 要 由 Blob 设置常 用 的启 动 参 数 有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 等。e)调用内核 Blob调用 Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到 MEM_START0 x8000 地址处。这样,经过上述两个阶段的处理,

18、就实现了嵌入式系统中 Linux的启动。4 结束语 主要介绍了基于 Linux 的嵌入式系统启动程序的设计,分析了基于 StrongARM SA1110 微处理器的嵌入式系统的引导程序 Blob 的加载过程的实现。在文中将 Blob 启动分为多阶段来实现,这样便于设计更加复杂的功能和提供更好的可移植性。参考文献 1 涂刚.嵌入式操作系统综述.计算机应用研究,2000,17(11):4-7.2 李善平.Linux 与嵌入式系统.北京:清华大学出版社,2003.3 陈章龙,涂时亮.嵌入式系统Intel StrongARM 结构与开发.北京:北京航空航天大学出版社,2002.4 Modbus-IDA

19、 Orgnazation.Modbus application protocol v1.1.http:/www.modbus.org/modbus,2001-10-12.5 邹思轶.嵌入式 Linux 设计与应用.北京:清华大学出版社,2002.6 毛德操,胡希明.Linux 内核源代码情景分析.杭州:浙江大学出版社,2001.作者简介 王 静(1975-),男,湖南长沙人,硕士,研究方向:分布式计算技术、嵌入式Linux;刘夏伟(1972-),男,湖南长沙人,本科,计算机及应用。The Development of the Boot Loader in the Linux-Based Emb

20、edded System Wang Jing1,Liu Xiawei2 (1.Changsha University Of Science Technology,Changsha,Hunan 410076,China;2.48th of CETC,Changsha,Hunan 410111)Abstract:Linux is widely used in the development of embedded systems.One of the problems in the development of the embedded system is to design programs independent of the hardware flat.This paper puts forward a“boot loader”for booting the Linux-based embedded system with a Data-collecting Embedded System based on SA1110 CPU as an example.Keywords:Embedded system;Linux;SA1110

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁