基于ARM-μCLinux嵌入式系统启动引导的实现2

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 sbamdanb00 的 blog

2 系统引导程序的设计

系统引导程序bootloader是嵌入式系统加电后执行的第一个程序,进行功能设计时首先要考虑以下问题:

(1)将μclinux内核和文件系统固化在flash中

目地μclinux内核和文件系统固化在flash的手段很多。主机可以通过jtag口,将内核和文件系统的映像文件烧写到指定的flash位置上;也可以通过以太网接口,将映像文件下载到flash中;另外还可以通过串口烧写到flash。前两种方法的下载速度比后一种方法快得多。在本系统中,采用串口烧写flash。这是因为一方面配置一个串口方便且廉价,而jtag烧写还要配置昂贵的jtag仿真器和相关的驱动程序以及协议转换程序,网口下载还要有以太网支持;另一方面μclinux默认通过串口打印其运行的信息,那么串口不但可以提供烧写flash的功能,还可作为调试μclinux内核的通道。

在本系统中,flash在刚开始时,只存储了bootloader,还没有存储μclinux内核和文件系统。因此bootloader在系统加电完成初始化工作后,要初始化一条链接主机和目标机的串口通道,并提供串口下载功能。

(2)系统初始化

因为系统刚加电时,操作系统的内核还没有被加载,系统的初始化工作由bootloader完成。它主要是将系统、初始化存储系统、配置arm各种模式下的数据栈、使能屏常中断、根据需要切换处理器模式和状态。

(3)μclinux内核加载方式

固化在flash中的μclinux内核有两种运行方式:一种方式是直接在flash中运行μclinux自带的引导程序;另一种方式是将固化在flash中的内核先拷贝到sdram的某一段地址区间,再从该段地址区间的首地址运行uclinux内核。

第一种方式是bootloader进行系统初始化工作后,跳到内核固化在flash中的首地址处,将控制权交给μclinux,开始在flash中逐句执行内核自带的引导程序,由该引导程序完成内核的加载工作。这种方式是目前很多嵌入式系统启动内核所采用的方式,也是本系统采用的内核加载方式。

第二种方式是bootloader完成系统初始化工作后,把内核的映像文件由flash拷贝到sdram中,再从sdram中执行μclinux内核的引导程序,加载μclinux内核。

第二种加载方式在sdram中运行程序,因此执行速度比第一种方式快一些,并且可以通过ram快速引导技术实现这种加载方式。其主要是针对nand型flash的情况。与nor型flash最大的不同点是:nor型flash使用内存随机读取技术,与sdram一样,可以直接执行存储在flash中的程序;而nand一样,可以直接内存随机读取技术,它是一次读取一整块内存,因此不能直接执行存储在nand型flash中的程序,必须把nand型flash中的程序先拷贝到sdram,再在sdram中执行该程序。但是nand型flash价格比nor型flash廉价,所以很多嵌入式系统还是采用nor型flash(几百k字节)+nand型flash(几兆字节)的存储模式。其中nor型flash存放可执行的且代码量小的bootloader和一些必要的数据,而nand型flash保存存储量较大的内核和文件系统。

在本系统中,由于采用nor型flash存储bootloader、内核和文件系统,所以可以直接访问内核所在地址区间的首地址,执行内核自己的引导程序,而且内核自带的引导程序功能强大,可以方便地内核的加载,向内核传递有关的硬件参数。本系统采用第一种加载方式。

(4)自举模式和内核启动模式的切换

本文关键:基于ARM-μCLinux嵌入式系统启动引导的实现2
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top