二、构造file_operations结构体led_drv_fops中的各函数,本实例只是构造了open、ioctl函数。 要操作S3C2440的IO口,首先要进行IO的初始化,根据MINI2440的原理图,应将GPB5、GPB6、GPB7、GPB8设置为输出模式,内核源码arch/arm/plat_s3c24xx/gpio.c中提供了初始化管脚功能的函数void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function),将初始化函数写在led_drv_open函数中,代码如下:
点击(此处)折叠或打开
static unsigned long led_table[]={
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB7,
S3C2410_GPB8,
};
static unsigned long led_cfg_table[]={
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
};
static int led_drv_open(struct inode *inode, struct file *file)
添加操作LED的函数,即控制LED亮和灭的函数,根据MINI2440原理图,GPB5、GPB6、GPB7、GPB8输出低电平LED亮,GPB5、GPB6、GPB7、GPB8输出高电平LED灭,内核源码arch/arm/plat_s3c24xx/gpio.c中提供了设置GPIO状态的函数void s3c2410_gpio_setpin(unsigned int pin, unsigned int to),