linux驱动简单介绍

驱动基本介绍

驱动。顾名思义就是“驱使硬件设备行动”。设备驱动与底层硬件之间打交道,按照硬件设备的具体操作方式来读写设备寄存器,最终完成一系列操作。

设备 驱动充当了应用程序和应用软件直接的纽带,它使得应用软件只需要调用系统软件的应用编程接口就可以让硬件完成响应的操作。

硬件、设备驱动和应用软件的关系

  • 无操作系统:

  • 有操作系统:

linux设备驱动与整个软硬件的关系 
Linux下设备驱动一般分为三大类:字符设备驱动,块设备驱动,网络设备驱动。除了网络设备驱动以外,字符设备和块设备都是通过linux虚拟文件系统进行管理(VFS)。

抽象出简单的调用关系图如下:

内核空间和用户空间

对于一个32位操作系统,它的寻址空间(虚拟地址空间)为4G(2^32)。也会是说每个进程的虚拟地址空间为4G。操作系统的核心是内核,它独立于普通的应用程序,可以访问受保护的应用程序,也有访问底层硬件设备的所有权限。为保护内核安全,现代操作系统一般都强制用户进程不能直接操作内核,具体实现由操作系统将虚拟地址空间划分为两部分:内核空间和用户空间

  • 用户空间:0x00000000-0xBFFFFFFF
  • 内核空间:0xC0000000-0xFFFFFFFF

总结:最高的1G内核空间是被所有进程共享

如下图所示,应用程序一般处于用户空间,而系统调用和驱动处于内核空间,故,当应用程序需要和驱动进行数据交互时,需进行地址转换。不能直接访问。

linux设备驱动提供两个接口函数copy_from_user()与copy_to_user():

  • copy_from_user():从用户空间拷贝到内核空间,一般用于write,向内核写之前,先转换
  • copy_to_user():从内核空间拷贝到用户空间,一般用于read,从内核读取后,在转换
1 unsigned long copy_to_user(void _ _user *to, const void *from, unsigned long count);
2 unsigned long copy_from_user(void *to, const void _ _user *from, unsigned long count)

参考

Linux 内核空间与用户空间 
Linux 设备驱动开发详解第二版.宋宝华

转载于:https://www.cnblogs.com/ywx123/p/10463189.html

linux驱动简单介绍相关推荐

  1. kali Linux的简单介绍

    kali Linux的简单介绍 Kali Linux是基于Debian 的Linux发行版,设计用于数字取证操作系统.Back Track是他们之前写的用于取证的Linux发行版.Kali Linux ...

  2. 计算机及linux操作系统的简单介绍

    计算机及linux操作系统的简单介绍 文章目录 计算机介绍 冯诺依曼体系 二进制和十进制转换 摩尔定律 计算机分类 计算机硬件组成 内存 常见的磁盘接口 机械硬盘的基本参数 SSD固态硬盘 机柜 操作 ...

  3. Linux驱动 简单的Linux驱动基础知识

    Linux驱动 简单的Linux驱动基础知识 一.简述         记--Linux驱动学习笔记. Linux驱动程序初始化硬件设备,并提供硬件控制接口给更上一层的应用调用. 例如使用QT应用程序 ...

  4. Linux系统简单介绍

    Linux系统 一,Linux系统介绍: 1.UNIX系统起源,由贝尔实验研究员丹尼斯·里奇和肯·汤普逊合作开发,并顺便开发了C语言,现主要应用于各种大型服务器,如电信,银行,各大公司的核心关键业务. ...

  5. Linux系统简单介绍和基本命令

    目录 服务器环境 服务器 Linux(CentOS7.X)常用命令 系统相关 文件和目录操作 文件内容处理 压缩和解压 网络相关 软件安装 服务器环境 服务器 物理服务器 联想 戴尔 浪潮 惠普 华为 ...

  6. Linux的简单介绍.

    Linux操作系统概述: Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linux Torvalds(林纳斯·托瓦兹)起初开发 ...

  7. Linux 命令简单介绍第二课笔记

    第一:touch touch 1.txt 创建文件 第二:ls ls 用来查看当前文件中的内容,其中加上不同参数-a,-h,-l可以有不同的显示,同事也可以将一个具体内容从定向到一个TXT文件中:具体 ...

  8. Linux 命令简单介绍第一课笔记

    第一: 相对路径和绝对路径 相对路径:从当前路径开始进入blog文件夹 cd blog 绝对路径:从跟目录开始进入blog文件夹 cd /home/yq/Desktop/blog 全称:根目录下hom ...

  9. linux内核驱动开发 培训,嵌入式Linux驱动开发培训 - 华清远见教育集团官网

    9.LINUX下USB驱动开发基础 9.1 USB规范介绍 9.2 USB主机控制器 9.3 USB HUB 9.4 USB设备状态 9.5 USB描述符 9.6 USB请求 9.7 USB通讯数据格 ...

最新文章

  1. 举个例子,如何用GCN图卷积神经网络实现摔倒监测?
  2. (每日一题)CF1139D Steps to One 2021年天梯赛 L3-3 可怜的简单题(期望,莫比乌斯反演,杜教筛)
  3. STM32-RTC原理和驱动程序
  4. KMP算法~看的清楚~
  5. golang学习笔记14 golang substring 截取字符串
  6. Java - 单例模式
  7. 将对象绑定到WinForm中的combobox时出现的奇怪错误:组合框的下拉项太多!
  8. 得到jar包运行时所在的目录
  9. Win7下PDF文件无法显示缩略图的解决方法
  10. 阿里云网盘内测_叫板百度网盘?阿里云网盘内测中,下载速度是亮点
  11. Xshell 7官网免费版下载与安装(详细教程)
  12. windows下发文件到linux中文名乱码解决办法
  13. 9种退出极域课堂的方法
  14. 信息可视化图表设计指南
  15. 中关村硬科技孵化器首次合作建科技成果转化创新平台
  16. 标准证件照电子版怎么做?
  17. 6sigma is a good issue improved
  18. 时间复杂度的计算详解
  19. uvm基础(2)TLM通信,看这一篇就够了
  20. 长径比4.0金纳米棒直径4.2nm|长径比3.4金纳米棒直径10nm 长度34nm|长径比3.9金纳米棒直径10nm 长度39nm

热门文章

  1. gulp教程之gulp-minify-css【gulp-clean-css】
  2. Github Pages建立个人博客
  3. DreamWeaver使用技巧学习心得
  4. 在Mono 2.8上部署ASP.NET MVC 2
  5. blockUI应用到Asp.Net页面时服务器控件(Button等)失效的问题
  6. 【前端工程师手册】JavaScript作用域拾遗
  7. 如何仅花25美元并在3小时内完成ImageNet训练?
  8. Ionic Angular自动捕获错误 配置Angular2.x +
  9. ActiveMq使用笔记
  10. 怎么安装Win10,硬盘安装Win10系统图文教程