在Linux设备驱动开发中,粗略的将设备分为三种类型:字符设备,块设备和网络设备。

1、字符设备:指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位。字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供(一般字符设备都会实现相应的fops集),因此file_operations 也就成为了字符设备驱动的核心。

  类型举例:鼠标,键盘,串口,控制台,LED

2、块设备:以数据块的形式存放数据,如NAND Flash以页为单位存储数据,并采用mount方式挂载块设备。

块设备必须能够随机存取(random access),字符设备则没有这个要求。

块设备除了给内核提供和字符设备一样的接口外,还提供了专门面向块设备的接口,块设备的接口必须支持挂装文件系统,通过此接口,块设备能够容纳文件系统,因此应用程序一般通过文件系统来访问块设备上的内容,而不是直接和设备打交道。

对于块设备而言,上层ext2,jiffs2,fat等文件系统会 实现针对VFS的file_opertations成员函数,所以设备驱动层将看不到file_opeations的存在。磁盘文件系统和设备驱动会将对磁盘上文件的访问转换成对磁盘上柱面和扇区的访问。

  类型举例:硬盘,磁盘,U盘,SD卡

3、网络设备在Linux内核中是唯一不体现一切皆设备思想的驱动架构,因为网络设备使用套接字来实现网数据的接受和发送。
  网络设备驱动不同于字符设备和块设备,不在/dev下以文件节点代表,而是通过单独的网络接口来代表。

  类型举例:网卡

原帖参见:https://blog.csdn.net/u012247418/article/details/103332915

Linux驱动笔记-字符设备,块设备,网络设备相关推荐

  1. Linux驱动——mmc sd card 块设备读写流程(十三)

    Linux驱动--mmc sd card 块设备读写流程(十三) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客:   (1) ...

  2. 嵌入式Linux驱动笔记(五)------学习platform设备驱动

    你好!这里是风筝的博客, 欢迎和我一起交流. 设备是设备,驱动是驱动. 如果把两个糅合写一起,当设备发生变化时,势必要改写整个文件,这是非常愚蠢的做法.如果把他们分开来,当设备发生变化时,只要改写设备 ...

  3. Linux驱动开发--写一个块设备驱动

    原文地址:[原创] 写一个块设备驱动 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2017377&fromuid=288 ...

  4. 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)

    ###你好!这里是风筝的博客, ###欢迎和我一起交流. 前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案. Linux早期时候,一个驱 ...

  5. 嵌入式Linux驱动笔记--转自风筝丶

    为了阅读学习方便,将系列博客的网址进行粘贴,感谢原博客的分享. 嵌入式Linux驱动笔记(一)------第一个LED驱动程序 嵌入式Linux驱动笔记(二)------定时器 嵌入式Linux驱动笔 ...

  6. 【linux驱动之字符设备驱动基础】

    linux驱动之字符设备驱动基础 文章目录 linux驱动之字符设备驱动基础 前言 一.开启驱动学习之路 二.驱动预备知识 三.什么是驱动? 3.1 驱动概念 3.2 linux 体系架构 3.3 模 ...

  7. linux驱动之字符设备

    linux驱动之字符设备 linux驱动设备分类 linux驱动分为了三种驱动: 字符设备: 字符设备和应用程序之间是以字节进行进行数据交换的.在进行数据交换的时候数据是以一定顺序进行传输的,传输是实 ...

  8. linux块设备驱动(一)——块设备概念介绍

    linux块设备驱动(一)--块设备概念介绍 本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://bl ...

  9. linux 块设备驱动 (三)块设备驱动开发

    linux 块设备驱动 (三)块设备驱动开发 一: 块设备驱动注册与注销 块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为: int ...

最新文章

  1. ubuntu bind9 配置简单记录
  2. Nginx 安装配置教程
  3. SAP C4C计价(Pricing)中折扣(Discount)的使用
  4. git pull时冲突的几种解决方式
  5. python手势识别隐马尔可夫模型_使用隐马尔可夫模型的运动笔迹手势识别.doc
  6. python线程间数据共享_python 进程间数据共享multiProcess.Manger实现解析
  7. sql单表简单的分页脚本
  8. 使命召唤16计算机内存不足,使命召唤16出现一个问题怎么解决
  9. 麒麟芯片或“绝版”,华为多系列手机涨价​;一加回应“刘作虎回归OPPO”;DBeaver 7.2 发布| 极客头条
  10. read 文件一个字节实际会发生多大的磁盘IO?
  11. 将pdf文件缩小的最快速方法,pdf文件变小的方法
  12. 密码库LibTomCrypt学习记录——(2.13)分组密码算法的工作模式——CCM加密认证模式
  13. 可拖拽排序的GridView(高仿今日头条编辑频道效果)
  14. openstack安装newton版本keyston部署(一)
  15. 新浪微博登录提示sso package or sign error的原因及解决
  16. 发声单元的原理/扬声器的工作原理
  17. linux--Segfault详解
  18. python爬取猫眼top100电影,经典永远是经典
  19. SharePoint 2013的限制(三)非法字符
  20. 百度竞价广告账户的设置

热门文章

  1. jquery实现点击标题显示内容,同级其他元素内容隐藏
  2. python sys模块 argv用法_python命令行的参数传递(sys.argv)
  3. ODDR2原语使用方法
  4. POI实现读写Excel2007完整示例--每分钟约处理7000行数据
  5. 论文解读:ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
  6. Spyder “Glyph 24066 missing from current font.“报错问题
  7. 爆炒江湖显示正在获取服务器信息,爆炒江湖攻略大全 常见问题及必备知识指南...
  8. 内存泄漏查找工具----valgrind简介与使用
  9. 连接redis服务器提示:Redis Client On Error: Error: connect ECONNREFUSED 127.0.0.1:6379 Config right?
  10. 为啥打开桌面计算机很慢,为什么电脑开机很慢