ARMLinux移植基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM的嵌入式Linux移植体验之基本概念
日前,笔者作为某嵌入式ARM(硬件)/Linux(软件)系统的项目负责人,带领项目组成员进行了下述工作:
(1)基于ARM920T内核S3C2410A CPU的电路板设计;
(2)ARM处理下底层软件平台搭建:
a.Bootloader的移植;
b.嵌入式Linux操作系统内核的移植;
c.嵌入式Linux操作系统根文件系统的创建;
d.电路板上外设Linux驱动程序的编写。
本文将真实地再现本项目开发过程中作者的心得,以便与广大读者共勉。第一章将简单地介绍本ARM开发板的硬件设计,第二章分析Bootloader的移植方法,第三章叙述嵌入式mizi Linux的移植及文件系统的构建方法,第四章讲解外设的驱动程序设计,第五章给出一个已构建好的软硬件平台上应用开发的实例。
如果您有嵌入式系统的开发基础,您将非常容易领会本文讲解地内容。即便是您从来没有嵌入式系统的开发经历,本文读起来也不会生涩。您可以通过如下email与作者联系:21cnbao@。
2.ARM体系结构
作为一种RISC体系结构的微处理器,ARM微处理器具有RISC体系结构的典型特征。还具有如下增强特点:
(l)在每条数据处理指令当中,都控制算术逻辑单元(ALU)和移位器,以使ALU和移位器获得最大的利用率;
(2)自动递增和自动递减的寻址模式,以优化程序中的循环;
(3)同时Load和Store多条指令,以增加数据吞吐量;
(4)所有指令都条件执行,以增大执行吞吐量。
ARM体系结构的字长为32位,它们都支持Byte(8位)、Halfword(16位)和Word(32位)3种数据类型。
ARM处理器支持7种处理器模式,如下表:
大部分应用程序都在User模式下运行。当处理器处于User模式下时,执行的程序无法访问一些被保护的系统资源,也不能改变模式,否则就会导致一次异常。对系统资源的使用由操作系统来控制。
User模式之外的其它几种模式也称为特权模式,它们可以完全访问系统资源,可以自由地改变模式。其中的FIQ、IRQ、supervisor、Abort和undefined 5种模式也被称为异常模
式。在处理特定的异常时,系统进入这几种模式。这5种异常模式都有各自的额外的寄存器,用于避免在发生异常的时候与用户模式下的程序发生冲突。
还有一种模式是system模式,任何异常都不会导致进入这一模式,而且它使用的寄存器和User模式下基本相同。它是一种特权模式,用于有访问系统资源请求而又需要避免使用额外的寄存器的操作系统任务。
程序员可见的ARM寄存器共有37个:31个通用寄存器以及6个针对ARM处理器的不同工作模式所设立的专用状态寄存器,如下图:
ARM9采用5级流水线操作:指令预取、译码、执行、数据缓冲、写回。ARM9设置了16个字的数据缓冲和4个字的地址缓冲。这5级流水已被很多的RISC处理器所采用,被看作RISC结构的"经典"。更多内容请看Linux集群技术、体验Linux的音影世界、Linux 驱动大全专题,或进入讨论组讨论。
3.硬件设计
3.1 S3C2410A微控制器
电路板上的ARM微控制器S3C2410A采用了ARM920T核,它由ARM9TDMI、存储管理单元MMU和高速缓存三部分组成。其中,MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。ARM920T有两个内部协处理器:CP14和CP15。CP14用于调试控制,CP15用于存储系统控制以及测试控制。
S3C2410A集成了大量的内部电路和外围接口:
·LCD控制器(支持STN和TFT带有触摸屏的液晶显示屏)
·SDRAM控制器
·3个通道的UART
·4个通道的DMA
·4个具有PWM功能的计时器和一个内部时钟
·8通道的10位ADC
·触摸屏接口
·I2C总线接口
·12S总线接口
·两个USB主机接口
·一个USB设备接口
·两个SPI接口
·SD接口
·MMC卡接口
S3C2410A集成了一个具有日历功能的RTC和具有PLL(MPLL和UPLL)的芯片时钟发生器。MPLL产生主时钟,能够使处理器工作频率最高达到203MHz。这个工作频率能够使处理器轻松运行WinCE、Linux等操作系统以及进行较为复杂的信息处理。UPLL则产生实现USB模块的时钟。
下图显示了S3C2410A的集成资源和外围接口:
我们需要对上图中的AHB总线和APB总线的概念进行一番解释。ARM核开发的目的,是使其作为复杂片上系统的一个处理单元来应用的,所以还必须提供一个ARM与其它片上宏单元通信的接口。为了减少不必要的设计资源的浪费,ARM公司定义了AMBA(Advanced
Microcontroller Bus Architecture)总线规范,它是一组针对基于ARM核的、片上系统之间通信而设计的、标准的、开放协议。
在AMBA总线规范中,定义了3种总线:
(l)AHB-Advanced High Performace Bus,用于高性能系统模块的连接,支持突发模式数据传输和事务分割;
(2)ASB-Advanced System Bus,也用于高性能系统模块的连接,支持突发模式数据传输,这是较老的系统总线格式,后来由AHB总线替代;
(3)APB-Advanced PeriPheral Bus,用于较低性能外设的简单连接,一般是接在AHB或ASB系统总线上的第二级总线。
典型的AMBA总线系统如下图:
S3C2410A将系统的存储空间分成8个bank,每个bank的大小是128M字节,共1G字节。Bank0到bank5的开始地址是固定的,用于ROM或SRAM。bank6和bank7可用于ROM、SRAM或SDRAM。所有内存块的访问周期都可编程,外部Wait也能扩展访问周期。下图给出了S3C2410A的内存组织: