新闻中心

EEPW首页>嵌入式系统>设计应用> 基于XIP技术的ARM Linux系统的研究与移植

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

作者: 时间:2012-11-26 来源:网络 收藏

  3.3 Bootloader 的修改

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

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

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

  4 基于XIP 的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 节在主存上,因而根据配置过程中设置的CONFIG_XIP_PHYS_ADDR 值,设置TEXTADDR 为0xbf000000,而DATAADDR 则设置为0xC0008000,在内核的CPU 片级初始化过程中的页表建立过程中,TEXTADDR 指向NORFlash,而DATAADDR 指向主存SDRAM 中,把.init 段链接到.data 段之前,拷贝到SDRAM中,执行完毕后,回收这部分主存,而内核的.text 段以Kernel XIP 方式运行[4][5]。

  4.2 移植源代码

  下面阐述在 XSBase255 开发板上以XIP 运行内核的移植过程[6]。

  4.2.1 添加机器平台支持、目录框架及内核配置的支持

  4.2.2 源代码文件移植,为实现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 Image0x00020000-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.3.4 选择串口驱动和控制台驱动

  4.3.5 启动MTD 和NOR Flash 分区至此内核配置完毕,使用 make xipImage,获得XIP 内核映像。

  5 文件系统的制作

  为了支持 XIP,需要选择Linear CRAMFS 作为根文件系统。系统使用过程中的其他需要,可以采用其他类型的文件系统,如系统的临时文件可以采用RAMFS/TMPFS,系统中可修改的配置数据可以采用JFFS2 文件系统挂载。最终定制的文件系统类型如表1 所示:




  本文采用嵌入式系统常用的 Busybox 方法制作根文件系统映像[7]。先编译生成系统应用程序,再建立完整的顶层目录和必要的其他文件。然后使用的Linux2.6 自带的mkfs.cramfs工具制作rootfs_cramfs.img 映像。至此根文件系统制作完毕。



评论


相关推荐

技术专区

关闭