此次测试分别在x86平台和Tiny6410平台,Tiny6410平台下的Makefile如下:
ARCH=arm
COMPILE=arm-linux-
ifneq ($(KERNELRELEASE),)
obj-m:=mycdev.o
else
# 已经构建好(执行过:make zImage)的Tiny6410内核树目录
KDIR ?= /mnt/HappyStudy/Tiny6410/linux-2.6.38
PWD := $(shell pwd)
endif
all:
make -C$(KDIR) M=$(PWD) modules ARCH=$(ARCH) CROSS_COMPILE=$(COMPILE)
clean:
rm -f *.ko*.o *.mod.o *.od.c *.symvers
x86平台下的Makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m:=mycdev.o
else
KDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
endif
all:
make -C$(KDIR) M=$(PWD) modules
CROSS_COMPILE=$(COMPILE)
clean:
rm -f *.ko*.o *.mod.o *.od.c *.symvers
在PC机上make,通过NFS共享或ftp下载到Tiny6410开发板上执行insmodmycdev.ko(超级终端输入)。
注:为了能使用交叉编译,必须在PC机上配置好Tiny6410对应操作系统的内核树。内核树的配置过程如下:
—— 进入源代码目录下
—— cp config_mini6410_s70 .config, makemenuconfig
—— make zImage
—— make modules
我们PC上使用的CentOS环境已经将源码树配置好了,Linux源码在/usr/src目录下,已编译的模块在/lib/modules目录下,这就是在编写PC上驱动程序不用配置而编写嵌入式驱动需要配置内核树的原因。