📄 beep.c
字号:
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <asm/uaccess.h>
#include <asm/arch/io.h>
#include <asm/arch/gpio.h>
#define NAME "beep"
#define BEEP AT91_PIN_PC4
static int major =232;
static int beep_driver_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)
{
// unsigned int regled1;
// regled1=gpio_get_value(BEEP);
// gpio_set_value(BEEP,0);
switch(cmd)
{
case 0x00: at91_set_gpio_value(BEEP,0);
break;
case 0x01: at91_set_gpio_value(BEEP,1);
break;
default:
break;
}
return 1;
}
static int beep_driver_open(struct inode *inode,struct file *file)
{
unsigned m =iminor(inode);
if(m>63) return -EINVAL;
printk("Beep driver opened!\n");
return nonseekable_open(inode,file);
}
static int beep_driver_release(struct inode *inode,struct file *file)
{
printk("Beep driver released!\n");
return 0;
}
static struct file_operations beep_driver_fops =
{
.owner =THIS_MODULE,
.ioctl =beep_driver_ioctl,
.open =beep_driver_open,
.release =beep_driver_release,
};
static int __init beep_driver_init(void)
{
int ret;
at91_set_gpio_output(BEEP,0);
printk(KERN_ALERT "Beep modules is install\n");
ret=register_chrdev(major,NAME,&beep_driver_fops);
if(ret<0)
{
printk("unable to register beep driver!\n");
return ret;
}
return 0;
}
static void __exit beep_driver_exit(void)
{
unregister_chrdev(major,NAME);
printk(KERN_ALERT "Beep modules is uninstall\n");
}
module_init(beep_driver_init);
module_exit(beep_driver_exit);
MODULE_AUTHOR("arim-stone");
MODULE_DESCRIPTION("this module is used to test at91sam9261 beep");
MODULE_LICENSE("Dual BSD/GPL");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -