Linux驱动编写(字符设备编写框架)

发表于:2013-1-29 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:feixiaoxing    来源:51Testing软件测试网采编

  不可否认,我们的代码出现了更多的内容,但是基本框架还是一致的。要是说区别,无非就是我们在原来的基础上添加了新的处理函数而已。说起来,我们对于设备的主要操作也就是这么几种,大家如果对此的概念已经非常成熟了,那么后面的学习就会轻松很多。当然和之前的驱动一样,我们也需要make &  insmod char.ko & mknod /dev/chr_dev c 249 0。接下来,为了验证上述的内容是否正确,编写一段简单的测试代码是必不可少的。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

#define MEM_CLEAR 0x01
#define CHAR_DEV_NAME "/dev/chr_dev"

int main()
{
        int ret;
        int fd;
        int index;
        char buf[32];

  /* open device */
        fd = open(CHAR_DEV_NAME, O_RDWR | O_NONBLOCK);
        if(fd < 0)
        {
                printf("open failed!\n");
                return -1;
        }

  /* set buffer data, which will be stored into device */
        for(index = 0; index < 32; index ++)
        {
                buf[index] = index;
        }

  /* write data */
        write(fd, buf, 32);
        memset(buf, 0, 32);

  /* read data */
        lseek(fd, 0, SEEK_SET);
        read(fd, buf, 32);
        for(index = 0; index < 32; index ++)
        {
                printf("data[%d] = %d\n", index, buf[index]);
        }

  /* reset all data to zero, read it and check whether it is ok */
  ioctl(fd, MEM_CLEAR, NULL);
  lseek(fd, 0, SEEK_SET);
        read(fd, buf, 32);
        for(index = 0; index < 32; index ++)
        {
                printf("data[%d] = %d\n", index, buf[index]);
        }

        close(fd);
        return 0;
}

  细心的朋友可能发现了,我们在用户侧代码中使用了很多的处理函数,基本上从open、release、read、write、lseek、ioctl全部包括了。测试代码处理的流程也非常简单,首先打开设备,接着写数据,后面就是读取数据,最后利用ioctl清除数据,程序返回。因为代码中包含了注释的内容,在此我们就不过多赘述了。大家慢慢看代码,应该都会了解和明白的。

  希望以上的这段内容对大家有所帮助。

相关链接:

Linux驱动编写(入门)

Linux驱动编写(虚拟字符设备编写)

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号