Linux-arm交叉编译环境的建立
一、minicom的设置
1、 在虚拟机上,首先停止虚拟机,在虚拟机的菜单栏上:VM→setting→add→series port→选择串口物理接口,自动选择auto detecte。这样在物理上实现了虚拟机的串口设置。
2、 启动虚拟机,在终端上命令:﹟minicom –s 在出现的设置界面上,选择(1)series port→视你串口的具体连接设置好ttys0(com1)/ttys1(com2)→hardware 一行设置为NO→波特设置为112500。退出来。(2)选择modem and daily选项,按A把这一行所有文字删除,按B把这一行文字删除。
3、退出,保存为SF1
4、﹟minicom 进入超级终端界面,按下ctrl+A,Z进入菜单,按S,选择Zmodel,选择你要发送的文件,按下回车,如果开发板发出了清脆的声音,表示minicom设置成功了。
二、NFS的设置
1、在虚拟机上,点击左下角的红帽标志,进入菜单栏,系统设置→服务设置→服务。然后在出现的服务配置窗口中,把iptable,ipchains前的√去掉,把 nfs ,tftp选上。保存退出。
2、在控制开发板终端上﹟ifconfig 记住IP地址。
3、在另外的宿主机上的终端上 (1)#ifconfig eth0 IP地址,把宿主机的IP与开发板的IP设置在一个网段上,如:
开发板IP:192。168。2。223 那么把宿主机IP设置为:192。168。2。33
(2)#ifconfig lo 127.0.0.1
4、在宿主机终端#vi /etc/exports
添加:/home 192.168.2.33 (rw,sync,no_root_sqaush) 保存退出。
5、在宿主机上运行:#exportfs –rv
6、#service portmap restart 看是否正常关闭启动
7. #service nfs restart 看是否正常关闭启动,如不正常,在网上查找原因。
8.如果NFS服务正常运行,我们在开发板上的主文件目录/下:
#mount –t nfs –o nolock 192.168.2.33:/home /tmp
把IP为192。168。2。33的宿主机的/home目录的文件通过NFS方式挂载到开发板的 /tmp目录下。
9.然后在开发板的/tmp下看是否有宿主机的/home上的文件。如相同,表示NFS设置成功
三.建立交叉编译环境
下载交叉编译工具cross-3.3.2/2.9.5.tar.bz2到/usr/local/arm目录下,
#tar zxvf cross-3.3.2/2.9.5.tar.bz2
#vi /etc/profile
在出现pathmunge 文字段之后加入:pathmunge /usr/local/arm/3.3.2/2.9.5/bin 退出保存。这样我们就设置好了交叉编译环境了,
四.交叉编译
在要交叉编译文件的目录下,如/home/hello 编写好hello.c
(1) #vi Makefile 其内容如下:
CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux- //交叉编译工具的目录
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
# To build modules outside of the kernel tree, we run "make"
# in the kernel source tree; the Makefile these then includes this # Makefile once again.This conditional selects whether we are being included from the # kernel Makefile or not. ifeq ($(KERNELRELEASE),)
# Assume the source tree is where the running kernel was built
# You should set KERNELDIR in the environment if it's elsewhere
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build KERNELDIR ?= /usr/src/gec2410-linux-2.6.8.1 //我们已经把gec2410-~~编译在此目录
# The current directory is passed to sub-makes as argument
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
# called from kernel build system: just declare what our modules are
obj-m :=hello.o //编译文件为hello.c与hello.o同主名
#hello.o hellop.o seq.o jit.o jiq.o sleepy.o complete.o /
#led.o gpio.o #s3c2410-adc.o
#silly.o faulty.o kdatasize.o kdataalign.o
endif
# make -C /home/linux-2.6.8.1-zzm M=$pwd modules
2) #make 这样得到了一系列文件
(3)在开发板上通过NFS或者minicom把hello.o的文件传送到开发板上,
(4)在开发板上#./hello.o,就可以看到调试结果了