Linux驱动:LED驱动测试
来源:互联网 发布:中石化邮箱域名是什么 编辑:程序博客网 时间:2024/05/16 17:15
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
用户程序:
测试说明:
环境:
主机:Fedora12
目标板:MINI6410
目标板LINUX内核版本:2.6.38
实现功能:
驱动目标板4个LED.
说明:
LED与6410引脚对应连接:
LED1---GPK4
LED2---GPK5
LED3---GPK6
LED4---GPK7
驱动源代码:
led_driver.c:
- #include <linux/miscdevice.h>
- #include <linux/delay.h>
- #include <asm/irq.h>
- //#include <mach/regs-gpio.h>
- #include <mach/hardware.h>
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/mm.h>
- #include <linux/fs.h>
- #include <linux/types.h>
- #include <linux/delay.h>
- #include <linux/moduleparam.h>
- #include <linux/slab.h>
- #include <linux/errno.h>
- #include <linux/ioctl.h>
- #include <linux/cdev.h>
- #include <linux/string.h>
- #include <linux/list.h>
- #include <linux/pci.h>
- #include <asm/uaccess.h>
- #include <asm/atomic.h>
- #include <asm/unistd.h>
- #include <linux/major.h>
- #include <mach/map.h>
- #include <mach/regs-clock.h>
- #include <mach/regs-gpio.h>
- #include <plat/gpio-cfg.h>
- #include <mach/gpio-bank-e.h>
- #include <mach/gpio-bank-k.h>
- #include <mach/gpio-bank-h.h>
- #include <mach/gpio-bank-n.h>
- #include <mach/gpio-bank-l.h>
- #include <mach/gpio-bank-p.h>
- #include <linux/device.h>
- #define DEVICE_NAME "led_driver"
- #define T_MAJORS 700
- static struct cdev fun_cdev;
- static dev_t dev;
- static struct class *led_class;
- //功能:初始化IO
- static void init_led(void)
- {
- unsigned temp;
- //GPK4-7设置为输出
- temp = readl(S3C64XX_GPKCON);
- temp &= ~((0xf << 4) | (0xf << 5) | (0xf << 6) | (0xf<< 7));
- temp |= (1 << 16) | (1 << 20) | (1 << 24) | (1 << 28);
- writel(temp, S3C64XX_GPKCON);
- }
- //功能:ioctl操作函数
- //返回值:成功返回0
- static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
- {
- unsigned int temp = 0;
- printk (DEVICE_NAME"\tjdh:led_driver cmd=%d arg=%d\n",cmd,arg);
- temp = readl(S3C64XX_GPKDAT);
- if (cmd == 0)
- {
- temp &= ~(1 << (arg + 3));
- }
- else
- {
- temp |= 1 << (arg + 3);
- }
- writel(temp,S3C64XX_GPKDAT);
- return 0;
- }
- static struct file_operations io_dev_fops = {
- .owner = THIS_MODULE,
- .unlocked_ioctl = led_driver_ioctl,
- };
- static int __init dev_init(void)
- {
- int ret;
- unsigned temp;
- init_led();
- dev = MKDEV(T_MAJORS,0);
- cdev_init(&fun_cdev,&io_dev_fops);
- ret = register_chrdev_region(dev,1,DEVICE_NAME);
- if (ret < 0) return 0;
- ret = cdev_add(&fun_cdev,dev,1);
- if (ret < 0) return 0;
- printk (DEVICE_NAME"\tjdh:led_driver initialized!!\n");
- led_class = class_create(THIS_MODULE, "led_class1");
- if (IS_ERR(led_class))
- {
- printk(KERN_INFO "create class error\n");
- return -1;
- }
- device_create(led_class, NULL, dev, NULL, "led_driver");
- return ret;
- }
- static void __exit dev_exit(void)
- {
- unregister_chrdev_region(dev,1);
- device_destroy(led_class, dev);
- class_destroy(led_class);
- }
- module_init(dev_init);
- module_exit(dev_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("JDH");
用户程序:
test_led.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #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"
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int fd;
- int led_num = 0;
- int led_value = 0;
- char temp[10];
- fd = open("/dev/led_driver",0);
- if (fd < 0)
- {
- perror("open led_driver error");
- exit(1);
- }
- strcpy(temp,argv[1]);
- led_num = atoi(temp);
- strcpy(temp,argv[2]);
- led_value = atoi(temp);
- printf("%d %d\n",led_num,led_value);
- ioctl(fd,led_num,led_value);
- close(fd);
- return 0;
- }
测试说明:
将编译所得的可执行文件test_led上传到开发板
运行:
./test_led 0 1 打开LED1
./test_led 1 1 熄灭LED1
- Linux驱动:LED驱动测试
- Linux驱动:LED驱动测试
- linux设备驱动之LED驱动测试
- linux驱动--LED驱动
- led驱动测试成功
- LED驱动及其测试
- led驱动测试程序
- Linux驱动练手-驱动LED
- linux驱动之--led驱动
- linux设备驱动--LED驱动
- linux设备驱动--LED驱动
- linux驱动:[1]LED驱动/dev/led
- LINUX LED驱动
- OK6410 linux LED驱动
- Linux下LED驱动
- Linux led 驱动
- Linux下LED驱动
- OK6410 linux LED驱动
- 数字在排序数组中出现的次数
- Andriod从零单排07_表格布局
- DemoApplication类
- 基本的SQLSERVE语句语法
- 【PAT】1071. Speech Patterns (25)
- Linux驱动:LED驱动测试
- jvm运行时数据区域解析
- UVa 10014 Simple calculations
- Coded UI Test--Method of search control
- 树形DP入门————hdu1520
- 外观模式
- Oracle物理结构——Redo log
- 工作建议
- <Pointers on C> Chapter 4