mychar.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include "led.h"
#define CNAME "myled"
int major;
char kbuf[128] = {
0};
//定义结构体类型的指针变量
gpio_t *vir_led1;
gpio_t *vir_led2;
gpio_t *vir_led3;
volatile unsigned int *vir_rcc;
int leds_init(void)
{
//映射RCC地址空间
vir_rcc = ioremap(PHY_RCC_ADDR, 4);
if (vir_rcc == NULL)
{
printk("vir_rcc faild\n");
return -ENOMEM;
}
//映射led1引脚基地址空间
vir_led1 = ioremap(PHY_LED1_ADDR, sizeof(gpio_t));
if (vir_led1 == NULL)
{
printk("vir_led1 faild\n");
return -ENOMEM;
}
//映射led2引脚基地址空间
vir_led2 = ioremap(PHY_LED2_ADDR, sizeof(gpio_t));
if (vir_led2 == NULL)
{
printk("vir_led2 faild\n");
return -ENOMEM;
}
//映射led3引脚基地址空间
vir_led3 = ioremap(PHY_LED3_ADDR, sizeof(gpio_t));
if (vir_led3 == NULL)
{
printk("vir_led3 faild\n");
return -ENOMEM;
}
//初始化寄存器部分
// rcc
*vir_rcc |= (0x3 << 4);
// 模式寄存器设置输出
vir_led1->MODER &= ~(0x3 << 20);
vir_led1->MODER