/************************* Makefile文件开始 **************************/
obj-m := s3c2440_ds18b20.o
KERNELDIR ?= ../../kernel/linux-2.6.29
PWD := $(shell pwd)
CC := arm-linux-gcc
CLEAN := rm -rf
all : s3c2440_ds18b20.c test_ds18b20
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
test_ds18b20 : test_ds18b20.c
$(CC) test_ds18b20.c -o test_ds18b20
clobber :
$(CLEAN) test_ds18b20 s3c2440_ds18b20.ko
clean :
$(CLEAN) *.mod.* *.o *~ modules.order Module.symvers
/************************* Makefile文件结束 **************************/
这个驱动是基于Linux的2.6.29内核树编译的,内核树的路径是当前目录的../../kernel/linux-2.6.29,若以来其他的Linux的内核树,编译时可能会出现找不到某些文件的情况,如hardware.h等,只需要在内核树中作一些软链接就可以解决,还有声明一点的就是:Makefile中的命令操作前的并非空格,而是TAB跳格。
make编译,编译完毕后产生许多文件,我们只关心test_ds18b20和s3c2440_ds18b20.ko这两个。
把以上两个文件下载到开发板中,创建一个设备节点:
mknod /dev/DS18B20 c 232 0
把s3c2440_ds18b20这个模块加载到内核:
insmod s3c2440_ds18b20.ko
加载成功后我们可以通过模块列表查看:
之后把test_ds18b20测试文件改为可执行状态:
chmod 0111 test_ds18b20
执行后可以观察到以下的结果:
若有问题,可以同过留言的方式交流。