`
izuoyan
  • 浏览: 9220331 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用ELDK4.1构建交叉编译环境及AT91RM9200EK的引导攻略

阅读更多

前言

今年1月份到2月份在自己博客上发表了几篇关于AT91RM9200引导程序的文章,分别是

建立交叉编译工具链

TFTPNFS服务的设置

U-Boot1.1.4AT91RM9200上的移植
时间过的很快,工作也很忙,一晃就过了半年多。再回头看,已经发现很多都落伍了。新版本出了一波又一波。linux已经到了2.6.20。federo也已经到了FC7。如果不对本人以前的文章更新的话,势必会误导初学者。所以针对目前比较新的环境,重新写下整个过程。不过,由于实在挺忙的,所以比第一次写的要简洁许多,大家如果有不明白的地方,可以参考以前的文章。大多数内容都大同小异,只不过一些细节需要注意。由于比较匆忙,没有仔细核对。如果您在文中发现有不当之处敬请批评指正。

这次使用的环境及软件源码版本如下:

软件环境

宿主机:FC6 ,虚拟机vmware 6.0

Linux-2.6.19.2 +at91patch

U-Boot 1.2 , busybox1.2.2.1(或者busybox-1.6.1)

硬件环境

母板:AT91RM9200EK

CPU:AT91RM9200 ,180MHz(200MIPS)

存储器:32M SDRAM(MT48LC8M16A2)

64Mbits Flash(SST39VF6401B)

USB接口:USB-Host USB-Device

网络接口: 10/100M DM9161E

DBGU串行调试接口

JTAG接口

使用ELDK4.1 构建交叉编译环境

1. 下载ELDK4.1的iso文件。在www.denx.de网站上可以找到。其有两个版本,一个是使用uclibc库,另一个使用libc库。建议使用uclibc,因为用uclibc库编译出来的二进制可执行文件要小许多。
#mkdir /mnt/iso

#mount –o loop ./arm-2007-01-22-uclibc.iso /mnt/iso

2. 安装ELDK,普通用户即可执行,无需根用户,只要保证普通用户有执行权限和拥有权限。

#mkdir /ELDK

#./install –d /ELDK

等待安装结束。

3. 设置环境变量
#PATH=$PATH:/ELDK/usr/bin (注意:$PATH与冒号之间无空格)

本人使用的板子是以EK板为母板设计的。他和DK板有一点不同。无论是Linux内核还是U-Boot,都对DK板做了很好的支持,对EK板没有相应的配置及修改文件。所以,本人针对EK板做修改。至于用DK板的朋友,就不用那么麻烦了。

Linux-2.6.19.2的移植

1. 首先下载2.6.19.2的内核源代码,同时要下载针对AT91RM9200的patch包。然后执行

# tar zxvf linux-2.6.19.tar.gz

#cp 2.6.19-at91.patch.gz linux-2.6.19

# cd linux-2.6.19

# zcat ./2.6.19-at91.patch.gz | patch -p1打补丁

2. 修改Makefile:

ARCH ?=arm

CROSS_COMPILE ?=/ELDK/usr/bin/arm-linux-修改Makefile,使交叉编译

3. 修改好之后进行编译。

# make mrproper

# make distclean

# make at91rm9200ek_defconfig

# make menuconfig

说明:这里大家会出现一个出现ics1523.c错误,原因是linux2.6.19.2里的EK默认配置将一个视频驱动编进去了,但是该驱动已经很老了。所以会出现错误。将device drivers->graphic support ->CONFIG_FB_S1D13XXX 去除,即能消除错误。

4. 修改其中Boot Options->Default Kernel Command String:

mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw initrd=/linuxrc

最后#make 则在arch/arm/boot/下生成zImage内核映象文件。

U-Boot1.2AT91RM9200EK板上的移植

1. 在Makefile中添加at91rm9200ek_config 编译项

2. 建立目录 board/at91rm9200ek

3. 将原目录at91rm9200dk里的文件拷到at91rm9200ek目录下

4. 参照前一篇文章“U-Boot1.1.4AT91RM9200上的移植”,对文件进行修改

5. 针对at91rm9200ek,改at91rm9200ek.c里

gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200EK;
不过,光这样还不行,光这样,EK板的机器类型码还不能传输到内核参数里。因为go只是执行普通的应用程序,不考虑到传递参数给内核。需要修改U-boot的common/cmd_boot.c的do_go()函数:
/*#if defined(CONFIG_I386)*/ <==注释掉
DECLARE_GLOBAL_DATA_PTR; (在使用gd之前)
/*#endif*/ <==注释掉
....
#if !defined(CONFIG_NIOS)
/*******************add here*******************************/
if(argc==2)
rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
else
/*********************add end *****************************/
rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);

经过编译后一切OK,这样就大功告成了。完美的AT91RM9200EK启动程序就这样产生了,享受ARM带给你的乐趣吧。

使用Busybox制作Ramdisk根文件系统

这部分说难也不难,但是网上资料特别是中文资料奇少。因为很多人都是用现成的根文件系统,而不是自己做的。如果要自己做,会发现有很多问题没有考虑到。我也的确走了一些弯路。

Linux的根文件系统至少包含以下几个内容:

1. 基本的文件系统结构。包含一些必需的目录如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp等

2. 基本程序运行所需的库函数,如glibc等

3. 必要的设备文件:如hd*,tty*等

4. 基本的配置文件:如rcS,inittab等

5. 基本的应用程序,如sh,ls,cp等

我们使用busybox来定制嵌入式的应用程序,从而可以运行ls,cp,mount 等shell命令,并且可以应用ftp,NFS等服务。之前选用busybox1.0.0,发现NFS不能使用,换成1.2.2.1之后,NFS可用。你可以从busybox官方网站下载busybox源代码包,解压缩,然后进行配置。

#tar xvfz busybox-1.2.2.1.tar.gz

#cd busybox-1.2.2.1

#make menuconfig

配置选项特别要注意几点:
1) Busybox Setting->General Configuration->show verbose applet usage messages
2) Build Options
[*] Build Busybox as a static binary (no shared libs)――这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.
3) Install Options
[*] Don’t use /usr――注意必须选上。否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令
4) Linux System Utilities 选中mount ,支持NFS
5) Shells -> choose your default shell(ash)――注意:在这里我也犯了一个错误:就是defaultshell为none。结果启动后找不到shell解释程序。

6) Init要选中,否则没有linuxre以及初始化函数。

配置完成后,退出保存。

编译安装busybox

#make

#make install

编译好之后,在busybox目录下生成子目录_install,里面的内容:

drwxr-xr-x 2 root root 4096 12月 24 15:28 bin

lrwxrwxrwx 1 root root 11 12月 24 15:28 linuxrc -> bin/busybox

drwxr-xr-x 2 root root 4096 12月 24 15:28 sbin

其中可执行文件busybox在bin目录下,其它的都是指向他的符号链接。

7)修改Makefile ,使之用交叉编译工具链来编译。

一些开发调试必需的applet:nfs,ls,more,hostname,ip ,ifconfig,tftp,tee,dmesg,insmod,lsmod,mknode,find,grep,awk,vi等等

制作根文件系统

我们新建一个目录/mylinux/rootf作为我们的根文件系统目录。以后我们将向该目录陆续添加一些嵌入式Linux系统必需的文件以及目录,从而形成一个完整的嵌入式Linux根文件系统。

首先,我们将busybox下

创建必要的目录,建立必要的设备文件名,我们必须需要的设备有console ,tty,tty0,tty1,tty2,tty3,null,zero,loop0,loop1,cdrom,fd0,fd1,ram,ram0,ram1等。

需要的配置文件有/etc/init.d/rcS ,fstab等.

添加共享链接库

具体操作如下:

#cd /opt/croostool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu / arm-softfloat-linux-gnu/lib

#cp *-*.so /rootf/lib

# cp –d *.so.[*0-9] /rootfs/lib

写了制作映象文件的shell脚本,该脚本基于2.6内核:
#!/bin/sh

umount /mnt/loop

dd if=/dev/zero of=/mylinux/loop_tmp bs=1k count=3072>/dev/null

losetup /dev/loop0 /mylinux/loop_tmp

mke2fs -m 0 /dev/loop0 2>/dev/null

mount /dev/loop0 /mnt/loop -t ext2

cp -a /mylinux/rootf/* /mnt/loop/

umount /mnt/loop
生成的/mylinux/loop_tmp即为ramdisk映象文件。连同内核编译生成的zImage,拷贝到tftpboot/下,则arm板启动后自动下载这两个文件,并解压缩。最终成功在目标板上运行linux系统。

分享到:
评论

相关推荐

    ELDK4.1forAT91RM9200EK.rar_eldk4.1

    《ELDK4.1在AT91RM9200EK上的应用与构建交叉编译环境详解》 ELDK(Embedded Linux Development Kit)是专为嵌入式系统设计的Linux开发工具集,它提供了构建、调试和维护嵌入式Linux系统所需的全套工具。在本文中,...

    ELDK使用与开发手册

    首先,ELDK(Embedded Linux Development Kit)是用于嵌入式系统开发的关键工具集,包括GNU交叉编译工具,如编译器、binutils和gdb,以及预编译的目标工具和库文件。安装ELDK时,开发者可以选择不同的CPU家族支持,...

    AT91SAN9260开发流程

    - **下载地址**:从Atmel官网获取AT91Bootstrap及使用手册。 - [AT91Bootstrap](http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4093) - 文件名:`AT91Bootstrap1.5.zip` - 使用手册:`doc6277.pdf`...

    eldk + uboot

    文档提供了构建ELDK的详细步骤,包括构建过程概述、设置构建环境、使用build.sh脚本等,这对于想要深入了解ELDK内部工作原理的开发者非常有帮助。 ##### 2.11 Solaris 2.x 主机环境注意事项 针对使用Solaris 2.x...

    基于AMCCPPC的嵌入式Linux开发.doc

    本文档主要讲解了基于AMCCPPC的嵌入式Linux开发的过程,涵盖了硬件环境和软件环境的准备、交叉编译环境的建立、Hello World程序的编写和编译、amcctest程序的编译和更新内核等内容。 一、硬件环境和软件环境的准备 ...

    porting u-boot

    ### U-Boot移植知识点 ...综上所述,U-Boot移植涉及多个步骤,包括构建交叉编译环境、修改并编译U-Boot源码、烧录U-Boot镜像等。每一步都需要仔细操作,并注意细节问题,才能顺利完成U-Boot的移植。

    构建基于MPC85xx的嵌入式Linux系统.pdf

    使用ELDK建立交叉开发环境的过程包括建立宿主机环境、获取ELDK软件包、安装ELDK、配 置ELDK等步骤。在安装ELDK时,需要安装较新的Linux版本,如Fedora Core, Red Hat 9.0等。 在获取ELDK软件包时,可以从ftpmirror...

    ppc8250_8260交叉编译的建立

    本文主要介绍了如何为PowerPC 8250/8260处理器搭建一个交叉编译环境,使用的是ELDK(Embedded Linux Development Kit)。 1. ELDK下载与选择: ELDK是DENX软件工程中心提供的一套用于嵌入式Linux开发的工具链,...

    ELDK(Embedded Linux Development Kit )手册

    ELDK, Embedded Linux Development Kit 的在线手册的pdf格式。 Embedded Linux Development Kit,类似于Buildroot的一个工具,提供交叉编译系统

    构建基于MPC85xx的嵌入式Linux系统 (1).pdf

    安装Eldk的过程包括在宿主机上安装Linux操作系统(如Fedora Core),下载Eldk ISO镜像文件,然后挂载并执行安装脚本,最后配置环境变量,使得可以使用ppc-85xx-gcc进行交叉编译。 接下来是U-Boot的移植,U-Boot作为...

    LPC3131_quickstart_lpc313x_bsp_inux

    LTIB构建过程可能包括多个步骤,例如安装和配置交叉编译工具链、配置内核选项等。 6. 使用ELDK框架 与LTIB部分相似,ELDK部分将提供关于如何获取、安装ELDK框架的指导,以及如何构建Apex引导加载程序和u-boot引导...

    The DENX U-Boot and Linux Guide (DULG) for canyonlands

    ELDK支持多种主流操作系统作为构建环境,如Linux、Mac OS X和Solaris。 ##### 3.4 支持的目标架构 ELDK支持广泛的处理器架构,例如ARM、MIPS、PowerPC等。 ##### 3.5 安装过程 ###### 3.5.1 产品包装 ELDK通常以...

    基于MPC8260的嵌入式Linux移植.pdf

    这里采用的是DENX软件中心提供的ELDK(Embedded Linux Development Kit)4.1,这是一个针对PowerPC嵌入式Linux移植的开发工具包,包含了GNU交叉编译工具,如gcc、gdb、binutils等,以及目标平台所需的库文件。...

    嵌入式Linux的U-boot系统启动过程

    ELDK是嵌入式Linux开发套件,包含了交叉编译工具链,用于构建针对特定处理器的Linux系统。 3.1 下载与编译:开发者需要获取ELDK,根据目标架构编译生成所需的工具链。 3.2 建立开发系统:利用ELDK创建一个完整的...

    DENX_U-Boot_及Linux_使用手册

    - **编译步骤**:使用交叉编译工具链进行编译,生成适用于目标平台的可执行文件。 - **测试验证**:将编译好的 U-Boot 映像文件烧录到目标板上进行测试,确保一切正常工作。 #### 6. Linux 内核配置与编译 - **内核...

Global site tag (gtag.js) - Google Analytics