下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于XIP技术的ARM Linux系统的研究与移植 基于XIP技术的ARM Linux系统的研究与移植 类别:嵌入式系统 摘要:为了满足嵌入式系统快速启动、低能高效和节省成本的要求,本文将就地执行(eXecute In Place)技术引进Linux 2.6.12内核。通过分析ARM Linux的启动过程,获得不同内核映像的相互关系和启动过程中的KFT函数调用图,完成基于XIP的Linu
2、x 2.6.12内核在XSBase255上的移植,制作合适的根文件系统类型,最后完成系统启动时间及内存使用测试。 1 研究背景 ARM Linux 嵌入式系统在不同应用领域应用的日趋广泛,它们存储容量相对较小、系统的电能消耗及启动速度要求严格。为了满足它们对启动速度和低能耗的要求,本文采用内核XIP 方式运行ARM Linux 系统,避免把内核从Nor Flash 拷贝到主存SDRAM 空间,让内核运行在低功耗的NOR flash 上,节省系统启动时间,降低系统对SDRAM 的需要,减少电能消耗,使产品能够持续使用更长时间。 2 开发工具及相关技术介绍 2.1 硬件平台 本文选择深圳亿道公司的
3、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 XIP1和Application XIP2两种。Kernel XIP 适用于
4、操作系统启动过程,而Application XIP 主要用于系统启动后应用程序的执行。 Kernel XIP 原理如下,内核映像在Flash 设备上执行以后,只把映像中要读写的.data和.bss 拷贝到SDRAM 主存中,同时设置好系统的MMU,内核运行过程中,代码段.text 指向Flash 空间,.data 和.bss 指向SDRAM 主存空间。相对于全映射的执行方式,系统节省了解压缩和拷贝代码段的时间,节省了代码段占用的RAM 主存空间。 Application XIP 原理与Kernel XIP 类似,管理NOR Flash 空间的文件系统必须具有线性的一致的地址空间,可执行的应用程
5、序的代码段在NOR Flash 中线性连续,且地址能够从文件系统知晓。操作系统执行应用程序时,系统的程序加载器(loader)在建立虚拟进程空间后,只需要把应用程序的数据段和未初始化段等要读写的段装入SDRAM 主存空间,并建立好映射,而对于可执行文件的只读的代码段空间则无需装入,直接映射到NOR Flash 设备上应用程序文件的代码段,程序执行时直接从NOR Flash 设备上获取代码执行。 3 ARM Linux 启动过程分析 开发板上电启动后,首先执行Bootloader 程序,Bootloader 进行初步的环境初始化并准备好内核参数。对于本文采用的内核XIP 执行方式,Bootloa
6、der 不需要从Flash 设备中解压拷贝内核映像到SDRAM主存中,运行内核映像后,把需要读写操作的数据段拷贝到SDRAM主存的适当位置,并进行片级初始化、板级初始化等内核运行的硬件环境初始化工作,最后是根据内核参数执行内核各个子系统的初始化。 3.1 执行映像生成过程及关系 生成内核映像的一般过程是,使用 make menuconfig 配置内核,再使用make zImage 或make bzImage 生成压缩的内核映像zImage 或bzImage,这样生成的是压缩的内核映像。本文通过配置CONFIG_XIP_KERNEL,使系统生成xipImage,其生成图如图2 所示: 3.2 获
7、得内核启动过程函数关系调用图 这里使用 KFT 工具来获得。KFT 全称Kernel Function Trace3,主要功能是跟踪函数调用事件。KFT 收集调用数据后,把数据保存在/proc/kft_data,在XScale 平台上配置KFT 时,KFT 需要使用cmpxchg 函数,而原始内核不支持,所以需要修改源代码,添加_cmpxchg_u3和_cmpxchg 函数的声明和定义,以及宏cmpxchg 和arch_align_stack(x)。准备工作完成后,下载到开发板上运行并获取原始跟踪数据。然后,调用aDDR2sym 工具对原始跟踪数据进行格式化,可以获取函数调用顺序图,再使用kd
8、 工具将获得的内容格式化为树状关系图,最终获得内核启动过程函数关系调用图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 内
9、核移植 本文采用的标准 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 节在主存上,因而根据配置
10、过程中设置的CONFIG_XIP_PHYS_ADDR 值,设置TEXTADDR 为0xbf000000,而DATAADDR 则设置为0xC0008000,在内核的CPU 片级初始化过程中的页表建立过程中,TEXTADDR 指向NORFlash,而DATAADDR 指向主存SDRAM 中,把.init 段链接到.data 段之前,拷贝到SDRAM中,执行完毕后,回收这部分主存,而内核的.text 段以Kernel XIP 方式运行45。 4.2 移植源代码 下面阐述在 XSBase255 开发板上以XIP 运行内核的移植过程6。 4.2.1 添加机器平台支持、目录框架及内核配置的支持 4.2.2
11、 源代码文件移植,为实现XIP,在arch/arm/mach-pxa/Makefile.boot 中定义内核映像text节的物理地址,即ZRELADDR 的地址值 zreladdr-y := 0xa0008000 4.2.3 闪存分区的移植 本文采用的是 NOR Flash,根据开发板上闪存的起始地址和大小划分为Bootloader,Kernel , Rootfs 等四个不同部分。其初始地址和大小分别分Persistant storage 0x01000000-0x02000000, Initial ramdisk image 0x00300000-0x01000000,Kernel Imag
12、e0x00020000-0x00300000 ,Bootloader 0x00000000-0x00020000 4.3 配置内核 根据开发板移植好特定代码后,本节对内核进行配置,主要通过make menuconfig 命令启动的图形交互界面进行。 4.3.1 指定内核CPU 体系和交叉编译器及选择系统类型 4.3.2 启动XIP 支持 在菜单 Boot options 中,选中Kernel Execute-In-Place from rom,并设置好XIP 内核的物理位置0x00380000。 4.3.3 设置启动参数 同样在 Boot options 中,设置启动参数,如图2 所示。 4.
13、3.4 选择串口驱动和控制台驱动 4.3.5 启动MTD 和NOR Flash 分区至此内核配置完毕,使用 make xipImage,获得XIP 内核映像。 5 文件系统的制作 为了支持 XIP,需要选择Linear CRAMFS 作为根文件系统。系统使用过程中的其他需要,可以采用其他类型的文件系统,如系统的临时文件可以采用RAMFS/TMPFS,系统中可修改的配置数据可以采用JFFS2 文件系统挂载。最终定制的文件系统类型如表1 所示: 本文采用嵌入式系统常用的 Busybox 方法制作根文件系统映像7。先编译生成系统应用程序,再建立完整的顶层目录和必要的其他文件。然后使用的Linux2.
14、6 自带的mkfs.cramfs工具制作rootfs_cramfs.img 映像。至此根文件系统制作完毕。 6 系统与性能测试 6.1 系统启动 完成整个系统的制作并逐步调整后,使用 Jflash 烧写Bootloader,然后利用Bootloader的tftp 工具,从宿主机下载内核映像和根文件系统映像并烧写到闪存上,最后启动开发板,引导系统。从串口输出系统中的启动信息可以看出,系统依次进行CPU 片级初始化、板级初始化和一些子系统初始化、并加载根文件系统,进入Busybox 的Shell 命令行,说明系统启动成功。 6.2 系统启动时间测试 本文采用开发板上 OSCR 寄存器测量内核映像解
15、压所节省的时间,使用内核全局变量jiffies 测量启动过程各个部分的时间,测量所得时间数据如表2 所示: 从表中可以看出, Bootloader 启动时间与内核映像无关,当Bootloader 引导非压缩的Image 时,把内核映像拷贝到主存RAM 中需要耗费拷贝的时间。对于zImage,解压缩过程需要耗费545ms,而xipImage 则不需要。在xipImage 执行过程中,需要额外拷贝内核映像中可读写的数据段部分,因而内核启动时间要比zImage 要略长一下,但综合整体时间,使用Kernel XIP 执行方式的系统能有效的缩短系统启动时间。 6.3 系统内存使用测试 本文利用 RAMUST 和free 工具,测量系统使用的主存情况如表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年66名中央所属单位招聘备考题库带答案详解
- 2026年崇义这家国企公开招聘16人备考题库及参考答案详解1套
- 2026年慈溪市桥头初级中学公开招聘派遣制工作人员备考题库及答案详解1套
- 2026年厦门市海沧区东孚中学公开招聘非在编教师、产假顶岗教师备考题库及答案详解参考
- 2026年太仆寺旗博苑幼儿园招聘备考题库完整答案详解
- 2026年佛冈县石角镇公开招聘专职消防安全监管员备考题库有答案详解
- 2026年四川农业大学合同制聘用人员招聘备考题库及参考答案详解1套
- 2026年中电国际新能源海南有限公司招聘备考题库及1套完整答案详解
- 2026年宁波市海曙区鄞江镇中心卫生院招聘编外校医备考题库附答案详解
- 2026年内江市市中区中医医院招聘员额人员备考题库参考答案详解
- 电力部门春节安全生产培训
- 公司财务部门工作职责
- 原辅材料领料申请单
- 人教版九年级数学上册22 3 3拱桥问题和运动中的抛物线 一课一练 (含答案)
- 2023年个税工资表
- 网球运动基本知识及规则课件
- 2023新青年新机遇新职业发展趋势白皮书-人民数据研究院
- 管理学原理教材-大学适用
- 变电站一次侧设备温度在线监测系统设计
- GB/T 6579-2007实验室玻璃仪器热冲击和热冲击强度试验方法
- GB/T 5760-2000氢氧型阴离子交换树脂交换容量测定方法
评论
0/150
提交评论