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

📄 led_driver.c

📁 通过客户机和服务器的方式来进行网络通信
💻 C
字号:
/****************************************
*    LED_Driver 驱动程序                *      
*****************************************/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/init.h>
#include <linux/module.h>
#include <asm/hardware.h>

#define GPIO_LED_MAJOR	97// 定义主设备号
#define ARM_GPIO_LED_DEBUG 
#define ARM_GPIO_LED	(GPIO96)// 定义 LED设备控制器GPIO96
#define LED_ON  0//定义 LED 状态
#define LED_OFF 1
#define ctl_GPIO_LED1 1// 定义控制命令
#define VERSION         "ARM_GPIO_LED_2007/09/20"

void showversion(void)
{
printk("*************************************\n");
printk("\t %s \t\n", VERSION);
printk("*************************************\n\n");
}
/*  建立GPIO对应的ioctl接口函数  */
int GPIO_LED_ioctl(struct inode * inode,struct file * file,unsigned int cmd,unsigned long data)
{
#ifdef ARM_GPIO_LED_DEBUG
printk("GPIO_LED_ioctl [ --kernel-- ]\n");
#endif
switch(cmd)
{
case LED_ON:{GPCR3|=0x1;break;}
case LED_OFF:{GPSR3|=0x1;break;}
default :
{
printk("lcd control : no cmd run  [ --kernel-- ]\n");
return (-EINVAL);
}
}
return 0;
}
/* 建立GPIO对应的打开设备接口函数  */
static int GPIO_LED_open(struct inode * inode,struct file * file)
{
#ifdef ARM_GPIO_LED_DEBUG
printk ("GPIO_LED_open [ --kernel--]\n");
#endif
MOD_INC_USE_COUNT;
return 0;
}	

/*  建立GPIO对应的关闭接口函数  */
static int GPIO_LED_release(struct inode  * inode,struct file * file)
{
#ifdef ARM_GPIO_LED_DEBUG
printk ("GPIO_LED_release [ --kernel-- ]\n");
#endif
MOD_DEC_USE_COUNT;
return 0;
}
/* GPIO向系统注册的操作功能,声明操作功能接口函数 */
static struct file_operations GPIO_LED_ctl_ops={
	.open=GPIO_LED_open,
	.ioctl=GPIO_LED_ioctl,
	.release=GPIO_LED_release,
};
/* 系统初始化 */
static int __init HW_GPIO_LED_CTL_init(void)
{
int ret = -ENODEV;
printk("Driver Loding .....................\n\n");
showversion();
// 初始化 GPIO
GPDR3|= 0x00000001; //将GPIO96设置成输出模式
GPSR3|= 0x00000001; // OFF THE LED
#ifdef ARM_GPIO_LED_DEBUG
printk(" GPLR3=%x \n",GPLR3);
printk(" GPDR3=%x \n",GPDR3);
#endif
ret = register_chrdev(GPIO_LED_MAJOR,"led_drv",&GPIO_LED_ctl_ops);
if( ret < 0 )
{ printk (" ARM: init_module failed with %d\n [ --kernel--]", ret);	
return ret;}
else
{ 
	printk(" ARM gpio_led_driver register success!!! [ --kernel--]\n");
}
return ret;
}
static int __init ARM_GPIO_LED_CTL_init(void) 
{
int  ret = -ENODEV;
#ifdef ARM_GPIO_LED_DEBUG
printk ("ARM_GPIO_LED_CTL_init [ --kernel--]\n");
#endif
ret = HW_GPIO_LED_CTL_init();
if (ret)
return ret;
return 0;
}
/*  系统卸载 */
static void __exit cleanup_GPIO_LED_ctl(void)
{
#ifdef ARM_GPIO_LED_DEBUG
printk ("cleanup_GPIO_LED_ctl [ --kernel--]\n");
#endif
unregister_chrdev(GPIO_LED_MAJOR,"gpio_led_ctl");
}

/*  驱动程序的GPL协议证书信息 */
MODULE_LICENSE("GPL");
/*  进入内核模块的入口,完成模块初始化 */
module_init(ARM_GPIO_LED_CTL_init);
/*  卸载时调用的函数入口,完成模块卸载 */
module_exit(cleanup_GPIO_LED_ctl);

⌨️ 快捷键说明

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