Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6087542
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类:

2012-05-13 12:40:27

原文地址:Linux下LED驱动测试源码 作者:gliethttp

//

//【 版       权 】Copyright (c) 2006-2008 GLIETHTTP

//

//【 文 件 版 本 】v1.x

//

//【 创 建 日 期 】2006/12/21

//

//【 文 件 描 述 】LED闪灯驱动测试led_driver.c

//

#ifndef __KERNEL__

# define __KERNEL__

#endif

#ifndef MODULE

# define MODULE

#endif

#include

#include

#include

#include

#include

#include   /* printk() */

#include     /* kmalloc() */

#include       /* everything... */

#include    /* error codes */

#include    /* size_t */

#include    /* O_ACCMODE */

#include     /* COPY_TO_USER */

#include     /* cli(), *_flags */

#include

 

#include "led_driver.h"

 

#define DEVICE_NAME "led"

#define led_MAJOR 254

#define led_MINOR 0

 

#define DBG(x...)printk(DEVICE_NAME ":" x)

//

static int led_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg)

{

switch(cmd)

{

case 1:xLED1_ON();break;

case 2:xLED1_OFF();break;

case 3:xLED2_ON();break;

case 4:xLED2_OFF();break;

default:DBG("error cmd number\n");break;

}

return 0;

}

//

static int led_open(struct inode *inode, struct file *file)

{

MOD_INC_USE_COUNT;

xLED1_ON();

DBG("device open sucess!\n");

return 0;

}

//

static int led_release(struct inode *inode, struct file *filp)

{

MOD_DEC_USE_COUNT;

xLED1_OFF();

DBG("device release\n");

return 0;

}

//

static struct file_operations led_fops={

owner: THIS_MODULE,

ioctl: led_ioctl,

open:   led_open,

release:led_release,

};

//

static int __init led_init( void)

{int result;

SET_MODULE_OWNER(&led_fops);

result = register_chrdev(led_MAJOR, "led",&led_fops);

if (result < 0) return result;

DBG(" initialized\n");

xLED_Install();

return 0;

}

//

static void __exit led_exit( void)

{

unregister_chrdev(led_MAJOR, "led");

DBG(" unloaded\n");

}

//

module_init(led_init);

module_exit(led_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("gliethttp");

MODULE_DESCRIPTION("led 驱动测试!");

编译:

[root@gliethttp]# arm-linux-gcc -c -I my_linux_head_dir led_driver.c

成功编译后,会生成一个led_driver.o文件,将led_driver.o通过rz三线串口发送到目标板,并在目标板上建立设备节点

[root@B.J.xx /root]# mknod /dev/led c 254 0

然后安装驱动

[root@B.J.xx /root]# insmod led_driver.o

可以通过lsmod查询驱动模块

[root@B.J.xx /root]#lsmod

通过rmmod卸载驱动模块

[root@B.J.xx /root]# rmmod led_driver

驱动安装完毕,当应用程序调用fd=open("/dev/led",O_RDWR)时,开发板上的LED指示灯就会点亮,当应用程序调用close(fd)时,开发板上的LED指示灯就会熄灭。

阅读(740) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~