linux APP 编写
为什么要写APP
驱动编写完成后必须进行测试,测试驱动必须编写APP。APP完成对设备的打开(open)、读(read)、写(write)、关闭(close)。因为linux系统中一切皆为文件,所以相关的文件操作即可完成相关的设备操作。
一、字符设备测试APP
1.引入库
以下代码来源于ALENTEK IMX6ULL 开发板,因为左先生已经完成程序的编写,我们就乐享其成了。
代码如下(示例):
#include "unistd.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "stdlib.h"
#include "string.h"
static char usrdata[] = {"usr data!luoxinli"};
/*
* @description : main主程序
* @param - argc : argv数组元素个数
* @param - argv : 具体参数
* @return : 0 成功;其他 失败
*/
int main(int argc, char *argv[])
{
int fd, retvalue;
char *filename;
char readbuf[100], writebuf[100];
if(argc != 3){
printf("Error Usage!\r\n");
return -1;
}
filename = argv[1];
/* 打开驱动文件 */
fd = open(filename, O_RDWR);
if(fd < 0){
printf("Can't open file %s\r\n", filename);
return -1;
}
if(atoi(argv[2]) == 1){ /* 从驱动文件读取数据 */
retvalue = read(fd, readbuf, 50);
if(retvalue < 0){
printf("read file %s failed!\r\n", filename);
}else{
/* 读取成功,打印出读取成功的数据 */
printf("read data:%s\r\n",readbuf);
}
}
if(atoi(argv[2]) == 2){
/* 向设备驱动写数据 */
memcpy(writebuf, usrdata, sizeof(usrdata));
retvalue = write(fd, writebuf, 50);
if(retvalue < 0){
printf("write file %s failed!\r\n", filename);
}
}
/* 关闭设备 */
retvalue = close(fd);
if(retvalue < 0){
printf("Can't close file %s\r\n", filename);
return -1;
}
return 0;
}
2.APP程序解读
程序非常简单,打开一个设备,从设备中读、或者写入数据。
程序运行是需要两个参数,第一是设备的绝对路径,第二个参数是1或者2,
1是读取数据,2是写入文件。
在学习的过程中,如果没有可靠的方法,可以使用静态分析的方法,分析结束后然后测试运行,可以使用printf( )、printk( )输出调试信息来分析前人的设计思路。
总结
第一 测试驱动的APP编写必须了解C语言程序设计;
第二 必须熟悉linux下文件操作;
第三 熟练使用printk( )和printf( )函数。
熟悉三点已经达到编写APP的基本需求。