字符设备、块设备、网络设备


设备模型
设备驱动的代码量占内核程序的50%

设备模型的意义:
为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核所规定的数据结构的填充和实现。

因为硬件设备多种多样,使得设备驱动程序繁多,设备模型将硬件设备分类,抽象出一套标准的数据结构和接口。

一、字符设备
1.特点
一个字节一个字节读写的设备,
读取数据需要按照先后数据(顺序读取)
常见的字符设备有鼠标、键盘、串口、控制台和LED设备
每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备。

2.上层应用如何调用底层驱动?
1.应用层的程序open(“/dev/xxx”,mode,flags)打开设备文件,进入内核中,即虚拟文件系统中。
2.VFS层的设备文件有对应的struct inode,其中包含该设备对应的设备号,设备类型,返回的设备的结构体。
3.在驱动层中,根据设备类型和设备号就可以找到对应的设备驱动的结构体,用i_cdev保存。该结构体中有很重要的一个操作函数接口file_operations。
4.在打开设备文件时,会分配一个struct file,将操作函数接口的地址保存在该结构体中。
5.VFS层 向应用层返回一个fd,fd是和struct file相对应,这样,应用层可以通过fd调用操作函数,即通过驱动层调用硬件设备了。



二、块设备
1.特点
数据以固定长度进行传输,比如512K
从设备的任意位置(可跳)读取,但实际上,块设备会读一定长度的内容,而只返回用户要求访问的内容,所以随机访问实际上还是读了全部内容。
块设备包括硬盘、磁盘、U盘和SD卡等
每个块设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作块设备。
块设备可以容纳文件系统,比如磁盘

三、网络设备
1.特点
面向报文而不是面向流的,因此将网络接口映射到文件系统的节点比较困难
内核调用一套和数据包相关的函数,而不是read,write。
网络接口没有像字符设备和块设备一样的设备号,只有唯一的名字,如eth0,eth1
主要通过socket操作,打开通常用命令行,

2.关系
网络协议接口层:网络层,IP
网络设备接口层:将协议和各种网络驱动连接在一起,这一层提供一组通用函数供底层网络设备驱动使用。
网络驱动接口层:数据链路层,提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。包括LLC和MAC层
物理层:PHY层

————————————————
版权声明:本文为CSDN博主「qq_27840681」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27840681/article/details/77567094

字符设备、块设备、网络设备详解相关推荐

  1. 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解

    原标题:嵌入式Linux驱动设备之MTD技术详解 MTD(memory technology device内存技术设备)是用于访问memory设备(ROM.flash)的Linux的子系统. MTD的 ...

  2. I/O输入输出——I/O设备(块设备与字符设备)

    无论是块设备还是字符设备,都是属于IO硬件,在整个硬件到软件层之前的了解,有助于我们理解. I/O设备 块设备 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的 ...

  3. zabbix3.x添加H3C网络设备详解

    zabbix3.x添加H3C网络设备详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 欢迎加入:高级运维工程师之路 598432640 相信大家在看我的文章之前,也看过其 ...

  4. 思科网络学院CCNA网络设备详解

    思科网络学院CCNA网络设备详解 自测简介:     在路由器的学习中,理论知识占有很大比重,不过更为重要的是如何"实战"?很多人没有实际条件能操作思科.华为等真实设备.不过,通过 ...

  5. java构造块_java中的静态代码块、构造代码块、构造方法详解

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  6. CSS之排列系列--块级元素、内联元素、内联块元素--区别/详解

    原文网址:CSS之排列系列--块级元素.内联元素.内联块元素--区别/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍CSS的块级元素(block).内联元素(inline)和内联块元素(inl ...

  7. 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr strtok(及其模拟实现)

     系列文章目录 字符函数和字符串函数详解(一)strlen strcpy strcat strcmp 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr str ...

  8. Html块级元素详解

    Html块级元素详解 *块级元素 常见的有:div , table, tr , from , ul ,li ,ol ,h1~h6, p 盒子 div 标签 <div class="bq ...

  9. linux的安装nmom命令,Linux下块设备查看命令lsblk详解

    简介 在Linux系统下面,块设备使用很常见,尤其是一些传统商用数据库,例如Oracle,DB2就经常使用块设备,lsblk命令可以非常方便的让你获取所有的块设备信息. lsblk安装 如果你的Lin ...

  10. 从头实现Linux字符设备驱动——2万字详解

    文章目录 字符设备驱动基础 申请设备号 创建设备节点 在驱动中实现操作方法 文件IO调用驱动中的操作 应用程序与驱动的数据交互 内核驱动如何控制外设 控制LED的简单驱动实例 驱动程序的改进 框架复盘 ...

最新文章

  1. java的listroots_list(), listFiles(), listRoots() in Java
  2. python读取多个文件夹_在python中如何从不同的文件夹读取多个文件
  3. The Innovation | Volume 2 Issue3 正式出版
  4. vue怎么vw布局好用_vue 实现 rem 布局的 或者 vw 布局的方法
  5. 与善淘网一起做慈善商店
  6. linux 简介与安装(虚拟机安装)
  7. python 基本操作 多维数组 循环
  8. Java多线程-线程中止
  9. LeetCode Algorithm 217. 存在重复元素
  10. LG P4899 [IOI2018] werewolf 狼人(kruskal重构树,二维数点)
  11. 20 | 散列表(下):为什么散列表和链表经常会一起使用?
  12. php编写用户登录页面,js+php实现静态页面实时调用用户登陆状态的方法
  13. 告别卷积神经网络CNN?计算机视觉也能用上 Transformer 了
  14. Java 人工智能开发实习生_2018Java研发实习内推:阿里美团百度 均拿offer
  15. opencv 轮廓特征
  16. 荣禄[róng lù]
  17. NAT技术代理服务器
  18. shell脚本命令(记录)
  19. Redis Sentinel 机制与用法(二)
  20. 【图像隐写】基于matlab GUI LSB+DWT+DCT音频水印【含Matlab源码 618期】

热门文章

  1. chrome浏览器完整保存整个网页 可离线访问
  2. 【转】performSelector延时调用导致的内存泄露
  3. MATLAB 2016b--神经网络工具箱中图形用户界面的使用
  4. 关于Wincc 7.0 sp1 亚洲版的下载链接地址及授权,破解
  5. U盘如何使用量产工具格式化
  6. JAVA实现饭店点菜系统详解
  7. lattice planner
  8. USRP_X310_Device_Recovery手册
  9. 软件工程本科生实习_我从n00b实习生到工程团队主管的方式
  10. 燃烧远征怀旧服务器人数小程序,魔兽怀旧服一直更新下去,最终会开到哪个版本?...