交叉编译,就是在一个平台上生成另一个平台上的可执行代码。有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;这个时候就需要用到交叉编译。
以下是交叉编译的一个例子(目标机器是使用的Linux2.6.34的内核版本),Makefile文件:
TARGET = xxx_module
OBJS = xxx1.o xxx2.o
EXTRA_CFLAGS += -w -g
KDIR = /home/redhat/Desktop/amc718_bsp_source_release3/kernel/linux-2.6.34.6
PWD = $(shell pwd)
obj-m := $(TARGET).o
$(TARGET)-objs := $(OBJS)
default:
make -C $(KDIR) M=$(PWD) modules ARCH=powerpc CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.5.55-eglibc-2.11.55/
powerpc-linux-gnu/bin/powerpc-linux-gnu-
clean:
-rm -f *.o *.ko .*.cmd .*.flags *.mod.c *~ core .depend .tmp_versions
depend .depend dep:
$(CC) $(CFLAGS) -M *.c > .depend
ifeq (.depend,$(wildcard .depend))
include .depend
endif
1、该文件先指明模块源码中各文件的依赖关系,以及要生成的目标模块名。
2、-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile
3、depend 的作用:如果不使用这个功能, 则当你修改一个头文件时, 必须重新把所有的源文件都编译一次, 使用depend ,就可只编译包含此头文件的源文件,可大大节省时间。
depend .depend dep:
$(CC) $(CFLAGS) -M *.c > .depend
gcc 分析源文件然后产生一个头文件的列表和它的依赖关系。