ARM的嵌入式Linux移植体验之BootLoader

合集下载

第5章_Bootloader_设计基础

第5章_Bootloader_设计基础

6. BootLoader 与主机之间进行文件传输所用通信设备及协议 最常见的情况就是,目标机上的 Boot Loader 通过串口与主机之
间进行文件传输,传输协议通常是 xmodem/ymodem/zmodem 协议中
的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借 助 TFTP 协议来下载文件是个更好的选择。
3.将 kernel 映像和根文件系统映像从 flash 上读 到 RAM 空间中。
4.为内核设置启动参数。 5.调用内核。
Boot Loader 的 stage1
1. 基本的硬件初始化
屏蔽所有的中断
– 为中断提供服务通常是 OS 设备驱动程序的责任,因此在 Boot Loader 的执行全过程中可以不必响应任何中断。中断屏蔽可以通 过写 CPU 的中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄 存器)来完成。
来实现,以达到短小精悍的目的。而 stage2 则通常用C 语言来实现,这样可以实现给复杂的功能(比如串口、以
太网接口的支持等) ,而且代码会具有更好的可读性和下步骤(以执行 的先后顺序): 1. 硬件设备初始化 2. 为加载 Bootloader 的 stage2 准备 RAM 空间
系统映像的固态存储设备的典型空间分配结构图。
3. 用来控制 Boot Loader 的设备或机制 主机和目标机之间一般通过串口建立连接,Boot Loader 软件在 执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从 串口读取用户控制字符等。
4. Boot Loader 的启动过程是单阶段(Single Stage)还是多阶段 (Multi-Stage) 通常多阶段的 Boot Loader 能提供更为复杂的功能,以及更好的 可移植性。从固态存储设备上启动的 Boot Loader 大多都是 2 阶段

Bootloader过程简介

Bootloader过程简介
17
堆栈指针sp:stage_end-4
RAM地址空间
stage1为stage2可执行 映像准备的RAM地址范
围,大小:1MB
......
stage2_start
...
...(blank)
ramdisk
...(blank)
Flash地址空间
内核映像 ...(blank)
0x0001,0000(64KB)
11
下载模式应用场合:Bootloader的这种模式通常 在第一次安装内核与根文件系统时被使用;此外, 以后的系统更新也会使用到这种工作模式。
用户应用接口:工作于这种模式下的Bootloader 通常都会向它的终端用户提供一个简单的命令行接 口。 如在RedBoot下,将出现“RedBoot>”提示符; 在vivi Bootloader 下出现“vivi>”提示符。
stage2可执行映像可能 的最大大小:1MB
stage1可执行映像大 小:1MB
0x0000,0400(1KB) 0x0000,0000
Bootloader的 stage2可执行映像 刚被拷贝到RAM空 间时的系统内存布 局
18
2、第二阶段
阶段2通常用C语言来实现,以便实现更复杂 的功能,也使程序有更好的可读性和可移植性。 这个阶段的主要任务有5:
back
14
3.4 Bootloader启动过程
Bootloader的启动可以分为两个阶段
1、第一阶段
阶段1主要包含依赖于CPU体系结构及硬件设备的初始 化等。通常都用汇编语言来实现。这个阶段的任务有5:
(1)、基本的硬件设备初始化 这是 Bootloader 一开始就执行的操作,其目的是为阶 段2 的执行、以及随后kernel 的执行准备好一些基本的硬 件环境。

嵌入式系统设计-BootLoader

嵌入式系统设计-BootLoader

Bootloader要实现的主要工作1
• 硬件系统自检 • 配置其他Bank或者端口、外设等工作模式 • 处理中系统的中断
– 在不支持remap的处理器中,中断必然要经过 Boot ROM的空间,这时,Boot ROM需要处理 的任务就是把固定的中断向量映射到一个可编 程的中断处理子程序的地址
Bootloader要实现的主要工作2
• 引导操作系统
– 系统配置完成以后, Bootloader需要把操作系 统(或者其他程序)装载到SDRAM(就是系统 的RAM区),然后,把PC指针指向程序的RAM 空间,使操作系统启动,这就是引导。
Bootloader要实现的主要工作3
• Flash(Boot ROM)编程
– 对引导Flash(或者其他的非易失性存储器)编 程,通过串口或者以太网口下载编译成功的操 作系统或者应用程序,甚至Boot ROM本身。
• 大多数Boot Loader 都包含两种不同的操作
模式:“启动加载”模式和“下载”模式, 这种区别仅对于开发人员才有意义。
• 最终用户的角度看,Boot Loader 的作用就
是用来加载操作系统,而并不存在所谓的 启动加载模式与下载工作模式的区别。
启动加载模式
• 也称为“自主”(Autonomous)模式。也
– 要想实现Boot ROM的自编程,必须让Boot 程 序是在RAM中运行
Bootloader的制作
• Boot ROM使用来配置系统启动的。没有
Boot ROM,系统就不能配置,更不能启动。
• Boot ROM可以自编程,但是,第一次系统
启动用的Boot ROM是如何烧录的呢?
– 使用插座连接Flash配合编程器 – 通过ARM的JTAG接口

认识Bootloader

认识Bootloader
主机和目标机之间一般通过串口建立连接
Boot Loader 软件在执行时通常会通过串口来进行 I/O,比如
输出打印信息到串口 从串口读取用户控制字符等。
最常用的串口通信软件
Linux:minicom Windows:附件中的超级终端
BootLoader的启动过程
Boot Loader的启动过程可以是 单阶段(Single Stage)
BootLoader的操作模式
大多数 Boot Loader 包含两种不同的操作模式 启动加载(Boot loading)模式 下载(Downloading)模式 这种区别仅对于开发人员才有意义,从最终用户的角度看,Boot Loader 的作用就是加载操作系统,并不存在上述两种模式的区别
启动加载模式
也称为自主(Autonomous)模式 Boot Loader从目标机上的某个固态存储设备上将操作系统加载
到 RAM 中运行,整个过程并没有用户的介入。 这种模式是 Boot Loader 的正常工作模式
在嵌入式产品发布时,Boot Loader必须工作在该模式下
下载模式
目标机的 Boot Loader通过串口或网络等通信手段从主机(Host)下载文件 比如内核映像和根文件系统映像 Hosttarget ram target FLASH 该模式的使用时机 通常在第一次安装内核与根文件系统时被使用 也用于此后的系统更新 工作于该模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令 行接口
基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上。
比如:ROM、EEPROM 或 FLASH 等。
因此在系统加电后,CPU将首先执行Bootloader 程序。

基于ARM平台Linux内核移植论文

基于ARM平台Linux内核移植论文

基于ARM平台的Linux内核移植中图分类号:tp 文献标识码:a 文章编号:1007-0745(2011)10-0204-01摘要:linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。

可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。

本文介绍了基于arm 开发板的linux内核移植过程,主要包括二方面的内容:交叉编译器的安装、内核的配置与移植。

本文要求读者具备一定的linux操作系统使用经验。

关键词:移植内核 linux一、概述一个嵌入式linux系统的启动顺序可以分为四步:1、引导加载程序(bootloader)。

2、加载linux内核。

3、挂载根文件系统。

4、运行应用程序。

所以要想使linux内核在开发板上运行,就必须对以上四步的相关源代码进行移植操作,使其可运行于嵌入式平台。

本文主要介绍内核移植部分,其余部分可参考相应书箱或文档。

二、开发环境的建立2.1、安装虚拟机、fedora13操作系统及相关的开发工具(gcc、gedit等),本文的所有操作均是在这种开发环境下进行,本文的工作目录为 \work,且都是在root权限下操作。

2.2、交叉编译器(arm-linux-gcc)的安装。

交叉编译器是嵌入式linux开发的基础,后续的移植过程都要用到此编译器,在linux pc平台下,利用arm-linux-gcc编译器可编译出针对arm linux平台的可执行代码。

安装过程如下:a、网上获取arm-linux-gcc-4.3.2.tgz源代码包并保存于/work 目录中。

b、解压命令(tar xvzf arm-linux-gcc-4.3.2.tgz -c /)注意上面的命令必须是大写c且后面有个空格,这样将源代码解压至目录/usr/local/arm/4.3.2中。

c、配置编译环境路径。

输入命令(gedit /root/.bashrc)打开.bashrc文件,在最后一行加入如下内容:exportpath=/usr/local/arm/4.3.2/bin:$path保存关闭文件,用root重新登录系统,输入命令:(arm-linux-gcc –v)如果安装成功将会显示arm-linux-gcc的版本号。

bootloader详解程序及其功能和特点

bootloader详解程序及其功能和特点

bootloader详解-----程序及其功能和特点在进行嵌入式开发时,会碰到一个名词bootloader,那个东西不太好懂,不要说自己写bootloader,确实是能看懂他人的bootoader都比较困难。

本文详细的介绍了bootloader 的原理,回答了什么是bootloader,什么缘故要用bootloader。

看到后,希望您能明白什么是bootloader。

一、引言在专用的嵌入式板子运行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 BootLoader。

Boot Loader 的要紧运行任务确实是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

而在嵌入式系统中,通常并无像BIOS 那样的固件程序(注,有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader 来完成。

ARM开发教程之ARM Linux系统移植步骤

千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之ARM LINUX系统移植步骤 ARM开发教程之ARM LINUX系统移植步骤 开发教程之
ARM简介 Linux简介 系统的制作移植建立交叉编译环境 引导程序 内核 修改内核 内核的配置编译 根文件系统 结束语

千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之引导程序 引导程序
对于计算机系统来说,从开机上电到操作系统启动需要一个引导程 序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做 Bootloader[1]。通过这段小程序,可以初始化硬件设备、建立内存 空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系 统内核做好准 备。 vivi[4]是韩国MIZI公司为其arm9系列产品而研发的Bootloader, 小而灵巧,这里选用它作为小型Linux系统的Bootloader。 首先要修改vivi源代码中的Flash分区信息,新的分区信息如表1 所示。 根据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的 修改。 然后在配置菜单中导入smdk2410的默认配置,编译成功将在 vivi源代码目录下生成所需的Bootloader文件,文件名为vivi。 接着,便可把vivi下载到目标板Flash的相应位置。

千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之ARM简介
Arm9S3C2410微处理器与Linux的结合越来越紧密,逐 渐在嵌入式领域得到广范的应用。目前,在便携式消 费类电子产品、无线设备、汽车、网络、存储产品等 都可以看到S3C2410与Linux相结合的身影。 S3C2410微处理器是一款由Samsung公司为手持 终端设计的低价格、低功耗、高性能,基于arm920T 核的微处理器。它带有内存管理单元 (MMU),采用 0.18mm工艺和AMBA新型总线结构,主频可达203MHz。 同时,它支持Thumb 16位压缩指令集,从而能以较小 的存储空间获得32位的系统性能。

Bootloader的基本概念

转载]Bootloader的基本概念一、Bootloader的基本概念一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:引导加载程序、Linux 内核、文件系统、用户应用程序。

引导加载程序是系统加电后运行的第一段代码。

我们熟悉的PC中的引导程序一般由BIOS和位于MBR的OS bootloader(例如LILO或者GRUB)一起组成。

然而在嵌入式系统中通常没有像BIOS那样的固件程序(有的嵌入式CPU有),因此整个系统的加载启动任务就完全由bootloader来完成。

在嵌入式Linux中,引导加载程序即等效为bootloader。

简单地说,bootloader就是在操作系统内核运行前运行地一段小程序。

通过这段小程序,我们可以初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。

bootloader是依赖于硬件而实现的,特别是在嵌入式系统中。

不同的体系结构需求的bootloader是不同的;除了体系结构,bootloader还依赖于具体的嵌入式板级设备的配置。

也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU构建,运行在其中一块电路板上的bootloader,未必能够运行在另一块电路开发板上。

Bootloader的启动过程可以是单阶段的,也可以是多阶段的。

通常多阶段的bootloader 能提供更为复杂的功能,以及更好的可移植性。

从固态存储设备上启动的bootloader大多数是二阶段的启动过程,也即启动过程可以分为stage 1和stage 2两部分二、Bootloader的操作模式大多数bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别对于开发人员才有意义。

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

嵌入式心得体会优秀4篇

嵌入式心得体会优秀4篇嵌入式心得体会篇1现在的嵌入式工作是越来越盛行,而这方面的人员却是越来越少,所以学习嵌入式是解决找工作难的一个比较有效的途径。

因为我开始踏上学习嵌入式的道路。

听别人说嵌入式ARM相比于其他的嵌入式FPGA,DSP等都要难点,而且学习的内容量也是比较多。

因此在学习嵌入式ARM的初级阶段是随处碰壁,每天都在遭受打击,例如在移植bootloader时,虽然按照网上的一些方法移植成功了,但只知道复制和粘贴要修改的代码,却不知道为何要这么做。

我觉得这样的学习态度是不对的,学习不是只求结果,而是要注重解决问题的过程!为了学习嵌入式Linux我也在网上查阅了很多的书籍,还下载了很多的视频,但都不是很让人如意。

它们大多是讲的很浅显,都是泛泛之谈,没有讲到最核心的东西。

到了最后是浪费了我们学习者的时间和精力。

之后看见师兄有一本韦东山老师编辑的《嵌入式Linux应用开发完全手册》,我就借了几天看了看,发现韦老师对嵌入式Linux的极其深度的分析,让我一下子找到了能带我入门的一本书!并且还有配套的视频教学更是讲解地非常到位,将教材和视频相互配合的学习,更加大大的提供了学习效率,尤其是视频上讲解的内容,都是韦东山老师自己亲自授教,完全没有按照教材上的内容一一读出来,而是根据内核代码分析的教我如何编写自己的代码,尤其是在Linux内核中占比例最重的一部分—内核驱动时,更是让我知道用户是如何通过应用程序来访问底层硬件的,解决了我长久以来都无法攻克的难题!!例如在编写LCD驱动时,我对于书上LCD硬件工作原理不是理解的很透彻,通过观看韦东山老师的第二期视频中的“LCD驱动程序”,老师就像是站在我面前,在屏幕上用电子笔细细给我讲解,写出更加形象的LCD的硬件驱动,重要的是在整个视频中老师都没有按着教材念,而是一个教学经验丰富的老师在给同学们授课一样。

编写代码也是亲自编写,没有完全复制别人的代码,编写的同时不断的说明每条语句的作用、编程思想和设计程序的经验,还有阅读大量代码的技巧!在视频中老师教会了许多其他书本中没有提及到的重要知识。

常见BootLoader介绍

4.2 常见BootLoader介绍首先区分一下BootLoader和Monitor的概念。

严格来说,BootLoader只是引导设备并且执行主程序的固件;而Monitor还提供了更多的命令行接口,可以进行调试、读写内存、烧写Flash、配置环境变量等。

Monitor在嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成了一个BootLoader。

所以,习惯上大家把它们统称为BootLoader。

目前,嵌入式系统中广泛应用的BootLoader有U-Boot、vivi、blob、armboot等。

嵌入式系统中硬件的种类繁多,差距较大,而BootLoader是严重依赖于硬件而实现的。

不同的CPU 体系需要不同的BootLoader,即便是同一种体系结构,由于其它硬件设备配置的不同,如板卡硬件地址的分配、RAM芯片的型号等,也需要对BootLoader作一定的修改才能使用。

因此,开发人员需针对不同的处理器和开发板,对BootLoader进行定制,来实现不同的功能。

Linux的开放源码引导程序及其支持的体系结构见表4.1。

表4.1 开放源码的Linux引导程序下面,对嵌入式世界里几种常见的BootLoader做一简单介绍。

4.2.1 U-Boot介绍U-Boot(Universal BootLoader)是遵循GPL条款的开放源码项目,是在PPCBoot以及ARMBoot的基础上逐步发展和演化而来,现在U-Boot已经能够支持PowerPC、ARM、X86、MIPS等体系结构的上百种开发板,已经成为功能最多、灵活性最强,并且开发最积极的开放源码的BootLoader。

U-Boot提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。

U-Boot源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM的嵌入式Linux移植体验之BootLoader
2007-04-25 23:03
2006-08-12 08:00 作者:宋宝华出处:天极开发
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。

通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

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

因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。

尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。

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

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

BootLoader 的 stage1 通常包括以下步骤:
·硬件设备初始化;
·为加载Boot Loader的stage2准备 RAM 空间;
·拷贝Boot Loader的stage2 到RAM空间中;
·设置好堆栈;
·跳转到 stage2 的 C 入口点。

Boot Loader的stage2通常包括以下步骤:
·初始化本阶段要使用到的硬件设备;
·检测系统内存映射(memory map);
·将kernel 映像和根文件系统映像从flash上读到 RAM 空间中;
·为内核设置启动参数;
·调用内核。

本系统中的BootLoader参照韩国mizi公司的vivi进行修改。

1.开发环境
我们购买了武汉创维特信息技术有限公司开发的具有自主知识产权的应用于嵌入式软件开发的集成软、硬件开发平台ADT(ARM Development Tools)它为基于ARM 核的嵌入式应用提供了一整套完备的开发方案,包括程序编辑、工程管理和设置、程序编译、程序调试等。

ADT嵌入式开发环境由ADT Emulator for ARM 和ADT IDE for ARM组成。

ADT Emulator for ARM 通过JTAG 实现主机和目标机之间的调试支持功能。

它无需目标存储器,不占用目标系统的任何端口资源。

目标程序直接在目标板上运行,通过ARM 芯片的JTAG 边界扫描口进行调试,属于完全非插入式调试,其仿真效果接近真实系统。

ADT IDE for ARM 为用户提供高效明晰的图形化嵌入式应用软件开发环境,包括一整套完备的面向嵌入式系统的开发和调试工具:源码编辑器、工程管理器、工程编译器(编译器、汇编器和连接器)、集成调试环境、ADT Emulator for ARM 调试接口等。

其界面同Microsoft Visual Studio 环境相似,用户可以在ADT IDE for ARM 集成开发环境中创建工程、打开工程,建立、打开和编辑文件,编译、连接、设置、运行、调试嵌入式应用程序。

ADT嵌入式软件开发环境采用主机-目标机交叉开发模型。

ADT IDE for ARM 运行于主机端,而ADT Emulator for ARM 实现ADT IDE for ARM 与目标机之间的连接。

开发时,首先由ADT IDE for ARM 编译连接生成目标代码,然后建立与ADT Emulator for ARM 之间的调试通道,调试通道建立成功后,就可以在ADT IDE for ARM 中通过ADT Emulator for ARM 控制目标板实现目标程序的调试,包括将目标代码下载到目标机中,控制程序运行,调试信息观察等等。

2.ARM汇编
ARM本身属于RISC指令系统,指令条数就很少,而其编程又以C等高级语言为主,我们仅需要在Bootloader的第一阶段用到少量汇编指令:
(1)+-运算
其中的第二个操作数可以是一个立即数:
第二个操作数还可以是位移操作后的结果:
(2)位运算
(3)寄存器搬移
(4)比较
这些指令影响CPSR寄存器中的 (N, Z, C, V) 位
(5)内存操作
{..} 可以包括r0~r15中的所有寄存器,若包括r15 (PC)将导致程序的跳转。

(6)控制流
例1:
例2:
3.BootLoader第一阶段
3.1硬件设备初始化
基本的硬件初始化工作包括:
·屏蔽所有的中断;
·设置CPU的速度和时钟频率;
·RAM初始化;
·初始化LED
ARM的中断向量表设置在0地址开始的8个字空间中,如下表:
每当其中的某个异常发生后即将PC值置到相应的中断向量处,每个中断向量处放置一个跳转指令到相应的中断服务程序去进行处理,中断向量表的程序如下:
复位时关闭看门狗定时器、屏蔽所有中断:
设置系统时钟:
点亮所有的用户LED:
设置(初始化)内存映射:
设置(初始化)UART:
此外,vivi还提供了几个汇编情况下通过串口打印字符的函数PrintChar、PrintWord和PrintHexWord:
3.2Bootloader拷贝
配置为从NAND FLASH启动,需要将NAND FLASH中的vivi代码copy到RAM 中:
3.3进入C代码
首先要设置堆栈指针sp,堆栈指针的设置是为了执行C语言代码作好准备。

设置好堆栈后,调用C语言的main函数:
4. BootLoader第二阶段
vivi Bootloader的第二阶段又分成了八个小阶段,在main函数中分别调用这几个小阶段的相关函数:
STEP1的putstr(vivi_banner)语句在串口输出一段字符说明vivi的版本、作者等信息,vivi_banner定义为:
reset_handler进行相应的复位处理:
hard_reset_handle会clear内存,而软件复位处理则什么都不做:
STEP2进行板初始化,设置时间和可编程I/O口:
STEP3进行内存映射及MMU初始化:
S3C2410A的MMU初始化只需要调用通用的arm920 MMU初始化函数:
STEP4设置堆栈;STEP5进行mtd设备的初始化,记录MTD分区信息;STEP6设置私有数据;STEP7初始化内建命令。

STEP8启动一个SHELL,等待用户输出命令并进行相应处理。

在SHELL退出的情况下,启动操作系统:
SHELL中读取用户从串口输出的命令字符串,执行该命令:
5.电路板调试
在电路板的调试过程中,我们首先要在ADT新建的工程中添加第一阶段的汇编代码head.S文件,修改Link脚本,将代码和数据映射到S3C2410A自带的
0x40000000开始的4KB内存空间内:
借助万用表、示波器等仪器仪表,调通SDRAM,并将vivi中自带的串口、NAND FLASH驱动添加到工程中,调试通过板上的串口和FLASH。

如果板电路的原理与三星公司DEMO板有差距,则vivi中硬件的操作要进行相应的修改。

全部调试通过后,修改vivi源代码,重新编译vivi,将其烧录入NAND FLASH就可以
在复位后启动这个Bootloader了。

调试板上的新增硬件时,宜在ADT中添加相应的代码,在不加载操作系统的情况下,单纯地操作这些硬件。

如果电路板设计有误,要进行飞线和割线等处理。

6.小结
本章讲解了ARM汇编、Bootloader的功能,Bootloader的调试环境及ARM 电路板的调试方法。

相关文档
最新文档