⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led-driver.c

📁 linux下的基于fft-s3c2410开发平台的led实验程序源代码
💻 C
字号:

/* The necessarrqy header files */#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif

#include <linux/module.h>
#include <asm/io.h>
#include <linux/fs.h>
#include <linux/kernel.h>


#include <asm/arch/hardware.h>
#include <asm/uaccess.h> 
/* Deal with CONFIG_MODVERSIONS */
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif        

#include <linux/sched.h>
#include <linux/tqueue.h>
#include <linux/interrupt.h>
#include <asm/io.h>#include <linux/string.h>

#ifndef KERNEL_VERSION
#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c))
#endif
unsigned int    leddriver_major;void* pLedData;//************************************************************//  函数原形:   write_leddriver(struct file *file,char *buf,size_t count,loff_t *f_pos)//   参数:        buf  : 传入该函数的数据缓冲区指针   //************************************************************int  write_leddriver(struct file *file, char *buf, size_t count,loff_t *f_pos){		int i,j;        unsigned char tmp1[10];        unsigned long led_data; 
	if (verify_area(VERIFY_WRITE,buf,count) == -EFAULT )   //对用户的缓冲区判断
	   return -EFAULT;   
        copy_from_user(tmp1,buf,4); 
//        memcpy(&tmp1,&led_data,4);//        printk("tmp1=%d %d %d %d\n",tmp1[0],tmp1[1],tmp1[2],tmp1[3]);
        led_data=tmp1[0]|(tmp1[1]<<8)|(tmp1[2]<<16)|(tmp1[3]<<24);//        printk("led_data=%x\n",led_data);    pLedData=ioremap(0x28400000,0x10);   //地址影射
//        printk("led_data=%d\n",led_data);       for(i=0;i<1000000;i++)         {           writel((led_data),pLedData);         }   iounmap(pLedData); 	return 0; }/********************************************************函数原形:read_readmiao1(struct file *file, char *buf, size_t count,loff_t *f_pos)*参数:        buf  : 传入该函数的数据缓冲区指针/*******************************************************/ int  read_leddriver(struct file *file, char *buf, size_t count,loff_t *f_pos){		return 0; }/********************************************************函数原形:open_leddriver(struct inode *inode,struct file *file)*参数:               *返回值 : *函数说明:/*******************************************************/int open_leddriver(struct inode *inode,struct file *file){       return 0;}/********************************************************函数原形:release_leddriver(struct inode *inode,struct file *file)*参数:               *返回值 : *函数说明:/*******************************************************/int release_leddriver(struct inode *inode,struct file *file){   return 0;}/**************************************** 函数指针结构: file_operations** 说明        :***************************************/struct file_operations leddriver_fops={//  	read :      read_leddriver,        write:      write_leddriver,//	ioctl:	  ioctl_leddriver,	open :	  open_leddriver,        release:    release_leddriver,};
/* Initialize the module  */
int init_module()
{
    char ch;
    int openint0,i,j,k,n;
    int result;    result=register_chrdev(0,"leddriver",&leddriver_fops);       //注册一个设备,得到驱动的主设备号    if(result<0)      {         printk("cannot get leddriver major number\n");     //没有成功         return result;      }    printk("Congraulation, led drivers are successful registed\n");    if(leddriver_major==0)      {         leddriver_major=result;                         //记录下主设备号      }    pLedData=ioremap(0x28400000,0x10);   //地址影射
    for(i=0;i<1000000;i++)
      writel(0xffffffff,pLedData);		   iounmap(pLedData);     return 0;}

/* Cleanup */
void cleanup_module()
{
    printk("Stop read miao module\n");
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -