U-Boot启动过程--详细版的完全分析

U-Boot启动过程--详细版的完全分析
U-Boot启动过程--详细版的完全分析

(一)U-Boot启动过程--详细版的完全分析

我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。

在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。

然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动就完全由bootloader来完成。它主要的功能是加载与引导内核映像

一个嵌入式的存储设备通过通常包括四个分区:

第一分区:存放的当然是u-boot

第二个分区:存放着u-boot要传给系统内核的参数

第三个分区:是系统内核(kernel)

第四个分区:则是根文件系统

如下图所示:

u-boot是一种普遍用于嵌入式系统中的Bootloader。

Bootloader介绍

Bootloader是进行嵌入式开发必然会接触的一个概念,它是嵌入式学院<嵌入式工程师职业培训班>二期课程中嵌入式linux系统开发方面的重要内容。本篇文章主要讲解Bootloader 的基本概念以及内部原理,这部分内容的掌握将对嵌入式linux系统开发的学习非常有帮助!Bootloader的定义:Bootloader是在操作系统运行之前执行的一小段程序,通过这一小段程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。意思就是说如果我们要想让一个操作系统在我们的板子上运转起来,我们就必须首先对我们的板子进行一些基本配置和初始化,然后才可以将操作系统引导进来运行。具体在Bootloader中完成了哪些操作我们会在后面分析到,这里我们先来回忆一下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程序。(先想一下,通用PC和嵌入式系统为何会在此处存在如此的差异呢?)Bootloader是基于特定硬件平台来实现的,因此几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader,Bootloader不但依赖于cpu 的体系结构,还依赖于嵌入式系统板级设备的配置。对于2块不同的板子而言,即使他们使用的是相同的处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也需要修改Bootloader的源程序。

Bootloader的启动方式

Bootloader的启动方式主要有网络启动方式、磁盘启动方式和Flash启动方式。

1、网络启动方式

图1 Bootloader网络启动方式示意图

如图1所示,里面主机和目标板,他们中间通过网络来连接,首先目标板的DHCP/BIOS 通过BOOTP服务来为Bootloader分配IP地址,配置网络参数,这样才能支持网络传输功能。我们使用的u-boot可以直接设置网络参数,因此这里就不用使用DHCP的方式动态分配IP了。接下来目标板的Bootloader通过TFTP服务将内核映像下载到目标板上,然后通过网络文件系统来建立主机与目标板之间的文件通信过程,之后的系统更新通常也是使用Boot Loader的这种工作模式。工作于这种模式下的Boot Loader通常都会向它的终端用户提供一个简单的命令行接口。

2、磁盘启动方式

这种方式主要是用在台式机和服务器上的,这些计算机都使用BIOS引导,并且使用磁盘作为存储介质,这里面两个重要的用来启动linux的有LILO和GRUB,这里就不再具体说明了。

3、Flash启动方式

这是我们最常用的方式。Flash有NOR Flash和NAND Flash两种。NOR Flash可以支持随机访问,所以代码可以直接在Flash上执行,Bootloader一般是存储在Flash芯片上的。另外Flash上还存储着参数、内核映像和文件系统。这种启动方式与网络启动方式之间的不同之处就在于,在网络启动方式中,内核映像和文件系统首先是放在主机上的,然后经过网络传输下载进目标板的,而这种启动方式中内核映像和文件系统则直接是放在Flash中的,这两点在我们u-boot的使用过程中都用到了。

U-boot的定义

U-boot,全称Universal Boot Loader,是由DENX小组的开发的遵循GPL条款的开放源码项目,它的主要功能是完成硬件设备初始化、操作系统代码搬运,并提供一个控制台及一个指令集在操作系统运行前操控硬件设备。U-boot之所以这么通用,原因是他具有很多特点:开放源代码、支持多种嵌入式操作系统内核、支持多种处理器系列、较高的稳定性、高度灵活的功能设置、丰富的设备驱动源码以及较为丰富的开发调试文档与强大的网络技术支持。另外u-boot对操作系统和产品研发提供了灵活丰富的支持,主要表现在:可以引导压缩或非压缩系统内核,可以灵活设置/传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,支持多种文件系统,支持多种目标板环境参数存储介质,采用CRC32校验,可校验内核及镜像文件是否完好,提供多种控制台接口,使用户可以在不需要ICE的情况下通过串口/以太网/USB等接口下载数据并烧录到存储设备中去(这个功能在实际的产品中是很实用的,尤其是在软件现场升级的时候),以及提供丰富的设备驱动等。u-boot源代码的目录结构

1、board中存放于开发板相关的配置文件,每一个开发板都以子文件夹的形式出现。

2、Commom文件夹实现u-boot行下支持的命令,每一个命令对应一个文件。

3、cpu中存放特定cpu架构相关的目录,每一款cpu架构都对应了一个子目录。

4、Doc是文档目录,有u-boot非常完善的文档。

5、Drivers中是u-boot支持的各种设备的驱动程序。

6、Fs是支持的文件系统,其中最常用的是JFFS2文件系统。

7、Include文件夹是u-boot使用的头文件,还有各种硬件平台支持的汇编文件,系统配置文件和文件系统支持的文件。

8、Net是与网络协议相关的代码,bootp协议、TFTP协议、NFS文件系统得实现。

9、Tooles是生成U-boot的工具。

对u-boot的目录有了一些了解后,分析启动代码的过程就方便多了,其中比较重要的目录就是/board、/cpu、/drivers和/include目录,如果想实现u-boot在一个平台上的移植,就要对这些目录进行深入的分析。

-------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------

什么是《编译地址》?什么是《运行地址》?

(一)编译地址: 32位的处理器,它的每一条指令是4个字节,以4个字节存储顺序,进行顺序执行,CPU是顺序执行的,只要没发生什么跳转,它会顺序进行执行行,编译器会对每一条指令分配一个编译地址,这是编译器分配的,在编译过程中分配的地址,我们称之为编译地址。

(二)运行地址:是指程序指令真正运行的地址,是由用户指定的,用户将运行地址烧录到哪里,哪里就是运行的地址。

比如有一个指令的编译地址是0x5,实际运行的地址是0x200,如果用户将指令烧到

0x200上,那么这条指令的运行地址就是0x200,

当编译地址和运行地址不同的时候会出现什么结果?结果是不能跳转,编译后会产生跳转地址,如果实际地址和编译后产生的地址不相等,那么就不能跳转。

C语言编译地址:都希望把编译地址和实际运行地址放在一起的,但是汇编代码因为不需要做C语言到汇编的转换,可以认为的去写地址,所以直接写的就是他的运行地址这就是为什么任何bootloader刚开始会有一段汇编代码,因为起始代码编译地址和实际地址不相等,这段代码和汇编无关,跳转用的运行地

址。

编译地址和运行地址如何来算呢?

1. 假如有两个编译地址a=0x10,b=0x7,b的运行地址是0x300,那么a的运行地址就是b的运行地址加上两者编译地址的差值,a-b=0x10-0x7=0x3,

a的运行地址就是0x300+0x3=0x303。

2. 假设uboot上两条指令的编译地址为a=0x33000007和b=0x33000001,这两条指令都落在bank6上,现在要计算出他们对应的运行地址,要找出运行地址的始地址,这个

是由用户烧录进去的,假设运行地址的首地址是0x0,则a的运行地址为0x7,b为0x1,就是这样算出来的。

为什么要分配编译地址?这样做有什么好处,有什么作用?

比如在函数a中定义了函数b,当执行到函数b时要进行指令跳转,要跳转到b函数所对应的起始地址上去,编译时,编译器给每条指令都分配了编译地址,如果编译器已经给分配了地址就可以直接进行跳转,查找b函数跳转指令所对应的表,进行直接跳转,因为有个编译地址和指令对应的一个表,如果没有分配,编译器就查找不到这个跳转地址,要进行计算,非常麻烦。

什么是《相对地址》?

以NOR Flash为例,NOR Falsh是映射到bank0上面,SDRAM是映射到bank6上面,uboot和内核最终是在SDRAM上面运行,最开始我们是从Nor Flash的零地址开始往后烧录,uboot中至少有一段代码编译地址和运行地址是不一样的,编译uboot或内核时,都会将编译地址放入到SDRAM中,他们最终都会在SDRAM中执行,刚开始uboot在Nor Flash中运行,运行地址是一个低端地址,是bank0中的一个地址,但编译地址是bank6中的地址,这样就会导致绝对跳转指令执行的失败,所以就引出了相对地址的概念。

那么什么是相对地址呢?

至少在bank0中uboot这段代码要知道不能用b+编译地址这样的方法去跳转指令,因为这段代码的编译地址和运行地址不一样,那如何去做呢?

要去计算这个指令运行的真实地址,计算出来后再做跳转,应该是b+运行地址,不能出现b+编译地址,而是b+运行地址,而运行地址是算出来的。

_TEXT_BASE:

.word TEXT_BASE //0x33F80000,在board/config.mk中

这段话表示,用户告诉编译器编译地址的起始地址

U-Boot工作过程

大多数Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。

但从最终用户的角度看,Boot Loader 的作用就是:用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

(一)启动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。

也即Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。

这种模式是Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。

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

UBoot 这样功能强大的Boot Loader 同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。

大多数bootloader 都分为阶段1(stage1)和阶段2(stage2)两大部分,uboot 也不例外。依赖于CPU 体系结构的代码(如CPU 初始化代码等)通常都放在阶段1 中且通常用汇编语言实现,而阶段2 则通常用C 语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。

第一、大概总结性得的分析系统启动的入口点。既然我们现在要分析u-boot的启动过程,就必须先找到u-boot

最先实现的是哪些代码,最先完成的是哪些任务。

另一方面一个可执行的image必须有一个入口点,并且只能有一个全局入口点,所以要通知编译器这个入口在哪里。由此我们可以找到程序的入口点是在

/board/lpc2210/u-boot.lds中指定的,其中ENTRY(_start)说明程序从_start开始运行,而他指向的是cpu/arm7tdmi/start.o文件。

因为我们用的是ARM7TDMI的cpu架构,在复位后从地址0x00000000取它的第一条指令,所以我们将Flash映射到这个地址上,

这样在系统加电后,cpu将首先执行u-boot程序。u-boot的启动过程是多阶段实现的,分了两个阶段。

依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1中,而且通常都是用汇编语言来实现,以达到短小精悍的目的。

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

下面我们先详细分析下stage1中的代码,如图2所示:

图2 Start.s程序流程

代码真正开始是在_start,设置异常向量表,这样在cpu发生异常时就跳转到/cpu/arm7tdmi/interrupts中去执行相应得中断代码。

在interrupts文件中大部分的异常代码都没有实现具体的功能,只是打印一些异常消息,其中关键的是reset中断代码,跳到reset入口地址。

reset复位入口之前有一些段的声明。

1.在reset中,首先是将cpu设置为svc32模式下,并屏蔽所有irq和fiq。

2.在u-boot中除了定时器使用了中断外,其他的基本上都不需要使用中断,比如串口通信和网络等通信等,在u-boot中只要完成一些简单的通信就可以了,所以在这里屏蔽掉了所有的中断响应。

3.初始化外部总线。这部分首先设置了I/O口功能,包括串口、网络接口等的设置,其他I/O口都设置为GPIO。然后设置BCFG0~BCFG3,即外部总线控制器。这里bank0

对应Flash,设置为16位宽度,总线速度设为最慢,以实现稳定的操作;Bank1对应DRAM,设置和Flash相同;Bank2对应RTL8019。

4.接下来是cpu关键设置,包括系统重映射(告诉处理器在系统发生中断的时候到外部存储器中去读取中断向量表)和系统频率。

5.lowlevel_init,设定RAM的时序,并将中断控制器清零。这些部分和特定的平台有关,但大致的流程都是一样的。

下面就是代码的搬移阶段了。为了获得更快的执行速度,

通常把stage2加载到RAM空间中来执行,因此必须为加载Boot Loader的stage2

准备好一段可用的RAM空间范围。空间大小最好是memory page大小(通常是4KB)的倍数

一般而言,1M的RAM空间已经足够了。

flash中存储的u-boot可执行文件中,代码段、数据段以及BSS段都是首尾相连存储的,

所以在计算搬移大小的时候就是利用了用BSS段的首地址减去代码的首地址,这样算出来的就是实际使用的空间。

程序用一个循环将代码搬移到0x81180000,即RAM底端1M空间用来存储代码。

然后程序继续将中断向量表搬到RAM的顶端。由于stage2通常是C语言执行代码,所以还要建立堆栈去。

在堆栈区之前还要将malloc分配的空间以及全局数据所需的空间空下来,他们的大小是由宏定义给出的,可以在相应位置修改。

基本内存分布图:

图3 搬移后内存分布情况图

下来是u-boot启动的第二个阶段,是用c代码写的,

这部分是一些相对变化不大的部分,我们针对不同的板子改变它调用的一些初始化函数,并且通过设置一些宏定义来改变初始化的流程,

所以这些代码在移植的过程中并不需要修改,也是错误相对较少出现的文件。

在文件的开始先是定义了一个函数指针数组,通过这个数组,程序通过一个循环来按顺序进行常规的初始化,并在其后通过一些宏定义来初始化一些特定的设备。

在最后程序进入一个循环,main_loop。这个循环接收用户输入的命令,以设置参数或者进行启动引导。

本篇文章将分析重点放在了前面的start.s上,是因为这部分无论在移植还是在调试过程中

都是最容易出问题的地方,要解决问题就需要程序员对代码进行修改,所以在这里简单介绍了一下start.s的基本流程,希望能对大家有所帮助

第二、代码分析

2.2 阶段1 介绍

uboot 的stage1 代码通常放在start.s 文件中,它用汇编语言写成,其主要代码部分如下: 2.2.1 定义入口

由于一个可执行的Image 必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0

地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。

1. board/crane2410/uboot.lds: ENTRY(_start) ==> cpu/arm920t/start.S: .globl _start

2. uboot 代码区(TEXT_BASE = 0x33F80000)定义在board/crane2410/config.mk

U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:

(1)第一阶段的功能

? 硬件设备初始化

? 加载U-Boot第二阶段代码到RAM空间

? 设置好栈

? 跳转到第二阶段代码入口

(2)第二阶段的功能

? 初始化本阶段使用的硬件设备

? 检测系统内存映射

? 将内核从Flash读取到RAM中

? 为内核设置启动参数

? 调用内核

1.1.1 U-Boot启动第一阶段代码分析

第一阶段对应的文件是cpu/arm920t/start.S和

board/samsung/mini2440/lowlevel_init.S。

U-Boot启动第一阶段流程如下:

详细分析

图2.1 U-Boot启动第一阶段流程

根据cpu/arm920t/u-boot.lds中指定的连接方式:

看一下uboot.lds文件,在board/smdk2410目录下面,uboot.lds是告诉编译器这些段改怎么划分,GUN编译过的段,最基本的三个段是RO,RW,ZI,RO表示只读,对应于具体的指代码段,RW是数据段,ZI是归零段,就是全局变量的那段。Uboot代码这么多,如何保证start.s会第一个执行,编译在最开始呢?就是通过uboot.lds链接文件进行

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

指定输出可执行文件是elf格式,31位arm指令,小端

OUTPUT_ARCH(arm) 指定输出可执行文件的平台为ARM

ENTRY(_start) 指定输出可执行文件的起始代码为_start

SECTIONS

{

. = 0x00000000; //起始地址

. = ALIGN(4); //4字节对齐

.text : //指定代码段,.text的基地址为0x33f80000

{

cpu/arm920t/start.o (.text) //这里把start.o放在第一位就表示把start.s编

译时放到最开始,这就是为什么把uboot烧到起始地址上它肯定运行的是start.s

*(.text) 其他代码部分

}

. = ALIGN(4); //前面的“.” 代表当前值,是计算一个当前的值,是计算上

面占用的整个空间,再加一个单元就表示它现在的位置

.rodata : { *(.rodata) } 指定只读数据段

. = ALIGN(4);

.data : { *(.data) } 指定读写数据段

. = ALIGN(4);

.got : { *(.got) } 只读got段,got段式是uboot自定义的一个段,非标准段

. = .;

__u_boot_cmd_start = .; 把__u_boot_cmd_start赋值为当前位置,即起始位置

.u_boot_cmd : { *(.u_boot_cmd) } 指定u_boot_cmd段,uboot把所有的uboot命令放在该段

__u_boot_cmd_end = .; 把__u_boot_cmd_end赋值为当前位置,即结束位置

. = ALIGN(4);

__bss_start = .; /把__bss_start赋值为当前位置,即bss段的开始位置

.bss : { *(.bss) } 指定bss段

_end = .; 把__end赋值为当前位置,即end段的结束位置

}

第一个链接的是cpu/arm920t/start.o,因此u-boot.bin的入口代码在

cpu/arm920t/start.o中,其源代码在cpu/arm920t/start.S中。下面我们来分析

cpu/arm920t/start.S的执行。

硬件设备初始化

设置异常向量

下面代码是系统启动后U-boot上电后运行的第一段代码,它是什么意思?

u-boot对应的第一阶段代码放在cpu/arm920t/start.S文件中,入口代码如下:.

.globl _start /*声明一个符号可被其它文件引用,相当于声明了一个全局变量*/

_start: b reset

ldr pc, _undefined_instruction 表示把_undefined_instruction存放的数值存放到pc指针上

ldr pc, _software_interrupt /* 软件中断向量*/

ldr pc, _prefetch_abort /* 预取指令异常向量*/

ldr pc, _data_abort /* 数据操作异常向量*/

ldr pc, _not_used /* 未使用*/

ldr pc, _irq /* irq中断向量*/

ldr pc, _fiq /* fiq中断向量*/

在cpu/arm920t/start.S中还有这些异常对应的异常处理程序。当一个异常产生时,CPU根据异常号在异常向量表中找到对应的异常向量,然后执行异常向量处的跳转指令,CPU就跳转到对应的异常处理程序执行。

当发生异常时,都将执行u-boot-1.2.0/cpu/arm920t/interrupts.c中定义的中断函数,即start.S中要跳转的这些中断子程序的代码,均在u-boot-1.2.0/cpu/arm920t/interrupts.c中定义。

其中复位异常向量的指令“b reset”决定了U-Boot启动后将自动跳转到标号“reset”处执行。

u-boot存储器映射的定义

该段代码段主要是定义了u-boot需要使用的一些映射区的label,比如用户堆区、用户栈区、全局数据结构区等。如下图所示:(非常经典的u-boot映射图)

_TEXT_BASE:

.word TEXT_BASE 声明_TEXT_BASE标号并用TEXT_BASE来初始化(把TEXT_BASE 的值存储在当前位置即标号的位置),TEXT_BASE在u-boot-1.2.0/board/smdk2410/config.mk 中定义,它的值为0x33F80000。

.globl _armboot_start

_armboot_start:

.word _start 声明_armboot_start为全局变量,并用_start来初始化,_start定义在board/smdk2410/u-boot.lds中,在FLASH中运行时,_start的地址为0x0;在SDRAM中运

行时,_start的地址为0x33F80000。

.globl _bss_start

_bss_start:

.word __bss_start

.globl _bss_end

_bss_end:

.word _end __bss_start和_end是在链接脚本board/smdk2410/u-boot.lds中给出定义的,在编译u-boot的时候产生的,声明_bss_start和_bss_end为全局变量,并用_bss_start和_bss_end来初始化。

#ifdef CONFIG_USE_IRQ

.globl IRQ_STACK_START

IRQ_STACK_START:

.word 0x0badc0de

.globl FIQ_STACK_START

FIQ_STACK_START:

.word 0x0badc0de

#endif 声明IRQ_STACK_START和FIQ_STACK_START为全局变量,如果宏定义了CONFIG_USE_IRQ在cpu/arm920t/cpu.c中的cpu_init()函数将用到这两个全局变量。

代码的解析:1)声明_TEXT_BASE标号并用TEXT_BASE来初始化(把TEXT_BASE 的值存储在当前位置即标号的位置),TEXT_BASE在

u-boot-1.2.0/board/smdk2410/config.mk中定义,它的值为0x33F80000。

2)声明_armboot_start为全局变量,并用_start来初始化,_start定义在board/smdk2410/u-boot.lds中,在FLASH中运行时,_start的地址为0x0;在SDRAM 中运行时,_start的地址为0x33F80000。

3)__bss_start和_end是在链接脚本board/smdk2410/u-boot.lds中给出定义的,在编译u-boot的时候产生的,声明_bss_start和_bss_end为全局变量,并用_bss_start和_bss_end来初始化。

4)声明IRQ_STACK_START和FIQ_STACK_START为全局变量,如果宏定义了CONFIG_USE_IRQ在cpu/arm920t/cpu.c中的cpu_init()函数将用到这两个全局变量。

(2)CPU进入SVC模式

reset:

mrs r0, cpsr MRS指令是唯一可以直接读取CPSR和SPSR寄存器的指令

bic r0, r0, #0x1f /*工作模式位清零*/

orr r0, r0, #0xd3 /*工作模式位设置为“10011”(管理模式),并将中断禁止

位和快中断禁止位置1 */

msr cpsr, r0

以上代码将CPU的工作模式位设置为管理模式,即设置相应的CPSR程序状态字,并将中断禁止位和快中断禁止位置一,从而屏蔽了IRQ和FIQ中断。

操作系统先注册一个总的中断,然后去查是由哪个中断源产生的中断,再去查用户注册的中断表,查出来后就去执行用户定义的用户中断处理函数。

(3)设置控制寄存器地址

# if defined(CONFIG_S3C2400)

# define pWTCON 0x15300000 /*;看门狗寄存器*/

# define INTMSK 0x14400008 /*;中断屏蔽寄存器*/

# define CLKDIVN 0x14800014 /*;时钟分频寄存器*/

#else /* s3c2410与s3c2440下面4个寄存器地址相同*/

# define pWTCON 0x53000000 /* WATCHDOG控制寄存器地址*/

# define INTMSK 0x4A000008 /* INTMSK寄存器地址*/

# define INTSUBMSK 0x4A00001C /* INTSUBMSK寄存器地址次级中断屏蔽寄存器*/

# define CLKDIVN 0x4C000014 /* CLKDIVN寄存器地址;时钟分频寄存器*/

# endif

对与s3c2440开发板,以上代码完成了WATCHDOG,INTMSK,INTSUBMSK,CLKDIVN四个寄存器的地址的设置。各个寄存器地址参见参考文献[4] 。

(4)关闭看门狗

ldr r0, =pWTCON /*将pwtcon寄存器地址赋给R0*/

mov r1, #0x0 /*r1的内容为0*/

str r1, [r0] /* 看门狗控制器的最低位为0时,看门狗不输出复位信号*/ 以上代码向看门狗控制寄存器写入0,关闭看门狗。否则在U-Boot启动过程中,CPU 将不断重启。

为什么要关看门狗?

就是防止,不同得两个以上得CPU,进行喂狗的时间间隔问题:说白了,就是你运行的代码如果超出喂狗时间,而你不关狗,就会导致,你代码还没运行完又得去喂狗,就这样反复得重启CPU,那你代码永远也运行不完,所以,得先关看门狗得原因,就是这样。关狗---详细的原因:

关闭看门狗,关闭中断,所谓的喂狗是每隔一段时间给某个寄存器置位而已,在实际中会专门启动一个线程或进程会专门喂狗,当上层软件出现故障时就会停止喂狗,停止喂狗之后,cpu会自动复位,一般都在外部专门有一个看门狗,做一个外部的电路,不在cpu内部使用看门狗,cpu内部的看门狗是复位的cpu

当开发板很复杂时,有好几个cpu时,就不能完全让板子复位,但我们通常都让整个板子复位。看门狗每隔短时间就会喂狗,问题是在两次喂狗之间的时间间隔内,运行的代码的时间是否够用,两次喂狗之间的代码是否在两次喂狗的时间延迟之内,如果在延迟之外的话,代码还没改完就又进行喂狗,代码永远也改不完

(5)屏蔽中断

mov r1, #0xffffffff /*屏蔽所有中断,某位被置1则对应的中断被屏蔽*/ /*寄存器中的值*/

ldr r0, =INTMSK /*将管理中断的寄存器地址赋给ro*/

str r1, [r0] /*将全r1的值赋给ro地址中的内容*/

INTMSK是主中断屏蔽寄存器,每一位对应SRCPND(中断源引脚寄存器)中的一位,表明SRCPND相应位代表的中断请求是否被CPU所处理。

根据参考文献4,INTMSK寄存器是一个32位的寄存器,每位对应一个中断,向其中写入0xffffffff就将INTMSK寄存器全部位置一,从而屏蔽对应的中断。

# if defined(CONFIG_S3C2440)

ldr r1, =0x7fff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

INTSUBMSK每一位对应SUBSRCPND中的一位,表明SUBSRCPND相应位代表的中断请求是否被CPU所处理。

根据参考文献4,INTSUBMSK寄存器是一个32位的寄存器,但是只使用了低15位。向其中写入0x7fff就是将INTSUBMSK寄存器全部有效位(低15位)置一,从而屏蔽对应的中断。

屏蔽所有中断,为什么要关中断?

中断处理中ldr pc是将代码的编译地址放在了指针上,而这段时间还没有搬移代码,所以编译地址上面没有这个代码,如果进行跳转就会跳转到空指针上面

(6)设置CLKDIVN

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

#endif

UBOOT命令详解

常用U-boot命令详解(z) 2010-09-30 15:05:52| 分类:学习心得体会|字号订阅 U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的 U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [u-boot@MINI2440]# version U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# v U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# base Base Address: 0x00000000 [u-boot@MINI2440]# ba Base Address: 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或? 功能:查看当前U-boot版本中支持的所有命令。 [u-boot@MINI2440]#help ?- alias for'help' askenv - get environment variables from stdin base - print or set address offset bdinfo - print Board Info structure bmp - manipulate BMP image data boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol

Tiny6410_Uboot移植步骤详解

Uboot_for_Tiny6410_移植步骤详解 一、设计要求 1.目的 1)掌握U-boot剪裁编写 2)掌握交叉编译环境的配置 3)掌握U-boot的移植 2.实现的功能 1)U-boot编译成功 2)移植U-boot,使系统支持从NAND FLASH启动 二、设计方案 1.硬件资源 1)ARM处理器:ARM11芯片(Samsung S3C6410A),基于ARM1176JZF-S核设 计,运行频率533Mhz,最高可达 667Mhz 2)存储器:128M DDR RAM,可升级至 256M;MLC NAND Flash(2GB) 3)其他资源:具有三LCD接口、4线电阻 触摸屏接口、100M标准网络接口、标准DB9 五线串口、Mini USB2.0接口、USB Host 1.1、3.5mm音频输入输出口、标准TV-OUT

接口、SD卡座、红外接收等常用接口;另外 还引出4路TTL串口,另1路TV-OUT、 SDIO2接口(可接SD WiFi)接口等;在板的 还有蜂鸣器、I2C-EEPROM、备份电池、A D 可调电阻、8个中断式按键等。 2.软件资源 1)arm-linux-gcc-4.5.1(交叉编译) 2)u-boot-2010.09.tar.gz arm-linux-gcc-4.5.1-v6-vfp-20101103.t gz 三、移植过程 1.环境搭建 1)建立交叉编译环境 2)去这2个网站随便下载都可以下载得到最 新或者你想要的u-boot。( https://www.360docs.net/doc/bb14819193.html,/batch.viewl ink.php?itemid=1694 ftp://ftp.denx.de/pub/u-boot/ )

校园文化建设调查问卷

廊坊卫生职业学院校园文化建设调查问卷 您好,非常感谢您参与我们的调查,这是一份针对我校“校园文化”的问卷调查。校园文化是指以学生为主体,以课外文化活动为主要内容,以校园为主要空间,以校园精神为主要特征的一种群体文化。该问卷答案没有正确与错误之分,您只需根据自己对校园文化的真实看法作答。 1、性别: A. 男 B.女 2、您的身份: A. 学生 B.教师 C.管理人员 D.其他人员 3、您的年级(如第2题选择非A则本题跳过): A.一年级 B.二年级 C.三年级 D.四年级 4、您本学期参加或组织了多少次校园活动: A.没时间参与 B.1~2次 C.3~5次 D.5~10次 E.10次以上 5、提到校园文化,您最先想到是什么: A.学术类 B.体育类 C.实践类 D.文艺类 E.公益类 F. 6、您认为我们学校的校园文化是什么类型: A.严谨 B.活跃 C.沉闷 D.其他 7、从整体上看您认为我们校园文化建设情况: A.文化氛围浓厚 B.一般,有待建设 C.人文气息淡薄 D.其他 8、从学生活动方面来看您认为我们校园文化建设情况如何: A.团委工作开展的丰富多样

B.学生社团自身发展很好 C.一般 D.很差,几乎没有什么有意义的活动 9、在学术氛围方面您认为我们校园文化建设情况如何: A.很好 B.一般 C.很差 10、在教学方面您认为我们校园文化建设情况如何: A.好,老师总能让你有兴趣认真 B.一般听下去,水准很高 C.老师作用不大 D.很差,老师上课很枯燥,让人反感 11、师生道德素质建设方面您认为我们校园文化建设情况如何: A.素质很高,能体现高校水准 B.素质一般 C.道德水准低 12、硬件建设方面您认为我们校园文化建设情况如何: A.很好,场馆设施先进、文献资料齐全 B.一般,基本能满足你的要求,最好能尽快配备 C.很差,学习生活中经常遇到难题 13、在软件建方面设您认为我们校园文化建设情况如何: A.经常有名家大师讲学交流 B.学生老师自身言谈举止风范 C.文化活动的开展顺利和谐 D.学校生活民主程度较高 14、您更喜欢什么形式的校园活动:

UBoot移植详解

u-boot 移植步骤详解 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式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项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择U-Boot的理由: ①开放源码; ②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④较高的可靠性和稳定性; ④较高的可靠性和稳定性; ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦较为丰富的开发调试文档与强大的网络技术支持; 2 U-Boot主要目录结构 - board 目标板相关文件,主要包含SDRAM、FLASH驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本) ?开发平台:i.MX 6UL ?最新系统: u-boot2015.04 + Linux4.1.15_1.2.0 ?交叉编译工具:dchip-linaro-toolchain.tar.bz2 源码下载地址: U-Boot: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.360docs.net/doc/bb14819193.html,/git/cgit.cgi/imx/uboot-imx.git/ Kernel: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.360docs.net/doc/bb14819193.html,/git/cgit.cgi/imx/linux-2.6-imx.git/ 源码移植过程: 1、将linux内核及uBoot源码拷贝到Ubuntu12.04系统中的dchip_imx6ul目录下; 2、使用tar命令分别将uboot和kernel解压到dchip_imx6ul目录下; 3、解压后进入uboot目录下,新建文件make_dchip_imx6ul_uboot201504.sh,且文件内容如下: ################################################################### # Build U-Boot.2015.04 For D518--i.MX6UL By FRESXC # ################################################################### #!/bin/bash export ARCH=arm export CROSS_COMPILE=/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi - make mrproper # means CLEAN make mx6ul_14x14_evk_defconfig make2>&1|tee built_dchip_imx6ul_uboot201504.out 4进入kernel目录下,新建文件make_dchip_imx6ul_linux4115120.sh,且文件内容如下: ###################################################################

小学校园文化建设调查问卷

育才家园小学家园文化建设的调查问卷 尊敬的老师: 您好,感谢您长期以来为育才一分校所付出的努力与所做的贡献!为了进一步研究家园文化的内涵、家园文化与学校教育的关系,特进行本次问卷调查。您的见解和意见可能会对学校未来的发展有所影响,因此请您客观、如实的填写这份问卷。本问卷只做学校内部使用,不会向任何外界单位或个人出示。感谢您的支持与合作! 一、工作环境与工作内容 1、您对学校的工作环境与室内设施是否满意() A.非常满意 B.比较满意 C.一般 D.不太满意 E.非常不满意 2、您认为学校的作息时间安排是否合理() A.非常合理 B.比较合理 C.一般 D.不太合理 E.非常不合理 3、您认为学校的规章制度是否合理() A.非常合理 B.比较合理 C.一般 D.不太合理 E.非常不合理 4、您认为学校是否为您的工作配备了充足的资源() A.充足 B.一般 C.不充足 D.难说 E.没考虑过 5、您对本校的福利是否满意() A.非常满意 B.比较满意 C.一般 D.不太满意 E.非常不满意 7、您对自己的工作内容与兴趣所在关联度评价是() A.非常一致 B.比较一致 C.一般 D.不太一致 E.非常不一致 8、您觉得学校是否给您提供了较好的工作机会() A.有 B.一般 C.没有 D.难说 9、您认为您的工作给你带来的压力() A.很大 B.较大 C.一般 D.不大 E.难说 二、工作群体 1、您对目前学校与老师沟通的渠道或方式是否满意() A.非常满意 B.比较满意 C.一般 D.不满意 E.很不满意

2、您认为学校是否给予老师足够的信任() A.是 B.一般 C.否 D.难说 3、您认为您的工作是否受人尊敬() A.受尊重 B.一般 C.不受尊重 D.不知道 E.从来没想过 4、您对所在部门的团队合作情况是否满意() A.非常满意 B.比较满意 C.一般 D.不太满意 E.非常不满意 5、您认为自己及周围的同事是否能够符合制度和工作流程规定进行工作() A.完全符合 B.比较符合 C.一般 D.不太符合 E.完全不符合 6、您认为您的工作能否充分发挥您的个人能力() A.能 B.一般 C.不能 D.难说 E.没考虑过 7、您认为自己在校内是否得到公平的对待() A.是 B.一般 C.否 D.难说 E.不在乎 三、学校背景 1、学校是否有清晰的目标给老师以振奋和激励() A.有 B.一般 C.没有 D.难说 E.没考虑过 2、您对学校未来发展的目标是否了解及认可() A.是 B.一般 C.没有 D.难说 3、您认为学校是否关心教师个人的成长和前途() A.关心 B.一般 C.不关心 D.难说 4、您觉得学校对教师职业发展的设计是否明确() A.明确 B.一般 C.不明确 D.难说 5、有不同意见或创新思维,您是否愿意主动提出() A.非常愿意 B.比较愿意 C.视情况而定 D.不太愿意 E.没考虑过 6、您认为教师对学校提出意见和建议时,学校的反应是()A.友善接受 B.有所反应 C.毫无反应 D.不接受 E.难说

u-boot启动分析

背景: Board →ar7240(ap93) Cpu →mips 1、首先弄清楚什么是u-boot Uboot是德国DENX小组的开发,它用于多种嵌入式CPU的bootloader程序, uboot不仅支持嵌入式linux系统的引导,当前,它还支持其他的很多嵌入式操作系统。 除了PowerPC系列,还支持MIPS,x86,ARM,NIOS,XScale。 2、下载完uboot后解压,在根目录下,有如下重要的信息(目录或者文件): 以下为为每个目录的说明: Board:和一些已有开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,子目录存放和开发板相关的配置文件。它的每个子文件夹里都有如下文件(以ar7240/ap93为例): Makefile Config.mk Ap93.c 和板子相关的代码 Flash.c Flash操作代码 u-boot.lds 对应的链接文件 common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录mips等。它的每个子文件夹里都有入下文件: Makefile Config.mk Cpu.c 和处理器相关的代码s Interrupts.c 中断处理代码 Serial.c 串口初始化代码 Start.s 全局开始启动代码 Disk:对磁盘的支持

Doc:文档目录。Uboot有非常完善的文档。 Drivers:Uboot支持的设备驱动程序都放在该目录,比如网卡,支持CFI的Flash,串口和USB等。 Fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。 Include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目下configs目录有与开发板相关的配置文件,如 ar7240_soc.h。该目录下的asm目录有与CPU体系结构相关的头文件,比如说mips 对应的有asm-mips。 Lib_xxx:与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。 Net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。 Tools:生成Uboot的工具,如:mkimage等等。 3、mips架构u-boot启动流程 u-boot的启动过程大致做如下工作: 1、cpu初始化 2、时钟、串口、内存(ddr ram)初始化 3、内存划分、分配栈、数据、配置参数、以及u-boot代码在内存中的位置。 4、对u-boot代码作relocate 5、初始化malloc、flash、pci以及外设(比如,网口) 6、进入命令行或者直接启动Linux kernel 刚一开始由于参考网上代码,我一个劲的对基于smdk2410的板子,arm926ejs的cpu看了N 久,启动过程和这个大致相同。 整个启动中要涉及到四个文件: Start.S →cpu/mips/start.S Cache.S →cpu/mips/cache.S Lowlevel_init.S →board/ar7240/common/lowlevel_init.S Board.c →lib_mips/board.c 整个启动过程分为两个阶段来看: Stage1:系统上电后通过汇编执行代码 Stage2:通过一些列设置搭建了C环境,通过汇编指令跳转到C语言执行. Stage1: 程序从Start.S的_start开始执行.(至于为什么,参考u-boot.lds分析.doc) 先查看start.S文件吧!~ 从_start标记开始会看到一长串莫名奇妙的代码:

校园文化建设调查问卷

校园文化建设调查问卷 各位老师: 你好: 校园文化是学校发展的重要组成部分,校园文化是学校在建设和发展历程中所形成的一切物质和精神财富的总和。校园文化的建设,它包括物质文化建设、精神文化建设和制度文化建设,这三个方面建设的全面、协调的发展,将为学校树立起完整的文化形象。通过对具体项目调查,了解学校在校园文化建设方面的基本情况,找出利弊,更好的对学校的校园文化进行建设。 设计此问卷,请老师们认真填写,谢谢合作! 1、你校有明示的校训吗?A、无B、有(是:) 2、你校有明示的教风吗?A、无B、有(是:) 3、你校有明示的学风吗?A、无B、有(是:) 4、你知道你校的办学思路吗?A不知道B、知道(是:) 5、你校有年度更新的管理制度吗?A、无B、有(是:) 6、学校有公正合理科学的考核激励机制吗?A、无B、有(是:) 7、你校有学校安全应急制度、预案吗?A、无B、有(是:) 8、你校有教研教改计划、记录吗?A、无B、有(是:) 9、你校有活动安排吗?A、无B、有(是:)

10、你校有班级管理制度、计划吗?A、无B、有(是:) 11、你校有少先队工作计划、活动安排吗? A、无 B、有(是:) 12、学校要求学生在校内说普通话吗?A、要求B、无要求 13、学校是否经常召开有关学生思想品德、安全方面的会议、活动吗? A否B是( ) 14、学校有比较正规的学生会团体、兴趣小组、实践小组吗? A、无 B、有(是:) 15、学校每周对班级工作检查评比吗?A、无B、有 (是:) 16、学校有学生分期创办的刊物、手抄报、板报、墙报、专栏、学习园地吗? A、无 B、有(是:) 17、学校有校园广播吗?A、无B、有(是:) 18、学校有信息公开、财务公开、意见信箱、学生与学校信息沟通渠道的工作 措施吗? A、无B、有(是:)19、学校是否有计划、有投入的绿化校园环境的吗?A、否B、有 (是:)

大学生对大学校园文化活动的满意度调查问卷

关于开展校园文化活动的调查问卷 各位同学: 您好!感谢您对本问卷的作答。 本问卷是毕业论文写作的一部分,我们对问卷数据只做综合性分析的统计处理,不做个案研究,问卷以不记名的方式填写,请大家放心填写。 1.您的性别是() A.男 B.女 2.您的年级是() A.2011级 B.2012级 C.2013级 D.2014级 3.您的专业类型() A.理工类 B.文史类 C.体艺类 4.您个人的爱好是() A唱歌跳舞 B.运动 C.绘画 D.看书 E.其他 5..大学期间您是否参加过我校开展的校园文化活动() A.经常参加 B.偶尔参加 C.没参加过 6.您个人对我校开展的校园文化活动是否满意() A.非常满意 B.基本满意 C.不满意 D.很不满意 7.您认为大学生应该参加校园文化活动吗?() A.都应该参加 B.适当参加 C.可参加可不参加 D.不应该参加 8.您认为参加校园文化活动的目的是什么?() A.锻炼自己,提升个人技能 B.感兴趣去玩玩 C.被学生组织社团强制要求参加 D.为班级充场 E.其他 9.您认为参加校园文化活动是否有收获() A.收获很多 B.有一些收获 C.没有收获 10.假如让您组织开展一个校园文化活动,您希望开展哪类活动()(可多选) A.思想品德教育活动 B.学术科研活动 C.文艺体艺活动 D.社会实践活动 E.志愿服务活动 F.创新创业活动 F.其他 11. 假如让您在多个活动中选择一个校园文化活动来开展,您会考虑选择什么样的活动()(可多选) A.有利于大学生开发智力、提高文化素养、完善知识结构的活动 B.促进大学生思想政治道德素质进步发展的活动 C.提高大学生适应社会的能力和人际交往技能的活动 D.提高大学生心理健康发展的活动 E.培养大学生创业思想、创造精神、竞争意识的活动 F.其他

UBoot源码分析1

?UBoot源码解析(一)

主要内容 ?分析UBoot是如何引导Linux内核 ?UBoot源码的一阶段解析

BootLoader概念?Boot Loader 就是在操作系统内核运行之前运行 的一段小程序。通过这段小程序,我们可以初始 化硬件设备、建立内存空间的映射图,从而将系 统的软硬件环境带到一个合适的状态,以便为最 终调用操作系统内核准备好正确的环境 ?通常,Boot Loader 是严重地依赖于硬件而实现 的,特别是在嵌入式世界。因此,在嵌入式世界 里建立一个通用的Boot Loader 几乎是不可能的。 尽管如此,我们仍然可以对Boot Loader 归纳出 一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

UBoot来源?U-Boot 是 Das U-Boot 的简称,其含义是 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。最早德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM 的源码创建了 PPCBoot 工程项目,此后不断 添加处理器的支持。而后,Sysgo Gmbh 把 PPCBoot 移 植到 ARM 平台上,创建了 ARMBoot 工程项目。最终, 以 PPCBoot 工程和 ARMBoot 工程为基础,创建了 U- Boot 工程。 ?而今,U-Boot 作为一个主流、通用的 BootLoader,成功地被移植到包括 PowerPC、ARM、X86 、MIPS、NIOS、XScale 等主流体系结构上的百种开发板,成为功能最多、 灵活性最强,并且开发最积极的开源 BootLoader。目前。 U-Boot 仍然由 DENX 的 Wolfgang Denk 维护

嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一) 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux 的朋友提供方便。如有错误之处,谢请指正。 ?共享资源,欢迎转载:https://www.360docs.net/doc/bb14819193.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 二、移植步骤 本次移植的功能特点包括: ?支持Nand Flash读写 ?支持从Nor/Nand Flash启动 ?支持CS8900或者DM9000网卡 ?支持Yaffs文件系统 ?支持USB下载(还未实现) 1.了解u-boot主要的目录结构和启动流程,如下图。

u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。各个部分的流程图如下:

2. 建立自己的开发板项目并测试编译。 目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM 处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。 1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫my2440 2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改

大学校园文化氛围调查问卷

关于大学校园文化氛围的调查问卷 此次调查旨在通过您对校园文化氛围的解读和评说,为构建充满人文精神和馥郁书香的和谐之大学校园文化氛围提供参考意见。本问卷不记姓名,答案无所谓对错,您的回答将按照国家《统计法》予以保密。占用了您的宝贵时间,向您表示衷心的感谢! 说明:请在每一个问题后适合自己情况的答案号码上画“√”,或在“”处填上适当的内容。 若无特殊说明,每一个问题只能选择一个答案。 一、问题 1、您认为学校留给您最深刻的印象是什么?(可多选,并按深刻程度由深到浅排序) ①图书馆丰厚的藏书②富有人格魅力的校长、系主任或老师③美丽的校园④感情笃厚的学友⑤丰富多彩的讲座⑥异彩纷呈的社团活动⑦开学典礼、毕业典礼等校园习俗活动⑧其他④ 3、您是否以所在的系(院)为自豪?①是②否③说不清楚③ 4、您所在的班级对您的成长有否影响?①有②没有③说不清楚③ 5、您是否留恋所在的宿舍?①是②否③说不清楚① 6、您有否在学校或系(院)一级的社团组织任过职?①有②没有② 7、这些经历对您的成长有帮助吗?(第6题选②的这一题不答) ①很有帮助②较有帮助③一般④没什么帮助⑤根本没帮助⑥说不清楚 8、您认为校长对您影响(指正面影响,下同)大吗?⑤ ①影响很大②较有影响③一般④没什么影响⑤根本没影响⑥说不清楚 9、校长对您的影响主要表现在哪些方面?(可多选,第8题选⑤的这一题不答) ①为人②治学③做事④个性⑤其他 10、您所在系的系主任、系书记对您影响大吗?⑤ ①影响很大②较有影响③一般④没什么影响⑤根本没影响⑥说不清楚 11、系主任、系书记对您的影响主要表现在哪些方面?(可多选,第10题选⑤的这一题不答) ①为人②治学③做事④个性⑤其他 12、您的辅导员、班主任对您的成长帮助大吗?③ ①很有帮助②较有帮助③一般④没什么帮助⑤根本没帮助⑥说不清楚 13、辅导员、班主任对您的影响主要是什么方面?(可多选,第12题选⑤的这一题不答) ①为人②治学③工作④个性⑤其他①④ 14、给您印象最深刻的任课老师是哪种类型的教师?(可多选)②① ①和蔼可亲的②专业知识渊博的③教学经验丰富的④比较严厉的⑤其他

校园文化调查报告

毛泽东思想和中国特色社会主义理 论体系概论 大理学院 2012级临床医学9班游钦涵 学生实践教学活动记录 课题名称:我校部分大学生对班级文化建设浅调查 课题组长:车欣 所在院系(班级):基础医学院2012级临床9班 联系电话: 指导教师: 填表时间: 2014/06/05 一、调查时间 2014年5月20日至2014年6月5日 二、调查地点(包含古城校区和下关校区) 大理学院 三、调查方式 问卷调查,网络调查 四、调查主题 我校部分大学生对班级文化建设浅调查——以大理学院(两个校区)为例五、调查对象 大理学院两个校区在校本科学生(每个学院按照一定) 六、课题成果

以大理学院为例的大学生对班级文化建设看法的调查报告 七、活动目的 了解大学生对班级文化建设的看法和意见,班级文化在日常生活中是否有其存在的重要性,班级组织班级文化活动参加的积极程度,班级文化建设应该注重哪几方面及其侧重点是什么,了解班级宿舍文化建设的概况,了解我校大学生对同学人际关系的看法,及其所在班级同学交际关系如何,对当前本班的班级文化的满意度等。 八、活动的设计方案 我们小组的设计方案是问卷调查、适当选取配合度较高的同学进行交谈询问并配合网上检索资料。首先是讨论课题调查的方向,调查方向明确后制作调查问卷(其中各项班级文化组成成分都要有所涉及,并注重几个方面的建设,例如:班级文化活动建设成果调查、班级宿舍文化建设成果、班级人际关系建设调查、班级文化建设对班级成员的影响、班干部对班级文化建设的作用浅谈以及班级学习氛围等各方面的调查)然后分工合作,制作问卷,分发问卷并调查,统计调查结果,并在活动中采集相关活动照片,然后总结讨论调查结果所显示的内容的含义,最后归纳总结并写出调查报告(注:调查报告必须注重其深度和侧重点,把握好调查问卷中选项差异较大的问题进行深刻分析及其所体现的不同被调查者对班级文化建设的看法),然后统一时间小组同学进行研读讨论,各自指出各自看法并加以讨论对不足之处进行修改完善。 九、活动开展过程记录 1、2014年5月20日,进行课题讨论,确定课题方向为班级文化,同时决定进行课题的方式为调查问卷,并进行分工合作,决定江映萍和彭旭制作调查问卷并分发和回收调查问卷,调查问卷回收后由彭媛和尹海江统计调查结果,最后车欣和游钦涵进行总结并完成调查报告。 2、2014年5月23日,彭旭与江映萍完成调查问卷的制作,并进行小组讨论,

iTop4412的uboot第一阶段

2 uboo t 源码分析 2.5.1.star t.S 2.5.1.star t.S 引入引入 2.5.1.1、u-boot.lds中找到start.S入口 (1)在C语言中整个项目的入口就是 main函数(这是 个.c文件的项目,第一个要分析的文件就是包含了C语言规定的),所以譬如说一 个有 main函数的那个文件。 10000 ( 2 方。ENTRY(_start)因此 _start 符号所在的文件就是整个程序的起始文 件, _sta rt 所在处的 代码就是整个程序的起始代码。 2.5.1.2、SourceInsight中如何找到 文件 (1)当前状况:我们知道在uboot中的1000多个文件中有一个符号 叫 _start,但是我们不知道 这个符号在哪个文件中。这种情况下要查找一个符号在所有项目中文件中的引用,要使用SourceInsight的搜索功能。 (2)start.s 在cpu/arm_cortexa9/start.s (3)然后进入start.S文件中,发现 个uboot的入口代码,就是第57 57行中就 是行。_sta rt 标号的定义处,于是乎我们就找到了整 2.5.1.3、SI中找文件技巧 (1)以上,找到了start.S文件,下面我们就从start.S文件开始分析uboot第一阶段。 (2)在SI中,如果我们知道我们要找的文件的名字,但是我们又不知道他在哪个目录下,我 们要怎样找到并打开这个文件?方法是在 SI中先打开右边的工程项目管理栏目,然后点击 最左边那个(这个是以文件为单位来浏览的),然后在上面输入栏中输入要找的文件的名 字。我们在输入的时候,SI在不断帮我们进行匹配,即使你不记得文件的全名只是大概记 得名字,也能帮助你找到你要找的文件。 2.5.2.start.S解析1 2.5.2.1、不简单的头文件包含

校园文化建设问卷调查表

校园文化建设问卷调查表 老师们、同学们: 您们好! 我们正在进行一项有关校园文化建设问卷的调查,希望能够占用一点您宝贵的时间,接受我们的调查,非常感谢您的宝贵意见,我们会使我们的校园文化变得更加充实,更加精彩! 1.请选择你对应的身份教师()管理人员()其他人员()学生() 2.你的性别是男()女() 3.你认为我校学生活动开展情况如何?非常满意()满意()一般()不满意() 4.你有积极地参加过校园文化建设的活动吗?有()没有() 5.你觉得校园文化建设的主要功能体现在哪些方面?引导()鼓励()传媒()实践() 6.你认为我校校园文化建设的主体是什么?学生()教师()教职员()工其他工作人员() 7.你认为校园文化建设存在哪些问题?活动不多()网上平台欠缺()积极性不高() 缺少文化资源()其他() 8.你认为我校地理环境和人文环境怎么样?非常满意()满意()一般()不满意() 9.你认为校园文化建设应该怎么样建设?[排序题] ()绿化建设()道德教育()校风建设()宣传工作()名声效应 10.你认为校园文化建设的主要作用是? 凝聚师生人心()坚持特色办学理念()丰富发展校园人文底蕴()促进开放办学()15.你对校园文化建设和管理的态度是? 坚决支持并充满信心()支持但缺乏信心()能够理解但持保留意见,() 顺其自然更好()反对()说不清楚() 18.你认为校园文化的表现形态为? 显性文化()隐性文化()精神文化()物质文化() 19.如果增加阅报栏公告栏等,你觉得放在校园中那些部位方便浏览? 食堂前()教学楼前()寝室楼前()操场边() 20.您认为的校园文化建设应该有哪些(请您列举两条): 21.你认为当前我们学校的校园文化存在哪些问题: 22.请问您对学校娱乐活动有何看法? 23.你认为学校的校园文化最欠缺什么?

uboot_freescale_imx51_start.s_详解

/* * *Purpose: the document is used to learn detailed information aboutimx51 cpu start.S, *referring to some documents on websites. *file address: U-boot-2009.08/Cpu/Arm_cortexa8/start.S * * writer: xfhai 2011.7.22 * *Instruction: *1.@xxxx : indicates annotation *2./***** *** *****/ : stand for code in my files *3.instructions refers to code not included in my file * */ Section 1: uboot overview 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下:==> (1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 ==>(2)设置异常向量(Exception Vector)。 ==>(3)设置CPU的速度、时钟频率及终端控制寄存器。 ==>(4)初始化内存控制器。 ==>(5)将ROM中的程序复制到RAM中。 ==>(6)初始化堆栈。 ==>(7)转到RAM中执行,该工作可使用指令ldr pc来完成。 2、Stage2 C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: ==>(1)调用一系列的初始化函数。 ==>(2)初始化Flash设备。 ==>(3)初始化系统内存分配函数。 ==>(4)如果目标系统拥有NAND设备,则初始化NAND设备。 ==>(5)如果目标系统有显示设备,则初始化该类设备。 ==>(6)初始化相关网络设备,填写IP、MAC地址等。 ==>(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

关于我校校园文化建设情况的调查问卷

上海协和双语高级中学 关于我校校园文化建设情况的调查问卷 您好! 校园文化作为一种文化形态,它通过丰富多彩的内容和各种各样的形式对学生价值观念、道德情操、思想内涵和行为模式的形成和发展起着较深的影响。 我们正在进行一项有关校园文化建设情况相关建议的调查问卷,希望能够占用您一点宝贵的时间接受我们的调查并真诚地希望得到您的宝贵建议!谢谢! 1、您的性别是() A 男 B 女 2、您认为校园文化是() A 校园文化是一种氛围,一种精神; B 是一所学校综合实力的显示 C 校园文化建设可以极大地提升学校的文化品位; D 以上均正确 3、您认为在学生中展开校园精神文化建设活动有必要吗?() A 很有必要 B 有必要 C 一般 D 无所谓 4、如果增加阅读报栏等,您觉得放在校园中哪些地方方便浏览?() A 食堂前 B 教学楼前 C 图书馆前 D 宿舍楼前 5、您认为我校校园文化建设在哪些方面有待加强?() A 师生互动 B 校园网的信息 C 加强宣传力度 D 挖掘文化资源 E 其它方面 6、您认为学校应举办那些报告、讲座?() A 适当举办时事形势报告 B 学科专家的学术报告 C 中学教育心理学的案例分析D课堂教学的心得体会 7、您觉得校园文化的主要功能应该体现在哪些方面?() A 引导 B 鼓励 C 传媒 D 实践 E 以上都包括 8、以下校园文化活动,您喜欢哪些?() A 思想教育 B 科技创新 C 社会实践 D 学术讲座 E 社团活动 F 文体活动 9、您认为校园文化建设,应该着重于以下哪些内容?() A 绿化建设 B 校风建设 C 班风建设 D 宣传工作 E 名声效益 F 道德教育 G 其它 10、您认为建设中的我校校园文化应该是什么类型的?( ) A、严谨 B 、活跃C、快乐D、其它 11、您认为如何调动师生对校园文化建设的积极性?( ) A、加强宣传 B、组织保证 C、措施人性化 D、多方鼓励 E 领导小范围先做 12、您认为如何加快我校的校园文化建设?( ) A、更新观念 B、筹措经费 C、组织保障 D、更新老旧设备 E、绿化F 其它 13、您认为良好的学习习惯包括哪些内容?教学中如何培养学生良好的学习习惯? 14、您认为学生的自信应有哪些内容?教学中如何提升学生的自信心? 15、您认为我校在课堂教学文化建设的哪些方面还有提升的空间? 16、您认为我校在环境文化建设的哪些方面还有提升的空间? 1 / 1

uboot启动代码详解

·1 引言 在专用的嵌入式板子运行GNU/Linux 系统已经变得越来越流行。一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。固化在固件(firmware)中的boot 代码,也就是Boot Loader,它的启动通常分为两个阶段。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统,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 程序。·2 bootloader简介 简单地说,Boot Loader (引导加载程序)就是在操作系统内核运行之前运行的一段小程序,它的作用就是加载操作系统, 实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。如上图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootloader实现。 2.1 Boot Loader 所支持的CPU 和嵌入式板 每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。除了依赖于CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。 2.2 Boot Loader 的安装媒介(Installation Medium)

相关文档
最新文档