1、编写测试APP ,led驱动加载成功以后可以手动创建/dev/led节点,应用程序通过/dev/led文件来完成对LED设备的控制
例如:向/dev/led文件中写0 表示关闭LED灯,写1表示打开LED灯。
#include "stdio.h"
#include "unistd.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "stdlib.h"
#include "string.h"
//LED测试用的APP
#define LEDOFF 0
#define LEDON 1
int main(int argc,char *argv[])
{
int fd,retvalue;
char *filename;
unsigned char databuf[1];
if(argc != 3){
printf("Error Usage!rn");
return -1;
}
filename = argv[1];
//打开led驱动
fd = open(filename,O_RDWR);
if(fd < 0){
printf("file %s open failed!rn");
return -1;
}
databuf[0] = atoi(argv[2]); //要执行的操作
//向/dev/led文件写入数据
retvalue = write(fd,databuf,sizeof(databuf));
if(retvalue <0)
{
close(fd);
return -1;
}
retvalue = close(fd); //关闭文件
return 0;
}
应用代码和之前的系统编程代码实现功能是一样的。
简化新版的驱动代码的具体实现过程如下:
#include
#include
#include
#include
#define NEWCHRLED_CNT 1
#define NEWCHRLED_NAME "newchrled"
#define LEDOFF 0
#define LEDON 1
#define CCM_CCGR1_base (0x020C406C)
#define SW_MUX_GPIO1_IO03_base (0x020E0068)
#define SW_PAD_GPIO1_IO03_base (0x020E02F4)
#define GPIO1_DR_base (0x0209C000)
#define GPIO1_GDIR_base (0x0209C004)
static void __iomem *CCM_CCGR1;
static void __iomem *SW_MUX_GPIO1_IO03;
static void __iomem *SW_PAD_GPIO1_IO03;
static void __iomem *GPIO1_DR;
static void __iomem *GPIO1_GDIR;
struct newchrled_dev{
dev_t devid;
struct cdev cdev;
struct class *class;
struct device *device;
int major;
int minor;
};
struct newchrled_dev newchrled;
总的来说,驱动中核心的结构,来编写对应的驱动程序,重点是使用对应的驱动框架实现。



