#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
MODULE_LICENSE("GPL");static struct class *led_class;static struct class_device *led_class_device;volatile unsigned long *gpfcon = NULL;volatile unsigned long *gpfdat = NULL;static int led_drv_open(struct inode *inode, struct file *file){    *gpfcon &= ~((4 << 4*2) | (3 << 5*2) | (3 << 6*2));    *gpfcon |= ((1 << 4*2) | (1 << 5*2) | (1 << 6*2));        return 0;}static ssize_t led_drv_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos){    int val        copy_from_user(&val, buf, count);        if (val)    {        *gpfdat |= ((1 << 4*2) | (1 << 5*2) | (1 << 6*2));    }    else    {        *gpfdat &= ~((1 << 4*2) | (1 << 5*2) | (1 << 6*2));    }        return 0;}static struct file_operations led_fops = {    .owner = THIS_MODULE,    .open  = led_drv_open,    .write = led_drv_write,};int major;static int led_drv_init(void){    major = register_chrdev(0, "led", &led_fops);    led_class = class_create(THIS_MODULE, "led");    led_class_device = class_device_create(led_class, NULL, MKDEV(major, 0), NULL, "abc"); /* 在应用层open("/dev/abc", O_RDWR)  */        gpfcon = (volatile unsigned long *)ioremap(0x56000000, 16);    gpfdat = gpfcon + 1;       return 0;}static int led_drv_exit(void){    unregister_chrdev(major, "led");    class_device_unregister(led_class_device);    class_destroy(led_class);    iounmap(gpfcon);    return 0;}module_init(led_drv_init);module_exit(led_drv_exit);