#define DEVICE_NAME "ledtest" // 定义设备名称
#define DEVICE_MAJOR 231 //主设备号231
#define DEVICE_MINOR 0 //次设备号
struct cdev *mycdev; //字符型设备指针
struct class *myclass; //自定义类
dev_t devno; // unsigned int 类型,32位,用于在驱动程序中定义设备编号,高12位为主设备号,低20位为次设备号
static unsigned int led_table[4] = {}; //4个led数组
static long uptech_leds_ioctl(struct file *file, unsigned int cmd, unsigned long arg) //用于设备的输入输出,要打开的设备文件,请求码,设备指针
{
switch(cmd){
case 1:
if(arg < 0 || arg > 4) { //IOCTL接参数
return -EINVAL; //返回一个错误参数
}
gpio_request(led_table[arg], "ledCtrl"); //注册一个引脚
gpio_direciton_output(led_table[arg], 0); //讲引脚设置输出模式,并拉低
gpio_free(led_table[arg]); //释放一个引脚
break;
case 0:
if(arg < 0 || arg > 4) { //IOCTL接参数
return -EINVAL; //返回一个错误参数
}
gpio_request(led_table[arg], "ledCtrl"); //注册一个引脚
gpio_direciton_output(led_table[arg], 1); //讲引脚设置输出模式,并拉高
gpio_free(led_table[arg]); //释放一个引脚
break;
default:
return -EINVAL;
}
return 0;
}
static struct file_operations uptech_leds_fops = {
.owner = THIS_MODULE, //拥有该结构体模块的指针,一般为THIS_MODULE,权限对象
.unlocked_ioctl = uptech_leds_iotcl, //设备输入输出
}; //文件操作符,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针
static int uptech_leds_init(void)
05-05
638
06-04
06-04
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交