参考正点原子编写LED驱动
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/gpio.h>
#include <asm/mach/map.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#define LED_MAJOR 200
#define LED_NAME "led"
#define LEDOFF 0
#define LEDON 1
#define SW_MUX_GPIO3_IO020_BASE (0X020E0154)
#define SW_PAD_GPIO3_IO020_BASE (0X020E0524)
#define GPIO3_DR_BASE (0X020A4000)
#define GPIO3_GDIR_BASE (0X020A4004)
static void __iomem *SW_MUX_GPIO3_IO020;
static void __iomem *SW_PAD_GPIO3_IO020;
static void __iomem *GPIO3_DR;
static void __iomem *GPIO3_GDIR;
void led_switch(u8 sta)
{
u32 val = 0;
if(sta == LEDON) {
val = readl(GPIO3_DR);
val &= ~(1 << 20);
writel(val, GPIO3_DR);
}else if(sta == LEDOFF) {
val = readl(GPIO3_DR);
val|= (1 << 20)