交叉编译器的安装
交叉编译器需要安装在PC的linux环境下。交叉编译工具可编译UBOOT,LINUX内核,BUSYBOX,应用程序等。
1、编译器版本
arm-linux-gcc-4.2.3
2、下载源码:
到该网站下载源码文件:http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/。
选择arm处理器,Downloadthe GNU/LINUX Release。需要注册,填写注册信息后下载链接会发送到注册邮箱中。
点击下载连接后,选择IA32 GNU/LINUX TAR版本,选择Sourcery G++ Lite 2008q1-126for ARM GNU/LINUX。
3、解压缩
将下载的压缩包SourceryG++ Lite 2008q1-126 for ARM GNU/Linux 拷贝到主机的/usr/local/arm目录下,然后在终端中进入该目录,解压缩文件,完成后会在该目录下生成arm-2008q1文件夹。
在arm-2008q1文件夹中含有交叉编译执行程序,和基础类库。
4、添加环境变量
编辑系统的/etc/bashrc 文件,在最后增加路径export PATH=/usr/local/arm/arm-linux/arm-2008q1/bin:$PATH,在终端中使用#echo $PATH命令来查看环境变量中是否有/usr/local/arm/arm-linux/arm-2008q1/bin这个路径变量。
5、测试
(1)建立软连接:
#cd /usr/local/arm/arm-linux/arm-2008q1/bin
#ln -s arm-none-linux-gnueabi-gccarm-linux-gcc
(2)查看编译器版本
#arm-linux-gcc –v
查看显示版本信息是否为:gcc version 4.2.3(Sourcery G++ Lite 2008q1-126)
Bootstrap的编译
编译环境:windows
版本:Bootstrap-v1.15
编译工具:WINARM
步骤:
1、下载安装WinARM编译工具(winarm.rar文件)并解压缩winarm.rar。
2、将解压后的winarm目录拷贝到某一目录下,如D盘。
3、向windows主机中path变量中添加D:\WinARM\bin和D:\WinARM\utils\bin目录,以半角分号(;)隔开。
4、准备Bootstrap-v1.15源文件存放在D盘。
5、编译bootstrap程序
点击开始->运行->输入cmd,进入DOS命令行窗口。
(1)编译dataflash_at91sam9260ek.bin
编译dataflash中的bootstrap,进入\Bootstrap-v1.15\board\at91sam9260ek\dataflash目录,输入make命令,编译完成后在当前目录下生成dandflash_at91sam9260ek.Bin文件。
>d:
>cd bootstrap\board\at91sam9260ek\dataflash
>make
说明:在该目录下的at91sam9260ek.h中
#define AT91C_SPI_PCS_DATAFLASHAT91C_SPI_PCS0_DATAFLASH(表示dataflash的片选接SPI0_NPCS0)
#define IMG_ADDRESS 0x8000(表示用户代码的下载地址)
在makefile文件中,CROSS_COMPILE=arm-elf-(表示选择winarm编译器)
(2)编译nandflash_at91sam9260ek.bin
编译nandflash中的bootstrap,进入\Bootstrap-v1.15\board\at91sam9260ek\nandflash目录,输入make命令,编译完成后在当前目录下生成nandflash_at91sam9260ek.Bin文件。
>d:
>cd bootstrap\board\at91sam9260ek\nandflash
>make
说明:在该目录下的at91sam9260ek.h中
#define IMG_ADDRESS 0x20000(表示用户代码的下载地址)
在makefile文件中,CROSS_COMPILE=arm-elf-(表示选择winarm编译器)
编译成功后如下图所示:
图2.6 bootstrap编译过程图
Uboot的编译
U-boot版本:u-boot-1.3.4
1、修改Makefile 文件
在/u-boot-1.3.4/Makefile文件中修改CROSS_COMPILE编译器值:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
修改为CROSS_COMPILE=arm-linux-。
2、清除原来的编译
#cd u-boot-1.3.4
#make distclean
3、配置使用nandflash
#makeat91sam9260ek_nandflash_config
4、编译
#make
编译后会在/u-boot-1.3.4/目录下生成u-boot.bin文件,下载此文件到设备上并查看运行系统是否正常。
Busybox的编译
1、Busybox版本:busybox-1.12.1
2、修改makefile文件:
#cd busybox-1.12.1
编辑/busybox-1.12.1/Makefile文件中以下两个值:
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
3、配置菜单
# makemenuconfig
进入配置菜单配置所需选项,输入“Y”即选中、“N”为不选中,主菜单如下图所示:
图2.7 busybox配置菜单图
配置完所需选项后,选择<Exit>退出本级菜单,在退出主菜单后会提示是否保存新的配置,选择<Yes>,如下图所示:
图2.8 busybox配置菜单保存图
4、编译
# make
编译成功后会在当前目录下生成的busybox可执行文件。
Linux内核的编译
内核版本:linux-2.6.36
1、修改编译器
修改/linux-2.6.36/Makefile文件中ARCH和CROSS_COMPILE值,如下所示:
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-(或者系统所安装的ARM-Linux-gcc的编译器绝对路径)
2、配置菜单
# cd linux-2.6.36
# make menuconfig
进入配置菜单配置所需选项,输入“Y”即选中、“N”为不选中,主菜单如下图所示:
图2.9 内核配置菜单图
配置完所需选项后,选择<Exit>,退出会提示是否保存新的配置,选择<Yes>,如下图所示:
图2.10 内核配置菜单保存图
在配置结束后会该目录下生成一个.config文件。
3、编译
#make clean //清除原有的编译
# make uImage //make命令默认生成image和zImage
编译完成后会在/linux-2.6.36/arch/arm/boot/下生成linux 内核压缩映像uImage文件,将此文件下载ARM设备即可。
使用uImage命令需要使用mkimage工具,需将mkimage工具拷贝到主机的/usr/sbin目录下,然后再编译内核。
注:uImage命令编译内核,原因如下:
内核镜象有两种zImage以及uImage。其中zImage下载到目标板中后,可以直接用uboot的命令go来进行直接跳转。这时候内核直接解压启动。但是无法挂载文件系统,因为go命令没有将内核需要的相关的启动参数传递给内核。传递启动参数我们必须使用命令bootm来进行跳转。Bootm命令跳转只处理uImage的镜象。
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置,入口点在内存的那个位置以及映象名是什么。
应用程序编译
1、编译一个源程序
例如:使用arm-linux-gcc编译当前目录下的hello.c文件为可执行程序,如以下所示:
#arm-linux-gcc-o hello hello.c
编译完成后会生成hello可执行文件,将此文件放到ARM设备中运行即可。
2、编译多个源程序
可将所有需要编译的应用程序分类整理放到一个项目中,然后按编译规则编写makefile文件,实现所有应用程序“自动化编译”。
最后,执行#make 命令即可编译整个项目下的源程序。