微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于XIP技术的ARM Linux系统的研究与移植

基于XIP技术的ARM Linux系统的研究与移植

时间:11-26 来源:互联网 点击:

1 研究背景

ARM Linux 嵌入式系统在不同应用领域应用的日趋广泛,它们存储容量相对较小、系统的电能消耗及启动速度要求严格。为了满足它们对启动速度和低能耗的要求,本文采用内核XIP 方式运行ARM Linux 系统,避免把内核从Nor Flash 拷贝到主存SDRAM 空间,让内核运行在低功耗的NOR Flash 上,节省系统启动时间,降低系统对SDRAM 的需要,减少电能消耗,使产品能够持续使用更长时间。

2 开发工具及相关技术介绍

2.1 硬件平台

本文选择深圳亿道公司的XSBase255 开发板,其处理器采用的是Intel? XScalePXA255,400MHz,SDRAM 为Samsung 64Mbyte,Flash 为Intel? strata flash 32Mbyte。

2.2 软件工具

Linux-2.6.12 linux-2.6.13-kgdb-2.3 Cramfs-linear-xip-4-patch busybox-1.10.0 ramust-arm2.3XIP 技术介绍XIP 全称eXecute-In-Place(就地执行),是一种代码执行方式,分为Kernel XIP[1]和Application XIP[2]两种。Kernel XIP 适用于操作系统启动过程,而Application XIP 主要用于系统启动后应用程序的执行。

Kernel XIP 原理如下,内核映像在Flash 设备上执行以后,只把映像中要读写的.data和.bss 拷贝到SDRAM 主存中,同时设置好系统的MMU,内核运行过程中,代码段.text 指向Flash 空间,.data 和.bss 指向SDRAM 主存空间。相对于全映射的执行方式,系统节省了解压缩和拷贝代码段的时间,节省了代码段占用的RAM 主存空间。

Application XIP 原理与Kernel XIP 类似,管理NOR Flash 空间的文件系统必须具有线性的一致的地址空间,可执行的应用程序的代码段在NOR Flash 中线性连续,且地址能够从文件系统知晓。操作系统执行应用程序时,系统的程序加载器(loader)在建立虚拟进程空间后,只需要把应用程序的数据段和未初始化段等要读写的段装入SDRAM 主存空间,并建立好映射,而对于可执行文件的只读的代码段空间则无需装入,直接映射到NOR Flash 设备上应用程序文件的代码段,程序执行时直接从NOR Flash 设备上获取代码执行。

3 ARM Linux 启动过程分析

开发板上电启动后,首先执行Bootloader 程序,Bootloader 进行初步的环境初始化并准备好内核参数。对于本文采用的内核XIP 执行方式,Bootloader 不需要从Flash 设备中解压拷贝内核映像到SDRAM主存中,运行内核映像后,把需要读写操作的数据段拷贝到SDRAM主存的适当位置,并进行片级初始化、板级初始化等内核运行的硬件环境初始化工作,最后是根据内核参数执行内核各个子系统的初始化。

3.1 执行映像生成过程及关系

生成内核映像的一般过程是,使用 make menuconfig 配置内核,再使用make zImage 或make bzImage 生成压缩的内核映像zImage 或bzImage,这样生成的是压缩的内核映像。本文通过配置CONFIG_XIP_KERNEL,使系统生成xipImage,其生成图如图2 所示:

3.2 获得内核启动过程函数关系调用图

这里使用 KFT 工具来获得。KFT 全称Kernel Function Trace[3],主要功能是跟踪函数调用事件。KFT 收集调用数据后,把数据保存在/proc/kft_data,在XScale 平台上配置KFT 时,KFT 需要使用cmpxchg 函数,而原始内核不支持,所以需要修改源代码,添加__cmpxchg_u3和__cmpxchg 函数的声明和定义,以及宏cmpxchg 和arch_align_stack(x)。准备工作完成后,下载到开发板上运行并获取原始跟踪数据。然后,调用addr2sym 工具对原始跟踪数据进行格式化,可以获取函数调用顺序图,再使用kd 工具将获得的内容格式化为树状关系图,最终获得内核启动过程函数关系调用图kft.tree,为下面的工作提供很好的指引和帮助。

3.3 Bootloader 的修改

Bootloader 分为两个阶段,第1 阶段采用汇编语言实现。第2 阶段采用C 语言实现。除了进行普通Bootloader 所需的片级和板级初始化之外,针对内核XIP 执行方式所做的主要工作有以下2 个:

1:通过查看体系Makefile 得到XIP 方式的DATAADDR 和TEXTADDR。

2:建立初始页表时,为.data 和.bss 段建立好3MB 连续空间以存放xipImage。

4 基于XIP 的ARM Linux 内核移植

本文采用的标准 Linux 内核2.6.12 版本不支持在XSBASE255 上直接运行,需要根据开发板硬件体系结构进行相关移植和订制裁减工作。

4.1 内核链接脚本

生成内核映像的链接脚本是在 arch/arm/kernel/vmlinux.lds 中,而vmlinux.lds 是由同目录下的vmlinux.lds.S 生成,查看脚本内容,可以获知内核映像各节的虚拟地址取决于内核符号TEXTADDR和DATAADDR,以及各节的大校对于xipImage,其.init,.text 和__ext_table都是在NOR Flash 上,只有.data 节.bss 节

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top