资源简介
OK6410 linux混杂设备驱动LED程序,使用3.0.1内核编译,还有驱动源码、Makefile和测试程序

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “led.h“
#define DEVICE_NAME “LED“
static int led_open(struct inode *inodestruct file *filp)
{
unsigned int tmp;
tmp = readl(S3C64XX_GPMCON);
tmp = (tmp & ~(0xFFFFU)) | (0x1111U);
writel(tmpS3C64XX_GPMCON);
tmp = readl(S3C64XX_GPMDAT);
tmp |= (0xFU);
writel(tmpS3C64XX_GPMDAT);
printk(“configure led init\n“);
return 0;
}
static ssize_t led_read(struct file *filpchar __user *bufsize_t countloff_t *f_pos)
{
unsigned int tmp;
tmp = readl(S3C64XX_GPMDAT);
if(copy_to_user(buf&tmp1))
{
printk(“led read copy to user fail\n“);
return -EFAULT;;
}
return 0;
}
static ssize_t led_write(struct file *filpconst char __user *bufsize_t countloff_t *f_pos)
{
char wbuf[10]; //防止传递下来数据过多
unsigned int tmp;
copy_from_user(wbufbufcount);
wbuf[0] = wbuf[0]&0xFU;
tmp = readl(S3C64XX_GPMDAT);
tmp = (tmp & ~(0xFU)) | (~wbuf[0]);
writel(tmpS3C64XX_GPMDAT);
return count;
}
static int led_release(struct inode *inodestruct file *filp)
{
printk(“#########led module release########\n“);
return 0;
}
static long led_ioctl (struct file *filp unsigned int cmd unsigned long arg)
{
int err = 0;
unsigned int tmp = 0;
int count = 0;
/* 检测命令的有效性 */
if (_IOC_TYPE(cmd) != LED_IOC_MAGIC)
return -EINVAL;
if (_IOC_NR(cmd) > LED_IOC_MAXNR)
return -EINVAL;
/* 根据命令类型,检测参数空间是否可以访问 */
if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE (void *)arg _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ (void *)arg _IOC_SIZE(cmd));
if (err)
return -EFAULT;
switch(cmd)
{
case LED_LEFT:
for(count = 1;count<32;)
{
if(count<16)
{
tmp = readl(S3C64XX_GPMDAT);
tmp = (tmp & ~(0xFU)) | (~count);
writel(tmpS3C64XX_GPMDAT);
}
else
{
tmp = readl(S3C64XX_GPMDAT);
tmp = (tmp & ~(0xFU));
writel(tmpS3C64XX_GPMDAT);
}
msleep(200);
count = count * 2;
}
break;
case LED_RIGHT:
for(count = 8;count!=0;)
{
tmp = readl(S3C64XX_GPMDAT);
tmp = (tmp & ~(0xFU)) | (~count);
writel(tmpS3C64XX_GPMDAT);
msleep(200);
count = count / 2;
}
break;
case LED_COUNT:
for(count = 0;count<16;)
{
tmp = readl(S3C64XX_GPMDAT);
tmp = (tmp & ~(0xFU)) | (~count);
writel(tmpS3C64XX_GPMDAT);
msleep(200);
count++;
}
break;
default:
return -EINVAL;
}
return 0;
}
struct file_operations led_fops = {
.owner = THIS_MODULE
.open = led_open
.wri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3725 2012-08-20 23:09 led\led.c
文件 295 2012-08-20 22:45 led\led.h
文件 76637 2012-08-20 23:09 led\led.ko
文件 5985 2012-08-20 23:09 led\test
文件 762 2012-08-20 23:09 led\test.c
目录 0 2012-08-21 12:08 led
----------- --------- ---------- ----- ----
87404 6
- 上一篇:STC单片机读取AT24C02程序
- 下一篇:run_program.sh
相关资源
- STM32 led 时钟
- 直流无刷电机方波驱动 stm32 例程代码
- elantech触控板驱动程序 v13.6.11 官方最
- 联想y470无线网卡驱动 for 32位64位
- 松下plc FP-XH的驱动
- LED灯串电路图说明
- uboot到linux logo显示不间断 补丁
- IMX385驱动代码.zip
- stm32f103c8t6 4 oled.rar
- 组态王驱动开发包3.0.0.7(中文)
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- CASS9.1最新S4数据及驱动+ET199数据及驱
- UNIX/LINUX编程实践教程的源码
- 带有死区延时的H桥直流电机驱动电路
- Linux任务管理器
- linux应用层的华容道游戏源代码
- USB转串口驱动,FT232R驱动程序,最新
- 德卡D3读卡器测试程序驱动文件
- WinCE下CP210x的驱动程序
-
Cme
taFileDC的使用示例 - 光立方制作(原理图 源程序 LED搭接方
- ubuntu9.10 可加载内核模块和字符设备驱
- MCGS触摸屏西门子s7_1200驱动
- 使用OpenFileDialog打开文件对话框.rar
- FPGA在步进电机驱动上的应用实例及代
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- RA8806液晶驱动程序
- MP3文件ID3v2ID3v2APEv2标签读取
- 内核驱动进程保护演示程序
评论
共有 条评论