基于32位RISC处理器之SoC平台的Linux操作系统实现
[复制链接]
摘要: 本文会介绍如何在兼容ARM V4指令集的32位RISC处理器(FA526)所构建的SoC平台上(即FIE8100),运用智原科技所提供的FA526-Linux开发包通过 armboot装载Linux操作系统。使开发人员可以在基于FIE8100 SoC的仿真平台-MediaCreative!上进行二次开发和验证设计。 智原科技的FIE8100 SoC平台是利用智原科技所开发并验证过的大量硅知识产权构建而成的高性能用于低功耗,可携式视频相关应用开发的SoC平台,它也可用于基于FA526 CPU的SoC设计的验证。
基于FA526-Linux软件开发套件,开发人员可以将Linux-2.4.19软件环境在FIE8100平台上安装实现,通过完成对平台上所有IP的驱动程序安装和对FA526的内部调试。 FA526介绍
FA526是一颗有着广泛用途的32位RISC处理器。它包括一个同步CPU内核(core),独立的指令/数据缓存(cache),独立的指令/数据暂存器(scratchpads),一个写缓存(write buffer),一个内存管理单元(memory management unit)和JTAG在线仿真(ICE)接口。CPU内核是6级流水线(pipeline)的哈佛(Harvard)结构,包括:取指令(fetch),解码(decode),搬移(shift),执行(execution),数据访存(memory),写回(write)。为了提高整体性能,FA526 CPU也包含了一个分支运算缓存(Branch Target Buffer:BTB)来减少分支运算的开销(penalties)。
740)this.width=740" border=undefined> 图1 FA526功能模块图 FA526 CPU内核的指令是兼容ARM V4的结构,并使用AMBA AHB 接口于外部设备进行通讯。因此,FA526 CPU有着广泛的应用领域,特别是针对那些需要高性能和低功耗的应用。FA526 CPU 内核是完全同步的,并且其基于单相时钟(single-phase clock)的结构可以很容易地实现集成开发系统级芯片(System on Chip: SoC)。FA526 CPU内核的方块图如图1所示。
FA526 CPU内每个功能模块的说明如下:
CPU Core FA526 完全兼容ARM V4结构,包括V4指令集和一个寄存器指令集。总共30个通用寄存器和6个处理器状态寄存器。FA526提供7种处理器模式,包括: Supervisor, System, FIQ, IRQ, abort, undefined and user.
分支运算缓存(Branch Target Buffer:BTB) 分支运算缓存可通过一种分支处理预言(branch prediction)机能来提高处理器的性能。凭借此精确分支处理预言,BTB可解决控制相关(dependency)和减少分支运算开销 (branch penalty)。FA526在分支处理预言里采用2位计数器算法,并提供一个无效的全BTB输入的操作(Entries operation)。
740)this.width=740" border=undefined> 图2 基于FA526 CPU的FIE8100系统架构 740)this.width=740" border=undefined> 图3 基于FIE8100 SoC的开发板:MediaCreative! 指令缓存和数据缓存(ICache and DCache) 指令/数据缓存运用本地编程(program's locality)的方式来提高处理器性能。它在一个快速本地内存里存储最近期使用过的指令或数据。他们的大小通常为8K或16K
内存管理单元(MMU) FA526 MMU有一个标准的可配置的4路组关联快表(4-way set-associative TLB)。它可在地址传输缓存最近期使用过的页表(page),它也是和ARM架构完全兼容的。
指令/数据暂存器(IScratchpad and DScratchpad) 暂存器是一个靠近处理器内核的快速片上SRAM。一些要求性能高的代码和数据可被预抓取(pre-fetched)到暂存器并全速的执行。这主要用于嵌入式应用。暂存器可以是1 Kbytes, 2 Kbytes或4 Kbytes。
总线界面单元(Bus Interface Unit:BIU) 总线界面单元可从CPU内核里接受内存访问的请求并通过外部系统总线执行指令和数据。FA526的总线界面单元使用AMBA 2.0(AHB)的界面协议。AHB是一种流水总线协议。它使用单相时钟运算方式,使得设计人员能够在SoC集成上很容易地采用。
写回(Write Buffer: WB) 写回可以在进入下一个内存层时避免写延迟和减少写堵塞。FA526写回缓存包括一个8个字的地址缓冲器和一个4个字的数据缓冲器。
ASIE Interface ASIE可用于处理器功能的扩展。它提供两个扩展功能:协助器的连接和指令扩展(coprocessor connection and extension instruction).
在线仿真器(ICE) FA526提供两种ICE协议:Faraday ICE 调试器和ARM ICE调试器。
省电控制单元(Power Saving Control Unit) 省电节省控制单元控制着整个芯片时钟以减少操作功耗。当软件程序发现CPU已长时间的处在空闲状态,它会强制让处理器进入省电模式。处理器支持两种省电模式:Idle and Sleep。在Idle模式下,处理器内部电路的时钟除了省电控制单元都停止下来。在Sleep模式下,处理器内部电路包括PLL都停止。在省电模式下,处理器可以通过一个中断或一个ICE驱动来唤醒。这样的启动时间需要16个时钟周期,大约5个微秒从Sleep模式到唤醒。 FIE8100 SoC 平台介绍
FIE8100 SoC平台集成了众多外设,系统架构如下图2所示。一颗高性能处理器内核和功耗管理以特别应对MPEG-4和JPEG的市场需求。目前,智原的 MPEG4/JPEG Codec所支持的格式为Simple Profile Version 3.1,其包含XviD编码和一部分的DivX编码。
FIE8100 SoC平台包含了非常丰富的功能模块以支持多种应用,包括:FA526(32Bit RISC CPU), MPEG-4/JPEG 编解码引擎, USB2.0 设备控制器, USB2.0 PHY(物理层), LCD 控制器, DMA 控制器,TV Encoder(解码器),Capture(视频捕捉器)和AMBA总线架构。为了让用户能将自己的IP或功能模块顺利的运行在FA526上,智原将 AHB总线从CPU的引线中拉出,以及搭配各类接口和片外芯片,开发制作了一个基于FIE8100 SoC的仿真平台: MediaCreative!。如图3所示。 基于FA526的Linux安装
开发系统之介绍 所需主开发环境 开发Linux的主系统开发环境需要有: 硬件: * 兼容Intel x86的PC * 标准16550 UART接口 软件: * Linux操作系统 (RedHat 7.3~8.0或更高版本) * FA526-Linux 软件包 通用平台系统所需的器件: - MediaCreative! (含FIE8100/FWAB326AA芯片) x 1 - 64MB SDRAM x 1 - 32MB Flash x 1 FA526的Linux安装 介绍 本章节将介绍FA526-Linux的架构和实现安装。 FA526-Linux可以将Linux-2.4.19软件环境在Faraday FA526处理器和外设IP上安装实现。 FA526-Linux软件包 FA526-Linux软件包以“arm-linux-20050429.tgz”打包文件递交。(此程序发布于April 29, 2005) 表1 安装Linux所需的硬盘空间
740)this.width=740" border=undefined> 安装FA526-Linux软件包,流程如下: 1. 拷贝文件 arm-linux-20050429.tgz 至目录 /usr/src. # cp arm-linux-20050429.tgz /usr/src
2. 解包文件"arm-linux-20050429.tgz". # cd /usr/src # tar zxvf arm-linux-20050429.tgz
3. 安装Toolchain (GCC-2.95.3, Binutils-2.11.2, GLIBC-2.2.3) 至目录/usr/local. # cp /usr/src/arm-linux/toolchain/arm-linux-toolchain.tgz /usr/local/ # cd /usr/local # tar zxvf arm-linux-toolchain.tgz # rm -f arm-linux-toolchain.tgz 此步骤将在目录 /usr/local/arm解压GCC-2.95.3, Binutils-2.11.2 和 GLIBC-2.2.3的输出文件.
4. 添加 GCC 执行路径至shell环境。 可执行以下命令来添加路径: # export PATH=$PATH:/usr/local/arm/2.95.3/bin 在完成了以上四个安装步骤后,你就可以继续安装FA526 Linux 内核或做应用了。 FA526-Linux目录结构 假设主目录是 /usr/src/arm-linux/。当你在/usr/src/arm-linux/下解压打包文件,如:arm-linux20050429.tgz,系统会自动生成一组目录,如图4。 在表2中,列出了这些源目录的定义。用户的应用程序包含在目录/usr/src/arm-linux/user/下,而客户定制的RAM-Disk则包含在目录/usr/src/arm-linux/images/下。 表2 FA526 软件包目录 740)this.width=740" border=undefined> FA526-Linux的构建和开发 本节将描述在嵌入式系统里配置和构建FA526-Linux内核。 内核目录树 (Kernel Tree) FA526的Linux内核子目录在以下的目录里: /usr/src/arm-linux/arm-linux-2.4.19/ FA526-Linux目录的结构和标准Linux内核一样,版本是2.4.19. 以下表格列出了Linux内核子目录的内容。 (为书写简略,<TOPDIR> 代表 /usr/src/arm-linux/arm-linux-2.4.19) 表3内核子目录内容。 740)this.width=740" border=undefined>
740)this.width=740" border=undefined> 图4 FA526 软件包目录树 740)this.width=740" border=undefined> 图5 FA526-Linux xconfig介面 构建内核 本节描述了如何为FA526架构生成内核的映像 配置内核 构建内核的第一步是配置内核。配置文件在目录<TOPDIR>/.config 通常,用户可能为了一些如下的因素要求重新配置FA526-Linux: 定制处理器和板子的功能:修改UART时钟,系统时钟等。 定制硬件设备:添加或删除某些特殊设备。 定制内核功能:添加或删除一个内核的功能,如网络支持。
740)this.width=740" border=undefined> 740)this.width=740" border=undefined> 图6 FA526-Linux menuconfig介面 图7 配置RAM-Disk的大小
Linux内核配置为配置这些可选项目提供了两种常用方式: 转换目录至<TOPDIR> 1. 使用菜单显示来选择项目: # make menuconfig 2. 使用GUI显示来选择项目: # make xconfig 在图5里,显示了针对FA526和CPE开发板的FA526-Linux的xconfig 介面。 在图6里显示了针对FA526和CPE开发板的FA526-Linux的menuconfig介面 FA526系统中的主要选项有以下几种: (CPE) ARM system type 默认值选中CPE开发板来支持Faraday CPE(Common Platform Environment)。
Support FA526 processor 设置FA526系列处理器选项来支持FA526 CPU. (FIE8100) Platform environment 选择平台设定:A320,FIE8100, FIE7000 (44000000) System clock FIE8100的默认值是44MHz。开发人员必须根据实际的电路板设定来做调整。 (22118400) UART clock FIE8100的UART时钟是22.184MHz开发人员可根据实际的电路板设定来设置UART时钟频率。 Making内核 如果是第一次make Linux内核,你可以清除所有目标文件,并重新创建从属文件(dependency)。如果要修改内核的配置,则需要调用“make dep”。操作步骤如下: # make clean # make dep FA526-Linux 提供了内核脚本文件(shell-script) “mkbootp.sh”, 这可以使Make内核更容易。 # ./mkbootp.sh 此操作可创建名为bootpImage的最终内核映像文件(kernel image)和名为vmlinux 的内核ELF文件。以下操作是修改mkbootp.sh的一个例子: 1 使用定制的ram-disk: 为你的特殊规格的ramdisk修改“make bootpImage INITRD=<your ramdisk>”。可修改“Default RAM disk size”来满足ramdisk的大小(见图7). 可在“Block devices”配置界面里通过“make xconfig”来设置。 2 复制输出映像到特定目录: 在mkbootp.sh档案上修改这一行“cp <source> <target>”以符合你的需求。 Mkbootp.sh的内容是: “make bootpimage INITRD =/usr/src/arm-linux/images/ramdisk.gz” “cp arch/arm/boot/bootpImage /tftpboot/mbootpImage” 建立ARMBOOT FA526-Linux使用ARMBOOT来装载操作系统。 配置ARMBOOT FA526的ARMBOOT使用一个名为“faraday.h”配置文件来配置各种不同的硬件环境。此文件被放在 /usr/src/arm-linux/armboot-1.1.0/faraday.h。其可修改的内容和值包括(通常不需要改动): 修改系统时钟。对于MediaCreative!平台,它的默认值是44MHz. 修改UART时钟。对于MediaCreative!平台,应是22.1184MHz. 修改Flash块号。对于MediaCreative!平台,Flash的块号是1。 Marking Armboot 一旦你已经修改了MAC和IP,就可以通过以下的命令来建立ARMBOOT: # cd /usr/src/arm-linux/armboot-1.1.0 # make 系统会在目录里自动生成"armboot.bin"文件。你应该根据这个指令将armboot烧入到FIE8100的Flash器件里,并且编写特定镜像文件armboot.bin至Flash地址: 0x80400000.
FA526-Linux操作系统装载工具(OS Loader)-ARMBOOT 作为Linux业界里最著名的OS Loader,ARMBOOT可以从终端协议(如:Kermit)来装载镜像文件和启动Linux内核.它也可以提供Flash的使用方法和以太网TFTP的传输功能。
740)this.width=740" border=undefined> 图8 设置tftp 服务器 运行ARMBOOT FA526-Linux软件包提供的ARMBOOT代码可执行以下任务: Flash的编程 通过UART或以太网传输数据至PC 装载或分配Linux内核 可从闪存(Flash)里或通过ICE来运行ARMBOOT 经由ICE运行ARMBOOT 可通过以下步骤: 1. 通过JTAG ICE连接FA526目标器和PC. 2. 打开AXD调试器,然后装载armboot.bin到内存地址为0x0. 3. 设置指针到0x0,然后运行。 ARMBOOT 环境变量 ARMBOOT维持着一批用于各种功能的环境变量。可通过以下命令来显示它们: CPE> printenv 可通过命令“setenv name value”来设置环境变量,这里的“name”是环境变量名,“value”是你想设定的值。具体变量见表4。 表4 环境变量的描述 740)this.width=740" border=undefined> ARMBOOT命令之参考 在表5里,是ARMBOOT里最常用的几个命令。也可在ARMBOOT的终端下键入"help"来显示这些命令。 740)this.width=740" border=undefined> 表5 ARMBOOT 命令集
通过ARMBOOT启动FA526-Linux 在开发阶段的许多部分里,开发人员必须要做前期规划来修改或下载代码直到得到想要的结果。在这样的情况下,需要armboot来下载和运行代码。具体步骤如下: 1.在Linux 主机上设置tftp服务器,并设置 /etc/xinetd.d/tftp. 如图8所示。 2. 在此状态下使用Linux making shell (mkbootp.sh)编译代码,并生成Linux代码至目录 /tftpboot. 要运行Linux代码, 需按以下步骤执行: * 重启 FIE8100 开发板(MediaCreative!). * 选择 "90) GO ARMBOOT". * 确认Linux-Host和FIE8100的IP地址是正确的, (printenv), 如图9所示. * 输入命令:tftp 0x2000000 mbootpImage, 以下载代码,如图10所示. * 通过命令“go 0x2000000“启动Linux,将出现Linux 启动的信息,如图11所示。 Linux的使用: 在完成以上的操作后,armboot就烧入在MediaCreative!开发板上的Flash里了。要通过armboot来运行Linux操作系统对FIE8100平台进行开发验证,可执行以下操作: * 开启MediaCreative!开发板,运行“MPEG4 Burnin",会出现Linux运行选项,如图12所示: * 键入“空格”键,进入Linux操作系统,如图13所示。
740)this.width=740" border=undefined> 图9 armboot的环境设置 740)this.width=740" border=undefined> 图10 从armboot下载Linux代码 740)this.width=740" border=undefined> 图11 Linux 启动信息 740)this.width=740" border=undefined> 图12 Linux 启动选项界面 740)this.width=740" border=undefined> 图13 Linux 操作环境 结语
我们利用智原科技所提供的FIE8100的开发板上移植了Linux 2.4.19的操作系统。智原科技的ARM CPU在开发上与ARM的开发工具兼容,使移植的过程十分顺利。FIE8100的外设又很完整,不管是UART口或是乙太网口都能利用。我们还会利用这个开发板实现MPEG4编解码,并将编码后的压缩档存在SD卡上,再将SD卡上的压缩档解码播放到LCD屏。
|