#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/cdev.h>
MODULE_LICENSE("GPL");
#define GPM4CON 0X110002E0
#define GPM4DAT 0X110002E4
#define LED_ON _IOW(‘G‘,0,int)
#define LED_OFF _IOW(‘G‘,1,int)
static struct cdev dev;//1.1 分配cdev结构
static dev_t dev_no;
struct class *led_class;
static unsigned int *led_con;
static unsigned int *led_dat;
long led_ioctl( struct file *file, unsigned int cmd, unsigned long arg )
{
switch( cmd )
{
case LED_ON:
writel((readl(led_dat)&(~(0x1<<(arg-1)))),led_dat);
break;
case LED_OFF:
writel( (readl(led_dat)|(0x1<<(arg-1))),led_dat);
break;
default:
return -EINVAL;
break;
}
return 0;
}
struct file_operations led_fops = {
.owner = THIS_MODULE,
.unlocked_ioctl = led_ioctl,
};
static void hw_init()
{
//初始化GPIO控制寄存器
led_con = ioremap( GPM4CON, 4 ); //地址映射
led_dat = ioremap( GPM4DAT, 4 );
writel((readl(led_con)&~0xffff)|0x1111,led_con);
writel(readl(led_dat)|0xf,led_dat);
}
static int led_init()
{
//1.2 初始化cdev结构
alloc_chrdev_region( &dev_no, 0, 1, "my_led" );
cdev_init( &dev, &led_fops );
dev.owner = THIS_MODULE;
//1.3 注册cdev结构
cdev_add( &dev, dev_no, 1 );
//2.硬件初始化
hw_init();
//3.创建设备文件
led_class = class_create(THIS_MODULE,"my_led"); //创建设备类
device_create( led_class, NULL, dev_no,NULL,"%s","my_led");
printk("init led device ok!\n");
return 0;
}
void led_exit()
{
device_destroy(led_class,dev_no);
class_destroy(led_class);
iounmap(led_con);
iounmap(led_dat);
cdev_del(&dev);
unregister_chrdev_region(dev_no,1);
}
module_init( led_init );
module_exit( led_exit );
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ndk_test_myled LOCAL_SRC_FILES := ndk_led.c include $(BUILD_SHARED_LIBRARY)
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有