微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AT91RM9200的ARM Linux的移植方法

基于AT91RM9200的ARM Linux的移植方法

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

工具程序, 而这些工具程序仅需几百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制作好了。

4. 内核的下载和执行

要想使目标板的Linux系统脱离交叉开发环境,直接在目标机上本地启动运行,必须通过U-boot将U-boot映像,内核映像和RAMDISK 映像烧写到FLASH中,因为使用U-boot引导程序需要使用U-boot格式的内核映像和RAMDISK映像,可以通过以下命令来实现:
($U-BOOT-PATH)/tools /mkimage -A arm -O linux -T kernel -C gzip –a 0x20008000 -e 0x20008000 –n “linux-2.4.19”-d linux.bin.gz uImage
($U-BOOT-PATH)/tools/mkimage-A arm -O linux -T ramdisk -C gzip –a 0x21100000 -e 0x21100000 –n “RAMDISK”-d ramdisk.bin ramdisk

通过U-boot将uImage和ramdisk烧写到flash相应的分区中去,烧写到flash相应分区的地址如图7所示:烧写完毕后设置u- boot的环境变量,让系统自动启动,系统复位后,Linux系统就可以完全自动从本地flash启动了,启动后,进行地址映射,u-boot会把u- boot压缩映像,kernel压缩映像,ramdisk压缩映像全部拷贝到SDRAM的相应地址,SDRAM的映射地址如图8所示,这时Linux系统完全在SDRAM中运行了,Linux系统真正启动起来了。

5. 总结

本文根据一个特定的目标平台,结合AT91RM9200的开发经验,详细介绍了将Linux移植到ARM构建的嵌入式系统上的主要技术和整个流程,实现了Linux 向目标系统AT91RM9200的移植,移植后的操作系统在目标板上运行稳定,并且可以根据实际需要编写相应的控制程序,将其应用于实际工业控制中。掌握这些技术,对于开发嵌入式系统十分重要,对开发其他类型的嵌入式系统同样具有参考意义。

本论文作者创新点:从软件与硬件的相互关系, 硬件对软件的制约、硬件对软件的支持这个角度对裁减和移植进行了分析,同时在Bootloader(启动代码)的移植,Kernel(内核)的裁减和移植过程中,把代码分成了两部分,一部分是和硬件相关的部分,一部分是和硬件无关的部分,这样做不仅思路清晰,而且可以大大减少工作量。

参考文献:
[1] 许先斌, 熊慧君, 李渊, 杨芬. 基于ARM9 的嵌入式Linux开发流程的研究[J]微计算机信息. 2006,11:87-90
[2] 刘振纲,刘成安,卢剑翔. 移植标准Linux 到S3C2410[J] 微计算机信息.2006,32:152-154
[3] 罗致,王仲东. ARM Linux在AT91RM9200平台上的移植.软件技术,2006年第25卷第1期
[4] 李明,ARM Linux的移植过程及分析[J ].电子设计应用, 2003,7
[5] 刘峥嵘等编著,嵌入式Linux应用开发详解[M].北京:机械工业出版社,2004. 7

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

网站地图

Top