当前位置:文档之家› 嵌入式BootLoader技术内幕

嵌入式BootLoader技术内幕

嵌入式BootLoader技术内幕
嵌入式BootLoader技术内幕

嵌入式BootLoader技术内幕

作者:詹荣开(zhanrk@https://www.doczj.com/doc/fb1892044.html,) 2005-01-13 10:48:18 来自:IBM DW 2003年12月30日嵌入式BootLoader技术内幕(一)

本文详细地介绍了基于嵌入式系统中的OS 启动加载程序――Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。

一、引言

在专用的嵌入式板子运行GNU/Linux 系统已经变得越来越流行。一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次:

1. 引导加载程序。包括固化在固件(firmware)中的boot 代码(可选),和Boot Loader

两大部分。

2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。

3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统。通常用ram dis

k 来作为root fs。

4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI 有:MicroWindows 和MiniGUI 懂。

引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC 的体系结构我们可以知道,PC 机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR 中的OS

Boot Loader(比如,LILO 和GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘MBR 中的Boot Loader 读到系统的RAM 中,然后将控制权交给OS Boot Load er。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注,有的嵌入式CPU 也会内嵌

一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader 来完成。比

如在一个基于ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址0x00 000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader 程序。

本文将从Boot Loader 的概念、Boot Loader 的主要任务、Boot Loader 的框架结构以及Boot Loader 的安装等四个方面来讨论嵌入式系统的Boot Loader。

二、Boot Loader 的概念

简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入

式世界里建立一个通用的Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对Bo ot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

1. Boot Loader 所支持的CPU 和嵌入式板

每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系

结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。除了依赖于CPU

的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说

,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loade

r 的源程序。

2. Boot Loader 的安装媒介(Installation Medium)

系统加电或复位后,所有的CPU 通常都从某个由CPU 制造商预先安排的地址上取指令。比如,基于ARM7TDMI core 的CPU 在复位时通常都从地址0x00000000 取它的第一条指

令。而基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPRO M 或FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行B oot Loader 程序。

下图1就是一个同时装有Boot Loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。

https://www.doczj.com/doc/fb1892044.html,/pub/attachm...3/12/267984.gif

图1 固态存储设备的典型空间分配结构

3. 用来控制Boot Loader 的设备或机制

主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来

进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

4. Boot Loader 的启动过程是单阶段(Single Stage)还是多阶段(Multi-Stage)

通常多阶段的Boot Loader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的Boot Loader 大多都是2 阶段的启动过程,也即启动过程可以分为stage 1

和stage 2 两部分。而至于在stage 1 和stage 2 具体完成哪些任务将在下面几篇讨

论。

5. Boot Loader 的操作模式(Operation Mode)

大多数Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。也即Boo t Loader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。这种模式是Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。

下载(Downloading)模式:在这种模式下,目标机上的Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Boot Loader 保存到目标机的RAM 中,然后再被Boot Loader 写到目标机上的FLASH 类固态存储设备中。Boot Loader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用Boot Loader 的这种工作模式。工作于这种模式下的Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。

像Blob 或U-Boot 等这样功能强大的Boot Loader 通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,Blob 在启动时处于正常的启动加载模式,但是它会延时10 秒等待终端用户按下任意键而将blob 切换到下载模式。如果在10 秒内没有用户按键,则blob 继续启动Linux 内核。

6. BootLoader 与主机之间进行文件传输所用的通信设备及协议

最常见的情况就是,目标机上的Boot Loader 通过串口与主机之间进行文件传输,传输协议通常是xmodem/ymodem/zmodem 协议中的一种。但是,串口传输的速度是有限的,因

此通过以太网连接并借助TFTP 协议来下载文件是个更好的选择。

此外,在论及这个话题时,主机方所用的软件也要考虑。比如,在通过以太网连接和TFT P 协议来下载文件时,主机方必须有一个软件用来的提供TFTP 服务。在讨论了BootLoa der 的上述概念后,下面我们来具体看看BootLoader 的应该完成哪些任务。

嵌入式BootLoader技术内幕(二)

三、Boot Loader 的主要任务与典型结构框架

在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像

都被加载到RAM 中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像

与根文件系统映像也可以直接在ROM 或Flash 这样的固态存储设备中直接运行。但这种做法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。

另外,由于Boot Loader 的实现依赖于CPU 的体系结构,因此大多数Boot Loader 都分为stage1 和stage2 两大部分。依赖于CPU 体系结构的代码,比如设备初始化代码等,通常都放在stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而sta ge2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和

可移植性。

Boot Loader 的stage1 通常包括以下步骤(以执行的先后顺序):

·硬件设备初始化。

·为加载Boot Loader 的stage2 准备RAM 空间。

·拷贝Boot Loader 的stage2 到RAM 空间中。

·设置好堆栈。

·跳转到stage2 的C 入口点。

Boot Loader 的stage2 通常包括以下步骤(以执行的先后顺序):

·初始化本阶段要使用到的硬件设备。

·检测系统内存映射(memory map)。

·将kernel 映像和根文件系统映像从flash 上读到RAM 空间中。

·为内核设置启动参数。

·调用内核。

3.1 Boot Loader 的stage1

3.1.1 基本的硬件初始化

这是Boot Loader 一开始就执行的操作,其目的是为stage2 的执行以及随后的kernel

的执行准备好一些基本的硬件环境。它通常包括以下步骤(以执行的先后顺序):

1.屏蔽所有的中断。为中断提供服务通常是OS 设备驱动程序的责任,因此在Boot Loa der 的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写CPU 的中断屏蔽寄存器或状态寄存器(比如ARM 的CPSR 寄存器)来完成。

2.设置CPU 的速度和时钟频率。

3.RAM 初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器

等。

4.初始化LED。典型地,通过GPIO 来驱动LED,其目的是表明系统的状态是OK 还

Error。如果板子上没有LED,那么也可以通过初始化UART 向串口打印Boot Loader 的Logo 字符信息来完成这一点。

5.关闭CPU 内部指令/数据cache。

3.1.2 为加载stage2 准备RAM 空间

为了获得更快的执行速度,通常把stage2 加载到RAM 空间中来执行,因此必须为加载Boot Loader 的stage2 准备好一段可用的RAM 空间范围。

由于stage2 通常是C 语言执行代码,因此在考虑空间大小时,除了stage2 可执行映象的大小外,还必须把堆栈空间也考虑进来。此外,空间大小最好是memory page 大小(通常是4KB)的倍数。一般而言,1M 的RAM 空间已经足够了。具体的地址范围可以任意安排

,比如blob 就将它的stage2 可执行映像安排到从系统RAM 起始地址0xc0200000 开始的1M 空间内执行。但是,将stage2 安排到整个RAM 空间的最顶1MB(也即(RamEnd-1M

B) - RamEnd)是一种值得推荐的方法。

为了后面的叙述方便,这里把所安排的RAM 空间范围的大小记为:stage2_size(字节),把起始地址和终止地址分别记为:stage2_start 和stage2_end(这两个地址均以4 字节

边界对齐)。因此:

stage2_end=stage2_start+stage2_size

另外,还必须确保所安排的地址范围的的确确是可读写的RAM 空间,因此,必须对你所安

排的地址范围进行测试。具体的测试方法可以采用类似于blob 的方法,也即:以memor y page 为被测试单位,测试每个memory page 开始的两个字是否是可读写的。为了后面叙述的方便,我们记这个检测算法为:test_mempage,其具体步骤如下:

1.先保存memory page 一开始两个字的内容。

2.向这两个字中写入任意的数字。比如:向第一个字写入0x55,第2 个字写入0xaa。

3.然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是0x55 和0xaa 。如果不是,则说明这个memory page 所占据的地址范围不是一段有效的RAM 空间。

4.再向这两个字中写入任意的数字。比如:向第一个字写入0xaa,第2 个字中写入0x

5.然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是0xaa 和

0x55。如果不是,则说明这个memory page 所占据的地址范围不是一段有效的RAM 空间。

6.恢复这两个字的原始内容。测试完毕。

为了得到一段干净的RAM 空间范围,我们也可以将所安排的RAM 空间范围进行清零操作

3.1.3 拷贝stage2 到RAM 中

拷贝时要确定两点:(1) stage2 的可执行映象在固态存储设备的存放起始地址和终止地址;(2) RAM 空间的起始地址。

3.1.4 设置堆栈指针sp

堆栈指针的设置是为了执行 C 语言代码作好准备。通常我们可以把sp 的值设置为(stag e2_end-4),也即在3.1.2 节所安排的那个1MB 的RAM 空间的最顶端(堆栈向下生长)。此外,在设置堆栈指针sp 之前,也可以关闭led 灯,以提示用户我们准备跳转到stag

e2。经过上述这些执行步骤后,系统的物理内存布局应该如下图2所示。

3.1.5 跳转到stage2 的C 入口点

在上述一切都就绪后,就可以跳转到Boot Loader 的stage2 去执行了。比如,在ARM 系统中,这可以通过修改PC 寄存器为合适的地址来实现。

https://www.doczj.com/doc/fb1892044.html,/pub/attachm...3/12/268047.gif

图2 bootloader 的stage2 可执行映象刚被拷贝到RAM 空间时的系统内存布局

3.2 Boot Loader 的stage2

正如前面所说,stage2 的代码通常用C 语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通C 语言应用程序不同的是,在编译和链接boot loader 这样的程序时,我们不能使用glibc 库中的任何支持函数。其原因是显而易见的

。这就给我们带来一个问题,那就是从那里跳转进main() 函数呢?直接把main() 函数

的起始地址作为整个stage2 执行映像的入口点或许是最直接的想法。但是这样做有两个缺点:1)无法通过main() 函数传递函数参数;2)无法处理main() 函数返回的情况。一种更为巧妙的方法是利用trampoline(弹簧床)的概念。也即,用汇编语言写一段trampolin

e 小程序,并将这段trampoline 小程序来作为stage2 可执行映象的执行入口点。然后

我们可以在trampoline 汇编小程序中用CPU 跳转指令跳入main() 函数中去执行;而当main() 函数返回时,CPU 执行路径显然再次回到我们的trampoline 程序。简而言之,

这种方法的思想就是:用这段trampoline 小程序来作为main() 函数的外部包裹(exter

nal wrapper)。

下面给出一个简单的trampoline 程序示例(来自blob):

.text

.globl _trampoline

_trampoline:

bl main

/* if main ever returns we just call it again */

b _trampoline

可以看出,当main() 函数返回后,我们又用一条跳转指令重新执行trampoline 程序―

―当然也就重新执行main() 函数,这也就是trampoline(弹簧床)一词的意思所在。

3.2.1初始化本阶段要使用到的硬件设备

这通常包括:(1)初始化至少一个串口,以便和终端用户进行I/O 输出信息;(2)初始

化计时器等。在初始化这些设备之前,也可以重新把LED 灯点亮,以表明我们已经进入main() 函数执行。

设备初始化完成后,可以输出一些打印信息,程序名字字符串、版本号等。

3.2.2 检测系统的内存映射(memory map)

所谓内存映射就是指在整个4GB 物理地址空间中有哪些地址范围被分配用来寻址系统的RAM 单元。比如,在SA-1100 CPU 中,从0xC000,0000 开始的512M 地址空间被用作系

统的RAM 地址空间,而在Samsung S3C44B0X CPU 中,从0x0c00,0000 到0x1000,0000 之间的64M 地址空间被用作系统的RAM 地址空间。虽然CPU 通常预留出一大段足够的

地址空间给系统RAM,但是在搭建具体的嵌入式系统时却不一定会实现CPU 预留的全部RAM 地址空间。也就是说,具体的嵌入式系统往往只把CPU 预留的全部RAM 地址空间中

的一部分映射到RAM 单元上,而让剩下的那部分预留RAM 地址空间处于未使用状态。由

于上述这个事实,因此Boot Loader 的stage2 必须在它想干点什么(比如,将存储在

flash 上的内核映像读到RAM 空间中) 之前检测整个系统的内存映射情况,也即它必须知道CPU 预留的全部RAM 地址空间中的哪些被真正映射到RAM 地址单元,哪些是处于"u

nused" 状态的。

(1) 内存映射的描述

可以用如下数据结构来描述RAM 地址空间中的一段连续(continuous)的地址范围:

typedef struct memory_area_struct {

u32 start; /* the base address of the memory region */

u32 size; /* the byte number of the memory region */

int used;

} memory_area_t;

这段RAM 地址空间中的连续地址范围可以处于两种状态之一:(1)used=1,则说明这段连续的地址范围已被实现,也即真正地被映射到RAM 单元上。(2)used=0,则说明这段连续的地址范围并未被系统所实现,而是处于未使用状态。

基于上述memory_area_t 数据结构,整个CPU 预留的RAM 地址空间可以用一个memory

_area_t 类型的数组来表示,如下所示:

memory_area_t memory_map[NUM_MEM_AREAS] = {

[0 ... (NUM_MEM_AREAS - 1)] = {

.start = 0,

.size = 0,

.used = 0

},

};

(2) 内存映射的检测

下面我们给出一个可用来检测整个RAM 地址空间内存映射情况的简单而有效的算法:

/* 数组初始化*/

for(i = 0; i < NUM_MEM_AREAS; i++)

memory_map[i].used = 0;

/* first write a 0 to all memory locations */

for(addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE)

* (u32 *)addr = 0;

for(i = 0, addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE) {

/*

* 检测从基地址MEM_START+i*PAGE_SIZE 开始,大小为

* PAGE_SIZE 的地址空间是否是有效的RAM地址空间。

*/

调用3.1.2节中的算法test_mempage();

if ( current memory page isnot a valid ram page) {

/* no RAM here */

if(memory_map[i].used )

i++;

continue;

}

/*

* 当前页已经是一个被映射到RAM 的有效地址范围

* 但是还要看看当前页是否只是4GB 地址空间中某个地址页的别名?

*/

if(* (u32 *)addr != 0) { /* alias? */

/* 这个内存页是4GB 地址空间中某个地址页的别名*/

if ( memory_map[i].used )

i++;

continue;

}

/*

* 当前页已经是一个被映射到RAM 的有效地址范围

* 而且它也不是4GB 地址空间中某个地址页的别名。

*/

if (memory_map[i].used == 0) {

memory_map[i].start = addr;

memory_map[i].size = PAGE_SIZE;

memory_map[i].used = 1;

} else {

memory_map[i].size += PAGE_SIZE;

}

} /* end of for (…) */

在用上述算法检测完系统的内存映射情况后,Boot Loader 也可以将内存映射的详细信息

打印到串口。

3.2.3 加载内核映像和根文件系统映像

(1) 规划内存占用的布局

这里包括两个方面:(1)内核映像所占用的内存范围;(2)根文件系统所占用的内存范围

。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。

对于内核映像,一般将其拷贝到从(MEM_START+0x8000) 这个基地址开始的大约1MB大小的

内存范围内(嵌入式Linux 的内核一般都不操过1MB)。为什么要把从MEM_START 到MEM

_START+0x8000 这段32KB 大小的内存空出来呢?这是因为Linux 内核要在这段内存中

放置一些全局数据结构,如:启动参数和内核页表等信息。

而对于根文件系统映像,则一般将其拷贝到MEM_START+0x0010,0000 开始的地方。如果用

Ramdisk 作为根文件系统映像,则其解压后的大小一般是1MB。

(2)从Flash 上拷贝

由于像ARM 这样的嵌入式CPU 通常都是在统一的内存地址空间中寻址Flash 等固态存储

设备的,因此从Flash 上读取数据与从RAM 单元中读取数据并没有什么不同。用一个简单的循环就可以完成从Flash 设备上拷贝映像的工作:

while(count) {

*dest++ = *src++; /* they are all aligned with word boundary */

count -= 4; /* byte number */

};

3.2.4 设置内核的启动参数

应该说,在将内核映像和根文件系统映像拷贝到RAM 空间中后,就可以准备启动Linux 内核了。但是在调用内核之前,应该作一步准备工作,即:设置Linux 内核的启动参数。

Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参

数标记列表以标记ATAG_CORE 开始,以标记A TAG_NONE 结束。每个标记由标识被传递参

数的tag_header 结构以及随后的参数值数据结构来组成。数据结构tag 和tag_header

定义在Linux 内核源码的include/asm/setup.h 头文件中:

/* The list ends with an ATAG_NONE node. */

#define ATAG_NONE 0x00000000

struct tag_header {

u32 size; /* 注意,这里size是字数为单位的*/

u32 tag;

};

……

struct tag {

struct tag_header hdr;

union {

struct tag_core core;

struct tag_mem32 mem;

struct tag_videotext videotext;

struct tag_ramdisk ramdisk;

struct tag_initrd initrd;

struct tag_serialnr serialnr;

struct tag_revision revision;

struct tag_videolfb videolfb;

struct tag_cmdline cmdline;

/*

* Acorn specific

*/

struct tag_acorn acorn;

/*

* DC21285 specific

*/

struct tag_memclk memclk;

} u;

};

在嵌入式Linux 系统中,通常需要由Boot Loader 设置的常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。比如,设置ATAG_CORE 的代

码如下:

params = (struct tag *)BOOT_PARAMS;

params->hdr.tag = A TAG_CORE;

params->hdr.size = tag_size(tag_core);

params->u.core.flags = 0;

params->u.core.pagesize = 0;

params->u.core.rootdev = 0;

params = tag_next(params);

其中,BOOT_PARAMS 表示内核启动参数在内存中的起始基地址,指针params 是一个str uct tag 类型的指针。宏tag_next() 将以指向当前标记的指针为参数,计算紧临当前标

记的下一个标记的起始地址。注意,内核的根文件系统所在的设备ID就是在这里设置的。下面是设置内存映射情况的示例代码:

for(i = 0; i < NUM_MEM_AREAS; i++) {

if(memory_map[i].used) {

params->hdr.tag = A TAG_MEM;

params->hdr.size = tag_size(tag_mem32);

params->u.mem.start = memory_map[i].start;

params->u.mem.size = memory_map[i].size;

params = tag_next(params);

}

}

可以看出,在memory_map[]数组中,每一个有效的内存段都对应一个ATAG_MEM 参数标

记。

Linux 内核在启动时可以以命令行参数的形式来接收信息,利用这一点我们可以向内核提供那些内核不能自己检测的硬件参数信息,或者重载(override)内核自己检测到的信息。

比如,我们用这样一个命令行参数字符串"console=ttyS0,115200n8"来通知内核以ttyS0

作为控制台,且串口采用"115200bps、无奇偶校验、8位数据位"这样的设置。下面是一

段设置调用内核命令行参数字符串的示例代码:

char *p;

/* eat leading white space */

for(p = commandline; *p == ' '; p++)

;

/* skip non-existent command lines so the kernel will still

* use its default command line.

*/

if(*p == '\0')

return;

params->hdr.tag = A TAG_CMDLINE;

params->hdr.size = (sizeof(struct tag_header) + strlen(p) + 1 + 4) >> 2;

strcpy(params->u.cmdline.cmdline, p);

params = tag_next(params);

请注意在上述代码中,设置tag_header 的大小时,必须包括字符串的终止符'\0',此外

还要将字节数向上圆整4个字节,因为tag_header 结构中的size 成员表示的是字数。

下面是设置ATAG_INITRD 的示例代码,它告诉内核在RAM 中的什么地方可以找到initr d 映象(压缩格式)以及它的大小:

params->hdr.tag = A TAG_INITRD2;

params->hdr.size = tag_size(tag_initrd);

params->u.initrd.start = RAMDISK_RAM_BASE;

params->u.initrd.size = INITRD_LEN;

params = tag_next(params);

下面是设置ATAG_RAMDISK 的示例代码,它告诉内核解压后的Ramdisk 有多大(单位是K

B):

params->hdr.tag = A TAG_RAMDISK;

params->hdr.size = tag_size(tag_ramdisk);

params->u.ramdisk.start = 0;

params->u.ramdisk.size = RAMDISK_SIZE; /* 请注意,单位是KB */

params->u.ramdisk.flags = 1; /* automatically load ramdisk */

params = tag_next(params);

最后,设置ATAG_NONE 标记,结束整个启动参数列表:

static void setup_end_tag(void)

{

params->hdr.tag = A TAG_NONE;

params->hdr.size = 0;

}

3.2.5 调用内核

Boot Loader 调用Linux 内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到MEM_START+0x8000 地址处。在跳转时,下列条件要满足:

1.CPU 寄存器的设置:

·R0=0;

@R1=机器类型ID;关于Machine Type Number,可以参见linux/arch/arm/tools/mach

-types。

@R2=启动参数标记列表在RAM 中起始基地址;

2.CPU 模式:

·必须禁止中断(IRQs和FIQs);

·CPU 必须SVC 模式;

3.Cache 和MMU 的设置:

·MMU 必须关闭;

·指令Cache 可以打开也可以关闭;

·数据Cache 必须关闭;

如果用C 语言,可以像下列示例代码这样来调用内核:

void (*theKernel)(int zero, int arch, u32 params_addr)

= (void (*)(int, int, u32))KERNEL_RAM_BASE;

……

theKernel(0, ARCH_NUMBER, (u32) kernel_params_start);

注意,theKernel()函数调用应该永远不返回的。如果这个调用返回,则说明出错。

嵌入式BootLoader技术内幕(三)

四、关于串口终端

在boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能

更令人激动了。此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。(2) 运行在host 端的终端仿真程序

对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。

此外,有时也会碰到这样的问题,那就是:在boot loader 的运行过程中我们可以正确地

向串口终端输出信息,但当boot loader 启动内核后却无法看到内核的启动输出信息。对

这一问题的原因可以从以下几个方面来考虑:

(1) 首先请确认你的内核在编译时配置了对串口终端的支持,并配置了正确的串口驱动程序。

(2) 你的boot loader 对串口的初始化设置可能会和内核对串口的初始化设置不一致。此外,对于诸如s3c44b0x 这样的CPU,CPU 时钟频率的设置也会影响串口,因此如果boo t loader 和内核对其CPU 时钟频率的设置不一致,也会使串口终端无法正确显示信息。

(3) 最后,还要确认boot loader 所用的内核基地址必须和内核映像在编译时所用的运行

基地址一致,尤其是对于uClinux 而言。假设你的内核映像在编译时用的基地址是0xc0 008000,但你的boot loader 却将它加载到0xc0010000 处去执行,那么内核映像当然不

能正确地执行了。

五、结束语

Boot Loader 的设计与实现是一个非常复杂的过程。如果不能从串口收到那激动人心的

"uncompressing linux

.................. done,

booting the kernel……"。

基于U-boot 构建嵌入式系统的BootLoader

来源: https://www.doczj.com/doc/fb1892044.html,

摘要:BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,通过它将操作系统和硬件平台衔接在一起。由于BootLoader 与硬件平台联系紧密,所以嵌入式系统一般很难有通用的BootLoader。u-boot 是一款时下非常流行,功能强大的BootLoader,可以支持多种体系结构。本文详细介绍u-boot 的功能,特点以及在MPC8xx 处理器上的移植过程。

关键词:BootLoader;u-boot;嵌入式系统;移植

0 引言

为了使Linux 更加灵活,并且保证内核的独立性,Linux 内核已经不再包括BootLoader 的代码。从软件角度来看一个嵌入式Linux 系统可以分为四个层次,即:BootLoader,parameters(内核启动参数),Kernerl(内核),root filesystem(根文件系统)和用户应用程序,固态存储设备空间分配结构图BootLoader 是系统上电后首先获得执行的一小段代码程序,它主要用于由硬件系统启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU,内存,堆栈等,然后把操作系统内核映像从硬盘读入RAM 中,跳到操作系统内核的入口点处运行,即开始启动操作系统[1]。

1 BootLoader 介绍

由于BootLoader 与CPU 及电路板的硬件配置息息相关经济学,因此不可能有通用的BootLoader,开发时需要用具针对具体环境进行相关配置。嵌入式系统中常用的BootLoader 有armboot,redboot,u-boot,blob 等。在嵌入式PowerPC 平台上,功能最强的莫过于U-boot 了,它支持TFTP 协议,Bootp 协议等多种协议,可以从网络引导Linux,并且包含了烧录Flash,测试硬件等多种功能。一个典型的u-boot 可以支持的主要功能有:

系统引导:支持NFS 挂载,Ramdisk(压缩或者非压缩)形式的根文件系统;·基本的辅助功能:强大的操作系统接口功能;可灵活设置,传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求,尤其对Linux 支持最为强劲;支持目标板环境参数多种存储方式,如FLASH,NVRAM,EEPROM;CRC32 校验,可校验FLASH 中内核,Ramdisk 中镜像文件是否完好;·设备驱动:串口;·启动指令/数据Cache;·设置堆栈指针;·设置引导参数区域并构造引导参数结构和标记;·执行POST(加电自检)来标识存在的设备并报告任何问题;·为电源管理提供挂起/恢复支持;·跳转到内核的出口点处。

1.1 Bootloader 所支持的CPU 和嵌入式开发板

不同的CPU 体系结构均有不同的Bootloader,但是有些Bootloader 也支持多种体系计算机结构的CPU。要想让运行在一块嵌入式板上的Bootloader 程序也能运行在另一块嵌入式板上,通常需要修改Bootloader 的源程序。

1.2 Bootloader 的安装媒介

系统加电或复位后,通常所有的CPU 都从某个由CPU 制造商预先安排的地址上取指令。

比如,基于ARM7TDMI core 的CPU 在复位时通常都从地址0x00000000 取它的第一条指令。

基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(如如ROM、E2PROM 或flash 等)被映射到这个预先安排的地址上。因此在系统加电后, CPU 将首先执行Bootloader程序。

1.3 用来控制Bootloader 的设备或机制主机与目标机之间

一般通过串口建立连接。Bootloader 软件在执行时通常会通过串口来进行I/O。

1.4 Bootloader 的操作模式

1)启动加载(bootloading)模式,也称为自主模式,即Boot-loader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并无用户介入。嵌入式产品发布时

Bootloader 显然必须工作在这种模式下。

2)下载(downloading)模式,目标机上的Bootloader 将通过串口连接或网络连接等通信手段从主机(host)下载文件,如下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader 保存到目标机的RAM 中,然后再被Boot-loader 写到目标机上的flash 类固态存储设备中。

1.5 Bootloader 与主机进行文件传输

所用通信设备及协议最常见的情况就是,目标机上的Bootloader 通过串口与主机之间进行文件传输,传输协议通常是xmodem /ymodem /zmo-dem 协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助TFTP 协议来下载文件是个更好的选择,这也是U-boot 所采用的方式。

1.6 Bootloader 的主要任务与典型结构

框架从操作系统的角度看, Bootloader 的总目标就是正确地调用内核来执行。另外,Bootloader的实现依赖于CPU 的体系结构,因此大多数Bootloader 都分为stage1 和stage2 两大部分。依赖于CPU 体系结构的代码,如设备初始化代码等,通常都放在stage1 中,用汇编语言来实现。

通常stage2 用C语言来实现。这样可以实现更复杂的功能,代码会具有更好的可读性和可移植性[2]。

(1)bootloader 的stage1在stage1 中bootloader 主要完成以下的工作:

·基本的硬件初始化,包括屏蔽所有的中断,设置CPU 的速度和时钟频率,RAM 初始化,初始化LED,关闭CPU 内部指令和数据cache 灯。

·为加载BootLoader 的stage2 可执行映像准备RAM 空间。通常为了获取更快的执行速度,把stage2 加载到RAM 空间来执行。因此为了加载bootloader 的stage2 要提前准备好一段可用的RAM 空间范围。

·拷贝Boot Loader 的stage2 可执行映像到RAM 空间中。设置好堆栈指针SP,这是为执行stage2 的C 语言代码做准备。

·跳转到stage2 的C 入口点。

(2)bootloader 的stage2·用汇编语言跳转到Main 函数入口点处。

·由于stage2 的代码通常是用C 语言来实现的,目的是实现更复杂的功能和实现更好的代码的可读性和可移植性。但是与普通的 C 语言应用程序不同的是,在编译和链接Bootloader 这样的应用程序时,不能使用glibc 库中的任何支持函数。

·初始化本阶段要是用的硬件设备,包括初始化串口,初始化定时器等,在初始化这些设备之前,可以输出一些打印信息。

·检测系统的内存映射,所谓内存映射就是指在整个物理地址空间里面指定哪些地址范围被分配用来寻址RAM 单元。

·加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从FLASH 中拷贝的数据。

·设置内核的启动参数。

Flash 和RAM 中的地址空间分配如下图所示,从低地址到高地址依次是Bootloaderstage1 的可执行映象,Bootloader stage1 的可执行映像,内核映像以及RAMDISK。由于Bootloader stage2 是在RAM 中执行的,故还需要在RAM 的地址空间开辟一块地址范围用于存放Bootloader stage2 的可执行映像,执行时由堆栈指针sp 来完成跳转功能[3]。

2 u-boot 简介

U-Boot,全称Universal Boot Loader,是遵循GPL 条款的开放源码项目教育。从FADSROM、8xxROM、PPCBOOT 逐步发展演化而来。其源码目录、编译形式与Linux 内

核很相似,事实上,不少U-Boot 源码就是相应的Linux 内核源程序的简化,尤其是一些设备的驱动程序支持Linux 系统,NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS 嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris,Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot 中Universal 的一层含义,另外一层含义则是U-Boot 除了支持PowerPC 系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale 等诸多常用系列的处理器。U-Boot 对PowerPC 系列处理器支持最为丰富,对Linux 的支持最完善[4]。

2.1 U-boot 的特点

(1).开放源码;(2).支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS,LynxOS;(3).支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;

(4).较高的可靠性和稳定性;(5).高度灵活的功能设置,适合U-Boot 调试、操作系统不同引导要求、产品发布等;(6).丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;(7).较为丰富的开发调试文档与强大的网络技术支持。

2.2 U-boot 主要目录结构

了解U-boot 源代码的目录结构是非常重要的,因为在向开发板上移植时,往往需要结合具体板的信息来作出相应的修改。而如何修改、在何处修改就需要对U-boot 的目录结构有很深的认识。以下是它的目录结构以及目录存放代码的用途:

board--目标板相关文件,主要包含SDRAM、Flash 驱动;common--独立于处理器体系结构的通用代码,如内存大小探测与故障检测;cpu--与处理器相关的文件,如mpc8xx 子目录下含串口、网口、LCD 驱动及中断初始化等文件;driver--通用设备驱动,如CFI Flash 驱动(目前对Intel Flash 支持较好);doc--U-Boot 的说明文档;examples--可在U-Boot 下运行的示例程序;如hello_world.c,timer.c;include--U-Boot 头文件,configs 子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;lib_xxx--处理器体系相关的文件,如lib_ppc 目录包含与PowerPC 体系结构相关的文件;net--与网络功能相关的文件目录,如bootp、nfs、tftp;post--上电自检文件目录,尚有待于进一步完善;rtc--RTC 驱动程序;tools--用于创建U-Boot S-RECORD 和BIN 镜像文件的工具;xxx_config.mk--与处理器体系相关的编译或者链接选项;Makefile--U-Boot 的主makefile。

3 u-boot 的移植

要点本文主要探讨以TC320ER 项目为例来移植U-boot 的过程,关于如何在Linux 环境下建立PowerPC 开发环境不进行过多赘述。这里处理器采用的是PowerPC 体系下的MPC859DSL,1 片8MB 的AM29LV320MB FLASH,2 片16MB 的IC42S16800 SDRAM,操作系统采用Red Hat Enterprise 4 ,交叉编译器为linux-gcc-3.4.4-2 以及源代码为u-boot-1.1.4,来完成u-boot引导程序的分析和移植。

3.1 建立开发板

在U-boot 的board 目录下就是其支持的开发板,数量非常多。这里我们选择TQM866M 开发板作为蓝本,在该开发板的基础上进行移植,能够降低移植工作的难度,减少移植的工作量。

3.1.1 在board 下建立开发板目录

(1).修改Makefile 文件,添加我们自己开发板的配置信息:

在Makefile 中找到TQM866M 的配置信息,在下面加上与TC320ER 相关的信息

(2).建立开发板的头文件tc320er.h,用以下命令建立tc320er.h:

[u-boot-1.1.4]$ cp include/configs/TQM866M.h include/configs/Giga_Switch.h(3).建立tc320er 开发板的私有目录,即把TQM8xx 目录下的所有文件拷贝到tc320er目录下,包括Makefile,用以下命令实现:

[u-boot-1.1.4]$cp -rf board/tqm8xx board/tc320er[u-boot-1.1.4]$mv -f board/tc320er/tqm8xx.c board/tc320er/tc320er.c3.1.2 试编译u-boot(1).选定tc320er 作为编译的对象:

[u-boot-1.1.4]$ make tc320er_config则在include/生成config.mk 文件和config.h 文件,其内容如下:

ARCH = ppcCPU = mpc8xxBOARD = tc320er说明我们自己的开发板的头文件已经被包含了。

(2).设置编译工具,我们的编译工具是ppc_8xx-,因此要在Makefile 文件里做相应的修改:

将ifeq($(ARCH),PPC)CROSS_COMPILE = powerpc-linux-修改为:

ifeq($(ARCH),PPC)CROSS_COMILE = ppc_8xx-(3).执行make。如果可以完成u-boot 编译的全过程,说明tc320er 移植框架成功建立。

但是显然现在编译生成的这个U-boot.bin 仍然不适合我们的开发板,实际上它还是为TQM866M 开发板设计的源代码[5]。

3.2 结合具体开发板

修改文件一般来说,虽然U-boot 可以支持很多开发板,但是在开发时有些文件还是要注意结合开发板的具体信息来修改,以下是需要注意修改的几个地方。

3.2.1 开发板的配置文件

在source insight 中添加相应的文件并新建一个工程project。工程建立后在软件中进入/include/configs/tc320er.h 即我们开发板的头文件,可以找到:

#define CONFIG_MPC8661 /* This is a MPC866 CPU*/#define CONFIG_TQM866M1/* ...on a TQM8xxM module*/这是定义用户的CPU 类型和板子类型,系统中是使用MPC866 CPU,TQM8xxM 板子,而我们所要使用的是MPC859DSL CPU 和自己的板子。所以应该将这两句话修改为:

#define CONFIG_MPC859DSL 1 /*This is MPC859DSL CPU */#define CONFIG_TC320ER 1 /*...on a tc320er module*/这样,系统就会自动寻找CPU 和板子的相关信息。

3.2.2 Flash 的设置

在TC320ER 工程中我们用到了1 片8MB 的AM29LV320MB FLASH,如果开发板的flash 和所选择的相近开发板并不相同,就需要在/board/tc320er/flash. c 作相应修改。该程序主要完成的功能包括Flash 初始化、打印Flash 信息、Flah 擦除和Flash 写入等操作。这里主要修改flash 型号,它包括如下几个函数:

unsignedlongflash_init(void),Flash 初始化;voidflash_print_info(flash_info_t*info),打印Flash 信息;intflash_erase(flash_info_t*info,ints_first,ints_last),Flash 擦除;volatilestaticintwrite_dword(flash_info_t*info,ulongdest,ulongdata),Flash 写入;intwrite_buff(flash_info_t*info,uchar*src,ulongaddr,ulongcnt),从内存复制数据。

与启动Flash 相关的寄存器BR0、OR0 的参数设置,应根据目标板Flash 的数据手册与BR0 和OR0 的相关位含义进行合理设置。这不仅关系到Flash 能否正常工作,而且与串口调试有直接的关联。

此外,不同的目标板对U-Boot 在Flash 中存放地址的要求不尽相同。事实上,这是由处理器中断复位向量来决定的,与主板硬件相关。对MPC8xx 主板来讲,就是由硬件配置字(HRCW)决定的。也就是说,U-Boot 烧写具体位置是由硬件决定的,而不是程序设计来选择的。程序中相应U-Boot 起始地址必须与硬件所确定的硬件复位向量相吻合,因此,U-Boot的BIN 镜像文件必须烧写到Flash 的起始位置。事实上,大多数的PPC 系列的处

理器中断复位向量是0x00000100 和0xfff00100。这也是一般所说的高位启动和低位启动的Bootloader所在位置。可通过修改tc320er.h 头文件中CFG_MONITOR_BASE 和board/tc320er/config.mk中的TEXT_BASE 的设置来与硬件配置相对应。

3.2.3 SDRAM 的设置

SDRAM 要修改的地方主要是初始化内存控制器部分,由start.s 文件中的cpu_init_crit 完成cpu cache 的设置,并由board/tc320er/memsetup.s 中的memsetup.s 完成初始化sdram。

当串口能输出以后,U-Boot 移植是否顺利基本取决于SDRAM 的驱动是否正确。与串口调试相比,这部分工作更为重要,难度更大。MPC8xx 目标板SDRAM 驱动涉及三部分。一是相关寄存器的设置;二是UPM 表;三是SDRAM 上电初始化过程。任何一部分有问题,都会影响U-Boot、嵌入式操作系统甚至应用程序的稳定、可靠运行。所以说,SDRAM 的驱动不仅关系到U-Boot 本身能否正常运行,而且还与后续部分相关,是相当关键的部分。

3.2.4 以太网接口的配置

在tc320er 中我们只使用FEC 网络接口,未使用SCC_ETHERNET,所以在tc320er.h 文件的最后将SCC_ETHERNET 的宏定义删除。

删除:

#define CONFIG_SCC1_ENET#define CONFIG_ETHPRIME "SCC ETHERNET"然后进入Fec.c 文件中,我们需要配置PORT A 为MII 接口(Configure port A for MII),而源代码是配置的D PORT,所以我们须进行修改:

修改其中的#elif !defined(CONFIG_ICU862) && !defined(CONFIG_IAD210)为:

#elif !defined(CONFIG_ICU862)&& !defined(CONFIG_IAD210)&& !defined(CONFIG_TC320 ER)Mii 管理帧寄存器(MII_DATA):用于和mii 兼容的PHY 设备进行通信,向mii 寄存器提供读写通道。

Mii 速度控制寄存器(MII_SPEED):提供mii 始终频率控制,使得mii 管理帧发挥作用。

3.3 编译生成目标文件

先运行make distclean,[u-boot-1.1.4]$ make distclean然后运行make tc320er_config,[u-boot-1.1.4]$ make tc320er_configConfiguring for tc320er board...

再运行make,[u-boot-1.1.4]$ make之后会生成三个文件:

(a).u-boot--ELF 格式的文件,可以被大多数Debug 程序识别;(b).u-boot.bin--二进制bin 文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;(c).u-boot.srec--Motorola S-Record 格式,可以通过串行口下载到开发板中。

3.4 下载Bootloader并启动

为了减少Flash 的烧写次数,在调试过程中,并不直接将U-Boot、kernel 映象和文件系统ramdisk 映象烧写到Flash,再从Flash 加载到SDRAM 中运行,而是采取直接将它们从主机下载到目标板的SDRAM 中运行,成功之后再烧写到Flash 中去。在U-Boot 的移植过程中,需要反复下载引导程序和kernel 映象到SDRAM 中进行分析、调试和跟踪,采用jtag 仿真器和x-modem 下载都会比较慢,费时费力,通过tftp 方式下载会速度快、可靠性好。移植完成后,重新启动,若正常就会从串口中看到如下图3 信息,说明Bootloader 已经运行成功了。

Bootloader启动结论U-boot 能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader 完全依赖硬件平台,所以在新电路板上需要移植U-boot 程序。对于没有包括的或者新的开发板,处理的办法就是选择一款相近的开发板,在其基础上进行相应的修改。Bootloader 是操作系统和硬件的枢纽,开发人员除了要掌握Bootloader 的结构和工作流

基于AT89C51控制的0.01℃数显温度计的设计

万方数据

万方数据

万方数据

基于AT89C51控制的0.01℃数显温度计的设计 作者:罗兴垅, 黄隆胜, Lou Xinglong, Huang Longsheng 作者单位:罗兴垅,Lou Xinglong(341000,江西赣州,赣南师范学院物理与电子信息科学系), 黄隆胜,Huang Longsheng(341000,江西赣州,赣南师范学院物理与电子信息科学系;341000,江西赣 州,江西理工大学机电工程学院) 刊名: 微计算机信息 英文刊名:CONTROL & AUTOMATION 年,卷(期):2006,22(14) 被引用次数:12次 参考文献(3条) 1.万永波;张根宝;田泽;杨峰基于ARM的嵌入式系统Bootloader启动流程分析[期刊论文]-微计算机信息 2005(11) 2.谈文心;钱聪;宋云购模拟集成电路原理及应用 1995 3.潘学军0.01℃的数显温度计[期刊论文]-物理实验 2003(05) 引证文献(12条) 1.姚勇哲.张荣.邹志荣.张智日光温室温湿度自动监测预警器的研制[期刊论文]-农机化研究 2010(2) 2.符时民.于震数显测温系统设计与特性的研究[期刊论文]-辽宁石油化工大学学报 2010(2) 3.李铁军.何永洪基于单片机的IC卡系统设计[期刊论文]-微型机与应用 2009(21) 4.任小青.王晓娟基于AT89C51单片机的频率计设计方法的研究[期刊论文]-青海大学学报(自然科学版) 2009(2) 5.关玉明.程琪.肖艳春.姜云峰触摸屏变频器与PLC在调速系统中的设计[期刊论文]-机械设计与制造 2009(3) 6.关玉明.程琪.杨戈.姜云峰基于AT89C51的锌空电池温控系统设计[期刊论文]-微计算机信息 2008(32) 7.高海东.钱江基于HT48R30A-1的自动寻星系统[期刊论文]-微计算机信息 2008(29) 8.李邕数字式热敏电阻温度计设计[期刊论文]-甘肃科技纵横 2008(1) 9.张平川.许兴广基于单片机电热水器模糊控制系统设计[期刊论文]-微计算机信息 2007(32) 10.李宝营.赵永生.祖龙起.牛悦苓基于单片机的等精度频率计设计[期刊论文]-微计算机信息 2007(26) 11.肖艳军.程琪.许波基于AT89C51单片机的自动纠偏仪的设计[期刊论文]-微计算机信息 2007(23) 12.李学聪.万频.邓庆华.李军一种新型温盐深传感器的数据采集与应用[期刊论文]-微计算机信息 2007(10) 本文链接:https://www.doczj.com/doc/fb1892044.html,/Periodical_wjsjxx200614026.aspx

嵌入式系统原理与应用技术

1.嵌入式系统的定义:一般都认为嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,可满足应用系统对功能、可靠性、成本、体积和功能有严格要求的专用计算机系统。 2.嵌入式系统的特征:(1)通常是面向特定应用的。具有功耗低、体积小和集成度高等特点。(2)硬件和软件都必须高效率地设计,量体裁衣,力争在同样的硅片面积上实现更高的性能,这样才能满足功能、可靠性和功耗的苛刻要求。(3)实时系统操作支持。(4)嵌入式系统与具体应用有机结合在一起,升级换代也同步进行。(5)为了提高运行速度和系统可靠性,嵌入式系统中的软件一般固化在存储器芯片中。 3.ARM嵌入式微系统的应用:工业控制、网络系统、成像和安全产品、无线通信、消费类电子产品。 4.ARM嵌入式微处理器的特点:(1)体积小、低功耗、低成本、高性能。(2)支持Thumb(16位)/ARM(32位)双指令集,兼容8位/16位器件。(3)使用单周期指令,指令简洁规整。(4)大量使用寄存器,大多数数据都在寄存器中完成,只有加载/存储指令可以访问存储器,以提高指令的执行效率。(5)寻址方式简单灵活,执行效率高。(6)固定长度的指令格式。 5.嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、用户软件构成。 2.哈佛体系结构的主要特点是将程序和数据存储在不同的存储空间。 3.嵌入式处理器主要有四种嵌入式微处理器(EMPU)、嵌入式微控制器(MCU)、嵌入式数字信号处理器(DSP)、嵌入式片上系统(SoC) 4.ARM7采用3级流水线结构,采用冯·诺依曼体系结构;ARM9采用5级流水线结构,采用哈佛体系结构。 5.ARM处理器共有37个32bit寄存器,包括31个通用寄存器和6个状

教育部颁布高等职业学校设置标准

教育部颁布高等职业学校设置标准(暂行) 【颁布单位】教育部 【颁布日期】20000501 【实施日期】20000501 第一条 设置高等职业学校,必须配备具有较高政治素质和管理能力、品德高 尚、熟悉高等教育、具有高等学校副高级以上专业技术职务的专职校(院 )长和副校(院)长,同时配备专职德育工作者和具有副高级以上专业技 术职务、具有从事高等教育工作经历的系科、专业负责人。 第二条 设置高等职业学校必须配备专、兼职结合的教师队伍,其人数应与专 业设置、在校学生人数相适应。在建校初期,具有大学本科以上学历的专 任教师一般不能少于70人,其中副高级专业技术职务以上的专任教师人 数不应低于本校专任教师总数的20%;每个专业至少配备副高级专业技 术职务以上的本专业的"双师型"专任教师2人;每门主要专业技能课程至 少配备相关专业中级技术职务以上的专任教师2人。 第三条 设置高等职业学校,须有与学校的学科门类、规模相适应的土地和校 舍,以保证教学、实践环节和师生生活、体育锻炼与学校长远发展的需要 。建校初期,生均教学、实验、行政用房建筑面积不得低于20平方米; 校园占地面积一般应在150亩左右(此为参考标准)。 必须配备与专业设置相适应的必要的实习实训场所、教学仪器设置和 图书资料。适用的教学仪器设备的总值,在建校初期不能少于600万元 ;适用图书不能少于8万册。 第四条 课程设置必须突出高等职业学校的特色。实践教学课时一般应占教学 计划总课时40%左右(不同科类专业可做适当调整);教学计划中规定 的实验、实训课的开出率在90%以上;每个专业必须拥有相应的基础技 能训练、模拟操作的条件和稳定的实习、实践活动基地。 一般都必须开设外语课和计算机课并配备相应的设备。

bootloader

Boot Loader的启动流程和开发经验总结 Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬 件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。 1.什么是BootLoader 嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。 (1)什么是板级BSP? BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上 层OS保持正确的接口,良好的支持上层OS。 (2)什么是Boot Loader

在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。 一般来说,在嵌入式世界里BootLoader 是严重地依赖于硬件的,因此想建立一个通用的 BootLoader 几乎是不可能的。不同的 CPU 体系结构有不同的BootLoader,而且除了依赖于 CPU的体系结构外,BootLoader还依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 结构而构建的,要想让运行在一块板子上的 BootLoader 程序也能运行在另一块板子上,通常也都需要修改 BootLoader 的源程序。 2.BootLoader在PC机与嵌入式的区别比较 (1)引导程序在PC机和嵌入式上的区别 一般来说,在PC的硬件平台上,由于硬件启动根本就不是通过BootLoader(而是通过BIOS),所以BootLoader就不需要对CPU加电后的初始化做任何工作。在桌面系统中,有以下几种设备可以作为启动设备使用:硬盘、USB盘、光盘驱动器、还有网卡的Boot ROM 等。但无论选择了哪一种启动设备,操作系统都会去将该设备起始地址的内容读入内存,BIOS 将控制移交给引导装载程序。如果启动设备是IDE硬盘,这时通常将引导装载程序装入第一个扇区(通常被称做主引导扇区,MBR),然后将内容读入内存再运行。 在嵌入式平台上,引导装载程序是在硬件上执行的第一段代码,通常将引导程序放置在不易丢失的存储器的开始地址或者是系统冷启动时PC寄存器的初始值。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完

嵌入式Linux之我行——u-boot-2009_08在2440上的移植详解(六) - Bootloader移植篇 - hbhuanggang

嵌入式Linux之我行——u-boot-2009.08在2440上的移植 详解(六) 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验, 二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 ?共享资源,欢迎转载:https://www.doczj.com/doc/fb1892044.html, 一、移植环境 ?主机:VMWare--Fedora 9 ?开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 ?编译器:arm-linux-gcc-4.3.2.tgz ?u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 上接:u-boot-2009.08在2440上的移植详解(五) 10)u-boot利用tftp服务下载内核和利用nfs服务挂载nfs文件系统。 知识点: 1.tftp服务的安装与配置及测试; 2.nfs服务的安装与配置及测试; 3.u-boot到kernel的参数传递(重点)。 我们知道使用tftp下载内核和使用nfs挂载文件系统的好处是,当我们重新编译内核或文件系 统后不用重新把这些镜像文件再烧录到flash上,而是把这些镜像文件放到开发主机的tftp或nfs 服务的主目录下,通过网络来加载他们,不用频繁的往flash上烧,这样一可以保护flash的使用 寿命,二可以方便的调试内核或文件系统,提高开发效率。可见,让u-boot实现这个功能是一件很有意义的事情。 实现这样的功能很简单,网上也有很多资料。但有很多细节的东西如果稍不注意就导致失败,这里就结合本人实现的过程进行讲述和一些问题的分析。 ?tftp服务的安装与配置及测试 要使用tftp服务及测试它要安装两个软件包,一个就是tftp服务器,另外一个就是tftp客户端,这里安装客户端只是用于在主机本地测试tftp服务器是否正常运行的,来确保u-boot能够访 问tftp服务(u-boot中已有tftp客户端的功能,其实在前面几篇中都已经使用了tftp下载内核或 文件系统到开发板上,如果那里都做到了,这里就可以直接跳过)。 首先使用rpm命令查看你的主机上是否已经安装了tftp服务器和客户端,如果没有安装就去下 载这两个软件包进行安装或者可以使用yum命令进行在线安装,yum会自动的去搜索适合你主机平 台的最新软件包进行下载安装,如果主机已经安装了,则会提示软件包已经安装了最新的版本。如 下图所示:

嵌入式技术及应用各章练习答案

1.4 练习 1.嵌入式系统的定义是什么?目前业界有多少种关于嵌入式系统的定义? 答:嵌入式系统目前没有统一和权威的定义,国内一个普遍被认同的嵌入式系统定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。目前业界对于嵌入式系统至少有两到三种本质一致但表述不尽相同的定义。 2.嵌入式是由那些部分组成的?试从一个实际的产品来分析嵌入式系统的组成。 答:嵌入式系统由底层硬件模块、中间协议层、操作系统和高端应用层4部分组成。 比较直接的例子就是智能手机。智能手机中的处理器即为嵌入式处理器,RAM+ROM即为存储设备,键盘屏幕等设备即为输入输出设备,上述设备同归为底层硬件模块;Windows、Linux、Android等操作系统外加不同的应用程序即为组成中的操作系统和高端应用层;配合硬件和操作系统的驱动程序即为中间协议层。 3.简述三星公司的ARM9芯片S3C2410A的性能指标。 答:S3C2410的型号有两个,分别是S3C2410A-20和S3C2410A-26。前者的主频最高为200MHz,后者的主频最高为266MHz。 S3C2410芯片集成了大量的功能单元。 (1)核心供电1.8V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,MMU。 (2)内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。 (3)117个通用I/O。 (4)56个中断源。 (5)24个外部中断。 (6)看门狗定时器。 (7)4个PWM定时器和一个内部定时器。 (8)两个USB HOST,一个USB DEVICE(VER1.1)。 (9)SD主接口版本1.0与多媒体卡协议版本2.11兼容。 (10)一个多主I2C总线,一个I2S总线控制器。 (11)3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI。 (12)4个带外部请求线的DMA。 (13)LCD控制器,一个LCD专业DMA。 (14)电源控制模式:标准、慢速、休眠、掉电。 (15)8通道10位ADC和触摸屏接口。 (16)带日历功能的实时时钟。 (17)芯片内置PLL。 (18)设计用于手持设备和通用嵌入式系统。 (19)16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。 (20)带MMU的先进的体系结构支持WinCE、EPOC32、Linux。 (21)指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器带宽和性能的影响。 (22)ARM920T CPU核支持ARM调试的体系结构。 (23)内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。

级嵌入式技术与应用专业人才培养方案嵌入式

附件5 嵌入式技术与应用专业(物联网技术与应用方向)人才培养方案 一、招生对象及学习年限 (一)招生对象:全日制普通中学高中毕业生,招生方式为普通高考招生。 (二)学习年限:基本学制三年,实行弹性学制,学生在校时间原则上不能少于两年,总在校时间(含休学)不得超过五年。 二、培养目标 本专业培养面向中国特色社会主义建设,对接广州及珠三角地区战略性主导产业和战略性新兴产业中消费电子、工业应用、网络应用等嵌入式与物联网技术应用重点领域的人才需求,具有良好的职业道德和职业精神,掌握消费类电子产品开发、物联网系统应用开发、无线传感器网络技术及RFID技术应用项目开发等新技术,提升学生嵌入式产品设计与物联网项目开发、实施、管理、维护能力,具备“一技之长+综合素质”的德、智、体、美等方面全面发展的高素质的技术应用性人才。 三、就业岗位与就业范围 四、人才培养规格 (一)综合素质 1. 思想政治素质:掌握马克思主义科学的世界观、人生观和价值观。有坚定跟着共产党走中国特色社会主义道路的信心和决心,有热爱祖国、服务人民的理想信念。具有社会责任感,能积极践行社会主义核心价值观,拥有能够支撑职业和人生发展的思想政治素质。 2.职业素质:具有良好的职业态度和职业道德修养,具有正确的择业观和创业观。坚持职业操守,爱岗敬业、诚实守信、办事公道、服务群众、奉献社会;具备从事职业活动所必需的基本能

力和管理素质;脚踏实地、严谨求实、勇于创新。 3.人文素养与科学素质:具有融合传统文化精华、当代中西文化潮流的宽阔视野;文理交融的科学思维能力和科学精神;具有健康、高雅、勤勉的生活工作情趣;具有适应社会核心价值体系的审美立场和方法能力;奠定个性鲜明、善于合作的个人成长成才的素质基础。 4.身心素质:具有一定的体育运动和生理卫生知识,养成良好的锻炼身体、讲究卫生的习惯,掌握一定的运动技能,达到国家规定的体育健康标准;具有坚韧不拔的毅力、积极乐观的态度、良好的人际关系、健全的人格品质。 (二)职业能力 本专业主要学习微型计算机系统的软硬件基础知识、嵌入式操作系统基础知识、嵌入式系统的硬件和软件技术应用、无线传感器网络应用系统的开发、集成与维护;掌握物联网终端产品的开发与制作方法;具有的嵌入式系统设计、物联网系统设计与物联网工程施工、物联网系统的管理;具有嵌入式应用系统和物联网应用系统的开发能力、具备较强的实际工作能力,具有创新意识及进一步发展专业技能的良好基础。 本专业毕业生应获得以下几方面的知识和技能: 1. 具有比较扎实的物联网感知与标识的基本理论与技术、物联网信息处理技术; 2. 掌握物联网体系结构、数据传输与安全技术; 3. 掌握物联网系统的硬件、软件设计和开发能力; 4.具备物联网应用系统的开发和集成的能力; 5.具备无线传感器网络应用系统开发和集成的能力; 6.具备物联网系统、无线传感器网络应用系统的管理与维护的知识和技能; (三)职业拓展能力 1.掌握相关的技术标准,具备进行物联网系统及装置研发、设计、制造、运行与管理的能力; 2.具备较强的创新意识和从事物联网领域科学研究的基本能力; 3.拓展监控和安防的基本知识,掌握监控和安防技术和技能。 五、毕业标准 学生按专业人才培养方案要求修完规定的课程,考核合格,达到毕业最低总学分和《国家学生体质健康标准》相关要求,获得本专业要求的证书,准予毕业,颁发毕业证书。 (一)学分要求 本专业按学年学分制安排课程,学生最低要求修满总学分130学分。 必修课要求修满106学分,占总学分的%。 其中:基本素质课要求修满24学分,占总学分的%; 职业能力课要求修满84学分,占总学分的%。 选修课要求修满22学分,占总学分的%。 其中:基本素质课要求修满12学分,占总学分的%;

(完整版)33-高职-嵌入式技术及应用开发

附件33 高职电子信息大类嵌入式技术与应用开发赛项技能竞赛规程、评分标准及选手须知 一、竞赛内容 1.安全操作与制作工艺 参赛选手根据赛题要求在规定时间内按照安全操作规范与制作工艺,焊接、组装、调试一套功能电路板,即本赛项所规定的任务板。将焊接好的任务板安装到大赛指定的竞赛平台上。组装完成后的竞赛平台,能够在指定的安卓设备控制下完成赛项任务。 2.软件设计及功能测试 参赛选手根据赛题要求编写开发安卓应用程序,完成软件的UI界面设计、Dialog对话框设计、登录窗口设计、控件应用设计、Android资源应用、图形与图像处理、网络应用、数据处理、竞赛平台控制、结果显示等任务,能够完成赛题要求的软件功能和赛道任务。 利用平板电脑通过无线方式控制竞赛平台在赛道地图上完成二维码识别、颜色识别、拍照、超声波测距、红外通信、光照强度检测等赛道任务。与赛道任务相关的技术点主要有:NFC技术、RFID技术、ZigBee技术、无线通信、红外通信、二维码扫描、颜色识别、超声波测距、光照强度检测、光电码盘测速等。 3.时间竞速 参赛选手根据比赛要求,在赛道完成指定任务的基础上,需对程序做出合理的优化,用较短的时间完成比赛任务。 竞赛内容可参考样题(见附1) 二、竞赛方式 1.竞赛采用团队竞赛形式,不计选手个人成绩。 2.每支参赛队由3名选手组成,其中队长1名。 3.比赛期间赛场不允许指导教师现场指导和参观。 三、竞赛时量 竞赛总时长为10小时,选手休息、饮水、上洗手间等不安排专门用时,统

一计在竞赛时间内。 竞赛分两个阶段计时。 第一阶段为硬件电路制作与工艺和嵌入式程序设计与软件调试两项任务,两项任务需参赛团队分工合作,在同一时段内协同完成,时长为6小时,其中硬件电路制作与工艺需在2.5小时内完成。 第二阶段为赛道任务与功能测试任务,时长为4小时,每个参赛队有两次机会完成赛道任务,每次限时5分钟(包括选手准备时间、移动终端连接竞赛平台WIFI时间、赛道任务测试时间等),两次赛道任务之间设1小时系统调试时间。 四、名次确定办法 按照竞赛成绩从高到低排序确定名次。总分相同时,完成时间较短者名次列前;成绩和完成时间均相同时,操作过程相对规范者名次列前。 五、评分标准与评分细则 1.评分标准及分值 2.评分细则

引导加载程序

1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构我们可以知道,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Boot Loader 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。 本文将从 Boot Loader 的概念、Boot Loader 的主要任务、Boot Loader 的框架结构以及Boot Loader 的安装等四个方面来讨论嵌入式系统的 Boot Loader。 2. Boot Loader 的概念 简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。 1. Boot Loader 所支持的 CPU 和嵌入式板 每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。

三级嵌入式系统

三级嵌入式系统学习总结 一第一章 1.嵌入式系统概论 嵌入式系统中的软件一般都固化在只读存储器中,用户不能随意更改其中的程序功能。 嵌入式系统的逻辑组成:1)处理器2)存储器3)I/O设备与I/O接口4)数据总线5)软件 嵌入式处理芯片有四种类型:1)微处理器2)数字信号处理器3)微控制器(单片机)4)片上系统 微控制器MCU的低端产品并不会因为高端产品的出现而衰落 在32位MCU中,绝大多数使用RAM内核 EDA:电子设计自动化 IP核可以分为三种:软核、硬核、固核 2.嵌入式系统与数字媒体 计算机中常用的最广泛的西文字符及其编码是ASCII字符集和ASCII码,即美国标准信息交换码,共有128个字符,一个字符占一个字节。 我国目前广泛使用的汉字编码国家标准有GB2312和GB18030 GB2312只有6763个汉字,不够用 GB18030字符集与国际标准UCS/Unicode字符集基本兼容。GB18030采用不等长的编码方法,单字节编码表示ASCII码,双字节编码表示汉字,与GB2312保持向下兼容,四字节编码表示其他字符 Unicode最新版本是6.3。UCS/Unicode在计算机中具体实现时采用不同的编码方案,最常用的是UTF-8和UTF-16,UTF-8采用的是单字节可变长编码;UTF-16采用的是双字节可变长编码 文本的类型可以分为简单文本、丰富格式文本、超文本 图像的数据量=图像水平分辨率*图像垂直分辨率*像素深度/8(像素深度指的是每个像素用多少个二进制数来表示) 数字视频的数据量非常大,在进行传输时必须进行压缩,压缩编码标准是国际标准化组织(ISO)制定的,其名称为MPEG。 无线局域网采用的协议主要是IEEE 802.11(俗称WIFI) 3.数字通信与计算机网络 微波是一种300MHz-300GHz的电磁波 计算机网络的组成:1)计算机等智能电子设备2)数据通信链路3)通信协议4)网络软件 以太局域网: 1)发送数据设备必须把要传输的数据分成小块(帧)进行传输,一次只能传输1帧; 2)局域网中的每一个终端都有自己唯一的标识,称为物理地址或MAC地址,在发送的每一帧数据中,必须包含自己的MAC地址和接收终端的MAC地址 3)IP协议定义了主机的概念,所有主机及使用一种统一格式的地址标识,称为IP地址。4)以太局域网大多是由集线器或者交换机组网 计算机网络的类型:1)局域网2)城域网2)广域网 IP地址分为A、B、C三类。 IP是由四段数字组成,共32位,8位一段。 A类IP段0.0.0.0 到127.255.255.255 (0段和127段不使用)

我国嵌入式技术的发展和现状

学号:20097610144 班级:09级1班 姓名:王丹

我国嵌入式技术的现状与发展 嵌入式系统是计算机的一种应用形式,通常指埋藏在宿主设备中的微处理机系统,此类计算机一般不被设备使用者在意,亦称埋藏式计算机,典型机种如微控制器、微处理器和DSP等。 随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。美国著名未来学家尼葛洛庞帝在1999年1月访华时预言,4~5年后嵌入式智能(电脑) 工具将是PC和因特网之后最伟大的发明。我国著名嵌入式系统专家沈绪榜院士98年11月在武汉全国第11次微机学术交流会上发表的《计算机的发展与技术》一文中,对未来10年以嵌入式芯片为基础的计算机工业进行了科学的阐述和展望。1999年世界电子产品产值已超过12000亿美元,2000年达到13000亿美元,预计2005年,销售额将达18000亿美元。 进入20世纪90年代,嵌入式技术全面展开,目前已成为通信和消费类产品的共同发展方向。在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,美国已开始由模拟电视向数字电视转变,欧洲的DVB(数字电视广播)技术已在全球大多数国家推广。数字音频广播(DAB)也已进入商品化试播阶段。而软件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品中,都离不开嵌入式系统技术。像前途无可计量的维纳斯计划生产机顶盒,核心技术就是采用32位以上芯片级的嵌入式技术。在个人领域中,嵌入式产品将主要是个人商用,作为个人移动的数据处理和通讯软件。由于嵌入式设备具有自然的人机交互界面,GUI屏幕为中心的多媒体界面给人很

大的亲和力。手写文字输入、语音拨号上网、收发电子邮件以及彩色图形、图像已取得初步成效。 目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。近期长虹推出的ADSL产品,结合网络,控制,信息,这种智能化,网络化将是家电发展的新趋势。 硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX和Nuclear等产品。我国自主开发的嵌入式系统软件产品如科银(CoreTek)公司的嵌入式软件开发平台Delta System,中科院推出的Hopen嵌入式操作系统(虽然还不够完善)。同时由于是研究热点,所以我们可以在网上找到各种各样的免费资源,从各大厂商的开发文档,到各种驱动,程序源代码,甚至很多厂商还提供微处理器的样片。这对于我们从事这方面的研发,无疑是个资源宝库。对于软件设计来说,不管是上手还是进一步开发,都相对来说比较容易。这就使得很多生手能够比较快的进入研究状态,利于发挥大家的积极创造性。

《高等职业学校设置标准(暂行)》

关于颁布《高等职业学校设置标准(暂行)》的通知 教发(2000〕41号 各省、自治区、直辖市人民政府,国务院有关部委、直属机构: 根据《国务院办公厅关于国务院授权省、自治区、直辖市人民政府审批设立 高等职业学校有关问题的通知》(国办发〔2000〕3号)有关精神,现颁布《高等职 业学校设置标准(暂行)》(见附件),请你们认真贯彻执行。 教育部二000年三月十五日 第一条设置高等职业学校,必须配备具有较高政治素质和管理能力、品德高尚、熟悉高等教育、具有高等学校副高级以上专业技术职务的专职校(院)长和副校(院)长,同时配备专职德育工作者和具有副高级以上专业技术职务、具有从事高等教育工作经历的系科、专业负责人。 第二条设置高等职业学校必须配备专、兼职结合的教师队伍,其人数应与专业设置、在校学生人数相适应。在建校初期,具有大学本科以上学历的专任教师一般不能少于70人,其中副高级专业技术职务以上的专任教师人数不应低于本校专任教师总数的20%;每个专业至少配备副高级专业技术职务以上的专任教师2人,中级专业技术职务以上的本专业的"双师型"专任教师2人;每门主要专业技能课程至少配备相关专业中级技术职务以上的专任教师2人。 第三条设置高等职业学校,须有与学校的学科门类、规模相适应的土地和校舍,以保证教学、实践环节和师生生活、体育锻炼与学校长远发展的需要。建校初期,生均教学、实验、行政用房建筑面积不得低于20平方米;校园占地面积一般应在150 亩左右(此为参考标准)。

必须配备与专业设置相适应的必要的实习实训场所、教学仪器设备和图书资料。适用的教学仪器设备的总值,在建校初期不能少于600万元;适用图书不能少于8万册。 第四条课程设置必须突出高等职业学校的特色。实践教学课时一般应占教学计划总课时40%左右(不同科类专业可做适当调整);教学计划中规定的实验、实训课 的开出率在90%以上;每个专业必须拥有相应的基础技能训练、模拟操作的条件和稳定的实习、实践活动基地。 一般都必须开设外语课和计算机课并配备相应的设备。 第五条建校后首次招生专业数应在5个左右。 第六条设置高等职业学校所需基本建设投资和正常教学等各项工作所需的经费,须有稳定、可靠的来源和切实的保证。 第七条新建高等职业学校应在4年内达到以下基本要求: l、全日制在校生规模不少于2000人; 2、大学本科以上学历的专任教师不少于100人,其中,具有副高级专业技术职务以上的专任教师人数不低于本校专任教师总数的25%; 3、与专业设置相适应的教学仪器设备的总值不少于1000万元,校舍建筑面积不低于6万平方米,适用图书不少于15万册; 4、形成了具有高等职业技术教育特色的完备的教学计划、教学大纲和健全的教学管理制度。 对于达不到上述基本要求的学校,视为不合格学校进行。适当处理。

(完整版)职业技术学校“十三五”发展规划

职业技术学校“十三五”发 展规划 “十三五”是全面完成学校省级示范性高职院校建设、进一步深化教育教学改革、不断提升综合实力与办学水平的关键时期。随着区域经济社会的快速发展,科技进步与产业转型升级步伐的不断加快,市场体制与教育教学改革的不断深入,对我校改革建设与人才培养工作提出了越来越高的要求。科学编制与实施学校“十三五”规划,对于进一步统一思想认识、明确工作重点、采取积极措施、实现建设目标,不断提高人才培养质量与社会服务能力,实现学校持续、稳步、健康发展,具有十分重要的意义。 一、规划编制的背景与依据 1.学校发展的外部环境“十三五”时期,是全面深化改革,全面推进依法治国,全面建设小康社会、加快推进社会主义现代化的关键时期。世界经济格局的深刻变化,经济增长方式的加快转变,科学技术进步的日新月异,人力资源竞争的日趋激烈,国家经济建设、政治建设、文化

建设、社会建设以及生态文明建设的全面推进,都对高素质人才培养提出了越来越高的要求,凸显了加快学校改革、建设与发展的重要性和紧迫性。《国家中长期教育改革和发展规划纲要》提出了“发展职业教育是推动经济发展、促进就业、改善民生、解决‘三农’问题的重要途径,必须摆在更加突出的位置”的职教工作意义,明确了“健全多渠道投入机制,加大职业教育投入,不断优化高等教育结构,重点扩大应用型、复合型、技能型人才培养规模”的职教发展方向。表明国家在未来的若干年内,将进一步加大职业教育的投入力度,积极推进合作办学、合作育人、合作就业、合作发展,大力增强高职教育办学活力,为高职教育的当前改革和长远发展提供了政策依据,为加快我校建设与发展带来新的机遇。未来五年,XX乃至全省将充分发挥经济、社会、科技、教育、智力等优势,加快产业结构的战略性调整,加速国民经济和社会信息化进程,全面提升区域整体竞争力、综合创新力和服务水平。在经济与产业结构迅速向技术密集型、知识密集型产业转化过程中,对技术应用型和技能型人才的需求将日益走向多元化,这为我校举办学历教育、继续

2018嵌入式技术与应用专业就业方向与就业前景分析

2018嵌入式技术与应用专业就业方向与就业前景分析 嵌入式技术与应用专业培养系统掌握嵌入式计算机软硬件基本理论、知识和技能,具有嵌入式产品的设计、研发、测试、售后技术支持与服务方面的实用型人才。 2、嵌入式技术与应用专业就业方向 本专业学生毕业后可以从事家用电子、汽车电子、医疗电子、电信等行业的计算机应用设计开发,担任嵌入式产品及应用系统的设计与开发工程师,从事嵌入式技术的应用项目设计开发、产品维护与技术服务等工作。嵌入式技术与应用专业毕业生主要职业岗位:主要工作任务相关职业资格证书1.嵌入式软件应用开发(核心岗位)搭建开发平台和建立开发环境具备计算机软硬件的基本知识用户需求分析。 从事行业: 毕业后主要在电子技术、新能源、建筑等行业工作,大致如下: 1电子技术/半导体/集成电路 2新能源 3建筑/建材/工程 4仪器仪表/工业自动化 5互联网/电子商务 6计算机软件 7其他行业 8通信/电信/网络设备 工作城市: 毕业后,深圳、广州、北京等城市就业机会比较多,大致如下:

1深圳 2广州 3北京 4上海 5武汉 6南宁 7厦门 8杭州 3、嵌入式技术与应用专业就业前景 嵌入式系统的广泛应用带来的必然是对相关技术人才的极大需求,然而与这组逐年攀升的数字呈现对比的是国内嵌入式软件领域技术人员的极度匮乏。在中国的各大跨国公司及国内家电巨头如intel、ti、sony、三星、tcl、联想和康佳等企业,都面临着嵌入式人才严重短缺的问题。ccid最近的一次调查显示,中国嵌入式软件行业存在每年至少50万人才的巨大缺口,并且这个数字还在以每年20%的速度递增。 与此相比,国内嵌入式软件人才供应量正可谓是“杯水车薪”,远远不能满足行业的需要。一方面是需求的增长,一方面则是掌握嵌入式软件开发技能的人才供应缺口巨大。嵌入式技术与应用专业毕业生收入为:从收入上来说,嵌入式人才是当之无愧的白领。据调查,初入门的嵌入式开发人员月薪一般都能达到3000-7000元,中级开发人员月薪在万元以上,有5年工作经验的高级嵌入式工程师年薪在30万元左右。嵌入式技术与应用专业毕业生就业概况为:从事嵌入式linux系统移植、驱动开发、应用开发。 嵌入式系统是当前最热门、发展前途的it应用领域之一。包括手机、电子字典、可视电话、数字相机(dc)、数字摄像机(dv)、u-disk、机顶盒(settopbox)、高清电视(hdtv)、游戏机、智能玩具、汽车电子、家电控制系统等都是典型的嵌入式系统。

高等职业技术学院可行性研究报告

高等职业技术学院可行性研究报告

某某高等职业技术学院可行性研究报告 目录 第一章总论 ...................................................... 一、项目概况 .................................................... 二、项目编制依据 ................................................ 三、项目编制范围 ................................................ 四、项目提出的理由 .............................................. 第二章项目建设背景、必要性及可行性分析 ......................... 一、项目建设背景 ............................................. 二、项目建设的必要性 ........................................... 三、项目建设的可行性 ........................................... 第三章项目选址及建设条

件 ........................................ 一、项目选址 ................................................... 二、项目建设条件 ............................................... 第四章项目建设方案 .............................................. 一、规划原则 ................................................... 二、规划指导思想 ............................................... 三、规划理念 ................................................... 四、规划布局 ................................................... 五、建设方案 ................................................... 第五章 给排水及电气设计.......................................... 一、给排水设计.................................................

Boot_Loader介绍

Boot Loader Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。 1.什么是BootLoader 嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。 (1)什么是板级BSP? BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上层OS保持正确的接口,良好的支持上层OS。 (2)什么是Boot Loader 在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。

嵌入式系统BOOTLOADER的设计与实现

复旦大学 硕士学位论文 嵌入式系统BOOTLOADER的设计与实现 姓名:朱晶 申请学位级别:硕士 专业:计算机应用技术 指导教师:涂时亮 20040427

摘要y- 一 651830 嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的工作和生活中,它在当今的应用正变得越来越广泛。BOOTLOADER作为嵌入式系统软件的重要组成部分,对它的研究和实现无疑也具有重要的现实意义。 本文首先对嵌入式系统BOOTLOADER的特点和作用进行了介绍。然后从嵌入式系统的角度对如何实现BOOTLOADER进行了比较全面的分析。 本文对嵌入式系统的硬件初始化,串u驱动及传输协议,网口驱动及传输协议,USB驱动及传输协议,FLASH的驱动等等都做了比较洋细的分析。并结合EV4480丌发板,给出了实现的具体细节。 最后,对已经实现的BOOTLOADER进行了测试和评估,并就今后的改进方向提出了自己的意见。 关键字:嵌入式系统;BOOTLOADER;UCLINUX

Abstract Virtuallyeveryelectronicdevicedesignedandmanufacturedtodayisallembeddedsystem.Briefly,BOOTLOADERisthefirstsoftwareprogramthatrunswhenacomputerstarts.Itisresponsibleforloadingandtransferringcontroltotheoperatingsystemkernelsoftware.ThisessayintroduceshowtodesignBOOTLOADERinanembeddedsystem. FirstthepaperintroducesthefeaturesandthnctionofBOOTLOADER,thenindetailanalyzesBOOTLOADERfromviewofembeddedfield,andbringsupasystemmodelofBOOTLOADER. Inthispaper,italsohaveadetailresearchonsomepartofBOOTLOADER,suchashardwareinitial,UARTdriverandtransferprotocai,lancarddriverandtflp/ipprotocai,USBdriverandtransferprotocal,FLASHdriveretc. Finally,thispaperimplementsandtestsBOOTLOADERinEV4480evaluationboard,thenbringsupsortieadviceontheimprovementinthefuture. Keyword:BOOTLOADER,embeddedsystem,UCLINUX

相关主题
文本预览
相关文档 最新文档