微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于S3C2440嵌入式Linux系统下的一个DS18B20驱动

基于S3C2440嵌入式Linux系统下的一个DS18B20驱动

时间:11-20 来源:互联网 点击:

, loff_t *off)
{
DS18b20_proc();

buf[0] = data[0];
buf[1] = data[1];

return 1;
}

static struct file_operations s3c2440_18b20_fops =
{
.owner = THIS_MODULE,
.read = s3c2440_18b20_read,
};

static int __init s3c2440_18b20_init(void)
{
if (register_chrdev(DEV_MAJOR, DEV_NAME, &s3c2440_18b20_fops) < 0)
{
printk(DEV_NAME ": Register major failed.\r\n");
return -1;
}

devfs_mk_cdev(MKDEV(DEV_MAJOR, 0),S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEV_NAME);

while(DS18b20_reset());
}

static void __exit s3c2440_18b20_exit(void)
{
devfs_remove(DEV_NAME);
unregister_chrdev(DEV_MAJOR, DEV_NAME);
}
module_init(s3c2440_18b20_init);
module_exit(s3c2440_18b20_exit);

#include "stdio.h"
#include "sys/types.h"
#include "sys/ioctl.h"
#include "stdlib.h"
#include "termios.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "sys/time.h"

main()
{
int fd;
unsigned char buf[2];
float result;

if ((fd=open("/dev/DS18B20",O_RDWR | O_NDELAY | O_NOCTTY)) < 0)
{
printf("Open Device DS18B20 failed.\r\n");
exit(1);
}
else
{
printf("Open Device DS18B20 successed.\r\n");
while(1)
{
read(fd, buf, 1);
result = (float)buf[0];
result /= 16;
result += ((float)buf[1] * 16);

printf("%.1f `C\r\n", result);
sleep(1);
}
close(fd);
}
}

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

这个驱动是基于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

执行后可以观察到以下的结果:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top