编程乐园 Linux下LED驱动测试源码

//■

//【 版 权 】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指示灯就会熄灭。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwfwg.html