驱动:链接
开发字符型设备应用
chrdevbaseapp.c
#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
static char usrdata[] = {"usr data!"};
/*
*@param - argc : argv数组元素个数
*@param - argv : 具体参数
*
*/
int main(int argc, char *argv[])
{
char *filename;
int fd,ret;
char read_buf[100],write_buf[100];
printf("///testing\r\n");
filename = argv[1];
if (argc!=3)
{
printf("input error\r\n");
return -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)
{
ret = read(fd,read_buf,50);
if (ret < 0)
{
printf("read file %s failed!\r\n", filename);
}
else
{
/* 读取成功,打印出读取成功的数据 */
printf("read data:%s\r\n",read_buf);
}
}
if(atoi(argv[2]) == 2)
{
memcpy(write_buf, usrdata, sizeof(usrdata));
ret = write(fd,write_buf,sizeof(write_buf));
if (ret < 0)
{
printf("write file %s failed!\r\n", filename);
}
else
{
/* 写入成功,打印出写入成功的数据 */
printf("write data:%s\r\n",write_buf);
}
}
ret = close(fd);
if(ret < 0){
printf("Can't close file %s\r\n", filename);
return -1;
}
return 0;
}
编译
arm-none-linux-gnueabihf-gcc chrdevbaseapp.c -o chrdevbaseapp
将编译出来的文件复制到板子的文件夹下。
1.依赖
depmod
2.挂载驱动
modprobe chrdevbase.ko
3.创建节点 此处的主设备号需要与驱动中一致
mknod /dev/chrdevbase c 201 0
4. 使用应用
读
./chrdevbaseapp /dev/chrdevbase 1
写
./chrdevbaseapp /dev/chrdevbase 2
5. 卸载驱动
rmmod chrdevbaseapp