新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于AT91RM9200的ARM Linux的移植方法

基于AT91RM9200的ARM Linux的移植方法

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

标准内核相对于资源受限的嵌入式系统来说是过于庞大,整个代码分布如图5所示,因此要将其到嵌入式系统上,就需要将内核根据目标平台的情况进行剪裁、配置,该目标板的主要硬件资源如图6所示。和体系结构相关的代码都放在arch/arm/以及include/asm-arm/目录下,将linux平台上,主要修改这两个目录下的代码。要想使linux内核应用于自己的平台上,必须对内核的源代码做一定的修改,主要修改部分如下:(1) 修改根目录下的Makefile文件,确认ARCH和CROSS_COMPILE的定义:ARCH :=arm; CROSS_COMPILE :=arm-linux- (2)修改arch目录下的Makefile文件,根据自己的电路设置TEXTADDR变量,TEXTADDR决定内核起始运行地址,即 image.ram应下载的地址。(3)修改arch目录下的config.in 文件,添加CONFIG_ARCH_自选项,config文件决定了menuconfig菜单的内容,把使用的平台加在需要的地方,这样在配置linux内核时就能够选择是否支你的平台了。

(4)修改arch/arm/boot目录下的Makefile文件,根据自己的电路设置ZTEXTADDR和ZRELADDR, ZTEXTADDR和ZRELADDR分别是自解压代码的起始地址和内核解压后代码输出起始地址。(5)修改arch/arm/boot /compressed目录下的Makefile文件,加入head-at91rm9200.S (6)修改arch/arm/kernel目录下的Makefile文件,增加的支持,同时在 debug-armv.S中加入关闭全部外围设备,保证系统正常运行的代码,在entry-armv.S中加入关于CPU中断处理部分的代码。(7)修改 arch/arm目录下的mm-armv.c文件,将init_maps->bufferable=0改为init_maps-> bufferable=1;

当然,一些大的芯片开发商在发行芯片的同时,针对自己芯片的体系结构对linux内核作了一些补丁。实验中使用的是针对AT91RM9200体系结构的补丁patch-2.4.19-rmk7给标准内核源代码打上补丁后,该内核就可应用于AT91RM9200了,这样可以大大减少开发的工作量。

之后要做的工作就是编译内核,要想编译适合自己工程中需要的内核,首先要对内核进行配置,常用的配置命令有:make config;make oldconfig;make menuconfig;make xconfig;make defconfig;内核包允许用户对其各类功能逐项配置,在配置时, 大部分选项可以使用其缺省值, 只有小部分需要根据用户不同需要选择。选择的原则是将与内核其它部分关系较远部分且不经常使用的部分功能代码编译成为可加载模块, 有利于减小内核的长度, 减小内核消耗的内存,不需要的功能就不要选, 与内核紧密且经常使用的部分功能代码直接编译到内核中。主要是进行以下几项配置: (1)选择处理器类型;(2)选择板级支持;(3)选择对RAMDISK支持、对设备驱动的支持以及对文件系统的支持。在配置工作完成后, 就可以进行内核编译。

编译内核有压缩方式和非压缩两种方式。非压缩方式使用make vmlinux来编译内核,或者直接运行make命令。压缩方式用make bzImage来编译内核。编译成功后会在arch/arm/boot目录中生成内核的镜像,此镜像下载到flash中就可以通过bootloader引导。具体的编译步骤如下:(1) 进入打上补丁修改好的内核源代码目录下,执行make mrproper;make clean这两条指令,将源代码清理干净(防止以前编译产生的“垃圾”干扰)。(2)执行make at91rm9200dk_config,使源代码按照AT91RM9200体系结构来配置。 (3)执行make o1dconfig(保存原编译配置)(4)执行make menuconfig进入内核编译前配置界面,进行配置。(5)执行make dep声称编译要用的依赖文件。(6)执行make zImage生成内核镜像。

3.3 文件系统的移植

linux采用文件系统组织系统中的文件和设备,为设备和用户程序提供统一接口。linux要启动起来还需要有根文件系统。根文件系统的作用是存放各种工具(如Linux命令)、应用程序、必需的链接库等等。通常用busybox来制作根文件系统,在busybox中包含一百多种Linux上标准的工具程序, 而这些工具程序仅需几百k空间。busybox使用非常方便, 只要建立一个符号连接即可, 用户可以通过配置Config.h 和Makefile文件来定制busybox。将busybox复制到bin目录中,分别使用ln-s 建立每一个命令的符号连接。但应该注意的是busybox需要glibc支持(如果使用静态连接则不需要glibc 库文件),因此还需要将运行busybox所需的库文件copy到lib目录中, 并建立符号连接。到此为止, ARM Linux 的根文件系统就已经建立起来了。

ARM Linux采用RAMDISK的方式来装载根文件系统,所以在运行内核之前,需要先制作RAMDISK,将必须的文件和设备加人到RAMDISK中。内核启动后,会从指定地址去读取根文件系统,这里我们使用RAMDISK在内存中虚拟一个磁盘,具体如下:

(1)首先创建一个2048k的虚拟磁盘,文件名为initrd.img:# dd if= dev/zero of=initrd.img bs= lk count= 2048 (2)将该虚拟磁盘文件格式化成Ext2格式:# mkfs ext2 -c initrd.img这就生成了一个支持Ext2文件系统的ramdisk (3)mount这个文件系统到/tmp下,# mount -o loop -t ext2 initrd.img /tmp (4)向/tmp中添加linux启动必须的文件和设备。 # cd /tmp; # mkdir bin dev etc lib mnt proc sbin sys usr 以上这几个程序和设备是启动Linux必须的,这样得到的ramdisk大约400k (5)创建设备节点,添加相应的程序,将已经订制好的一个文件系统全部复制过来。# cp –a myfs/* /tmp (6)压缩映像,把loop设备卸载下来,然后用gzip命令把映像压缩一下。# umount /tmp ; #gzip –best –c initrd.img > initrd.img.gz现在我们就得到了一个压缩的RAMDISK映像initrd.img.gz制作好了。

32.jpg

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭