久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

led燈驅(qū)動測試

 jianbin226 2012-06-12
led驅(qū)動程序:
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/device.h>
#include<linux/types.h>
#include<linux/ioctl.h>
#include<linux/errno.h>
#include<linux/init.h>
#include<linux/cdev.h>
#include<asm/uaccess.h>
#include<linux/fs.h>
#include<asm/io.h>
#include<mach/regs-gpio.h>

#define DEVICE_NAME "led"
#define DEVICE_MAJOR 212
static int led_major=DEVICE_MAJOR;

#define LED1 S3C2410_GPB5
#define LED1_OUTP S3C2410_GPB5_OUTP

#define LED_ON 0
#define LED_OFF 1

struct s3c2410_led_dev
{
 struct cdev cdev;
 int status;
};

static struct s3c2410_led_dev dev;

void s3c2410_led_InitIO(void);

void s3c2410_led_InitIO(void)
{
  s3c2410_gpio_cfgpin(LED1,LED1_OUTP);
  s3c2410_gpio_setpin(LED1,LED_OFF);
}

static int s3c2410_led_open(struct inode *inode,struct file *filp)
{
 return 0;
}

static int s3c2410_led_release(struct inode *inode,struct file *filp)
{
 return 0;
}

static int s3c2410_led_ioctl(struct inode *inode,struct file *filp,unsigned int cmd ,unsigned long arg)
{
 switch (cmd)
 {
  case LED_ON:
   s3c2410_gpio_setpin(LED1,LED_ON);
   dev.status=1;
   break;
  case LED_OFF:
   s3c2410_gpio_setpin(LED1,LED_OFF);
   dev.status=0;
   break;
  default:
   return -EINVAL;
 }
 return 0;
}

static ssize_t s3c2410_led_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)
{
 put_user(dev.status,(int *)buffer);
 return 1;
}

static ssize_t s3c2410_led_write(struct file *filp,char *buffer, size_t count,loff_t *ppos)
{
 get_user(dev.status,(int *)buffer);
 if(dev.status==0)
  s3c2410_gpio_setpin(LED1,LED_OFF);
 else if(dev.status==1)
  s3c2410_gpio_setpin(LED1,LED_ON);
 return 1;
}

static struct file_operations s3c2410_led_fops={
 .owner =THIS_MODULE,
 .open =s3c2410_led_open,
 .release=s3c2410_led_release,
 .ioctl =s3c2410_led_ioctl,
 .read =s3c2410_led_read,
 .write =s3c2410_led_write,
};

static void led_setup_cdev(void)
{
 int err,devno=MKDEV(led_major,0);
 cdev_init(&dev.cdev,&s3c2410_led_fops);
 dev.cdev.owner=THIS_MODULE;
 dev.cdev.ops=&s3c2410_led_fops;
 err=cdev_add(&dev.cdev,devno,1);
 if(err)
 printk("Error %d adding LED %d",err);
}

static int s3c2410_led_init(void)
{
 int result;
 dev_t devno=MKDEV(led_major,0);
 if(led_major)
 result=register_chrdev_region(devno,1,DEVICE_NAME);
 else
 {
  result=alloc_chrdev_region(&devno,0,1,DEVICE_NAME);
  led_major=MAJOR(devno);
 }
 if(result<0)
  return result;
 led_setup_cdev();
 s3c2410_led_InitIO();
 dev.status=0;
 printk(DEVICE_NAME"initialized\n");
 return 0;
}

static void s3c2410_led_exit(void)
{
 cdev_del(&dev.cdev);
 unregister_chrdev_region(MKDEV(led_major,0),1);
}


module_init(s3c2410_led_init);
module_exit(s3c2410_led_exit);
MODULE_LICENSE("GPL");
Makefile文件:
obj-m:=led.o
KDIR:=/opt/EmbedSky/linux-2.6.30.4
PWD:=$(shell pwd)
default:
 $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules/*先用-C參數(shù)指定內(nèi)核源碼的目錄,,這樣make時會進(jìn)入到內(nèi)核源碼目錄,M=$PWD或SUBDIRS=$PWD,,指定要編譯的模塊所在目錄,make modules時,,內(nèi)核主makefile會執(zhí)行此目錄下的Makefile,,編譯模塊*/
//SUBDIRS 也可以用M代替
clean:
 -rm -f led.mod.c modules.order Module.symvers
 -rm -f *~ core *.o *.ko
生成.ko文件后下載到開發(fā)板/usr/led,加載insmod led.ko ,。在/dev/下創(chuàng)建設(shè)備(有的會自動創(chuàng)建)mknod led c 212 0,。
(查資料:如果在程序中添加函數(shù)class_create和device_create(分別創(chuàng)建類和節(jié)點),就能夠在/dev目錄下自動創(chuàng)建設(shè)備節(jié)點)
通過cat /proc/devices查看掛載有沒有成功,。
 
測試文件led_test.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.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"
#define LED_ON 0
#define LED_OFF 1
int main()
{
 int fd,i,j;
 int led_status=0;
 fd=open("/dev/led",O_RDWR);
 if(fd<0)
 {
  perror("open device led failed!");
  exit(1);
 }
 printf("led test show.press ctrl +c exit /n");
 ioctl(fd,LED_OFF);
 
 while(1)
 { 
  read(fd,&led_status,1);
  if(led_status==0)
   ioctl(fd,LED_ON);
  else if(led_status==1)
   ioctl(fd,LED_OFF);
  printf("led:on and off\n");
  for(i=0;i<300;i++)
  for(j=0;j<10000;j++);
 }
 close(fd);
 return 0;
}
編譯arm-linux-gcc -o led_test led_test.c,。產(chǎn)生led_test文件。
下載到/usr/led/test/目錄下,,改變文件的執(zhí)行權(quán)限:chmod +x led_test,。
執(zhí)行:./led_test   
OK,燈亮
 
 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多