小学生学嵌入式:)Linux_字符设备驱动_流水灯的实现

2019-07-12 15:48发布

想要实现流水灯我们需要编写哪些函数?

谈到需要编写哪些函数的话,就涉及到了一个驱动【框架】的事情。对于一个简单的流水灯函数的实现,我们的框架也非常的简单。主要分为以下三个部分:
  • LED_Open( )
  • LED_Read( )
  • LED_Write( )
    没错,就是最终我们只需要编写上面三个函数,就能在系统中加入我们流水灯的驱动程序了。

LED_Open

先上代码: static int LED_Open(struct inode *inode, struct file *file) { /* 配置GPF4,5,6为输出 */ *gpfcon &= ~((0x3<<(4*2)) | (0x3<<(5*2)) | (0x3<<(6*2))); *gpfcon |= ((0x1<<(4*2)) | (0x1<<(5*2)) | (0x1<<(6*2))); return 0; } 首先我们需要第一个file_operation结构

LED_Write

先上代码: static ssize_t LED_Write(struct file *file, const char __user *buf, size_t count, loff_t * ppos) { int val; //printk("first_drv_write "); copy_from_user(&val, buf, count); // copy_to_user(); if (val == 1) { // 点灯 *gpfdat &= ~((1<<4) | (1<<5) | (1<<6)); } else { // 灭灯 *gpfdat |= (1<<4) | (1<<5) | (1<<6); } return 0; }