2.1 Linux操作系统

Linux操作系统由系统的启动、进程调度、虚拟内存管理器、文件系统、设备驱动程序等多个组成

2.2Linux内核

设备驱动程序中使用的函数也用在内核上,并且影响着内核,因此离开内核就无法制作设备驱动程序。

2.2.1 Linux的历史

省略

2.2.2linux内核的功能

内核是有效管理系统资源的资源管理者

处理器管理     通过管理处理器,使得处理器满足操作系统的处理要求,使其有效分担和执行各个进程中必要的处理器功能

进程管理        进程是程序执行的最小单位,内核通过进程调度器负责进程的创建、撤销,并管理进程和外部环境的交互

内存管理        系统的内存是最核心的部分,。内存管理是决定系统性能的重要要素,提供虚拟地址空间的方式,使各个进程在独立的空间上执行任务。虚拟内存以管理为基础,结合存储器可提供大于实际物理内存的内存空间

文件系统管理   Linux内核利用虚拟文件系统(VFS),支持当前的大部分文件系统类型

设备的控制      应用程序必须通过硬件才能与用户交互,处PCU和内存外,应用程序必须得到硬件的支持才能够完成各种操作。设备驱动程序负责与硬件相关的各种操作,而设备驱动程序则是内核必须实现的功能之一

网络管理

2.2.3Linux内核的特点

特点归纳如下:

单一的(Monolithic)内核

非抢占型和抢占型(2.6内核)

虚拟内存系统

支持无MMU    2.6内核支持没有MMU(存储器管理单元)的系统

虚拟文件系统(VFS)         linux中可以使用ext2甚至日志文件系统jfs的多种文件系统,也可以处理在windows中运行的NTFS文件系统和DOS文件系统

利用模块扩展内核

内核线程

支持多线程

支持多处理器

强大的网络功能

GPL许可

2.2.4 内核源代码结构

省略

2.3设备驱动程序

2.3.1 向内核请求资源处理的方法

应用程序向内核发出资源处理请求的方法大致分为两大类。第一是系统调用方式,第二是利用文件输出输入方式使用设备驱动程序的方法

1.系统调用方式

所谓系统调用方式,指制定系统控制所需的调用规则后,利用软件中断服务功能,使内核执行应用程序发出的处理请求

2.文件形态的设备驱动程序

以文件输入输出函数控制硬件。向表示硬件的设备文件指定应用程序的输入输出,从而调用内核内部链接设备文件的设备驱动程序服务程序,处理完请求再把控制流交还给应用程序

2.3.2模块和设备文件

1.模块

模块——在内核被启动后运行的状态下即动态加载或清除设备驱动程序

只有模块方式才能支持连接在PCI、USB、PCMCIA上的设备PNP功能。只有带MMU的CPU才能支持模块方式,并且内核的版本要一致。

2.设备文件

普通文件的目的在于保存数据,而设备文件的目的在于提供系统或硬件的信息。此类设备文件上保存的信息包括3种类型,分别为设备类型信息和主设备号和次设备号。

应用程序以open()函数打开设备文件,内核在相应的设备文件上得到主设备号,并寻找相应设备号所处理的设备驱动程序。也有不存在设备文件的设备驱动程序,包括网络设备驱动程序。

2.3.3  设备驱动程序的类型

设备驱动程序处理各个硬件的方式与硬件的类型有关。

Linux中使用的设备驱动程序大体上包括字符结构、块结构和网络结构:

字符   控制长短不一致字符序列的设备驱动程序,应用程序直接呼叫的、没有缓存的设备驱动程序

块      通过一定大小的缓存处理数据的设备,由内核内部的文件系统进行管理,没有内部缓存的设备驱动程序

网络   与网络层连接的设备驱动程序

1.字符设备驱动程序

应用程序中使用open()、close()、read()、write()等文件处理函数,并且以普通文件方式处理设备文件,从而控制硬件。常见的文件结构为流(stream),与字符设备驱动程序连接的设备文件也是流。即利用文件节点指定设备文件的特定处理位置,并且可以读取设备的处理位置

2.块设备驱动程序

除了特殊情况(分区),应用程序中不直接使用块设备驱动程序。块设备驱动程序是支持文件系统的结构,以文件系统实现与应用策划给你写的连接

3.网络涉笔驱动程序

linux内核与设备驱动,第二章 Linux内核与设备驱动程序相关推荐

  1. 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  2. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十三章Linux设备树(一)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 前面章节中我们多次提到"设备树 ...

  3. 【正点原子Linux连载】第六十一章 Linux I2C驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  4. Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)

    文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...

  5. 第二章Linux 基本命令操作

    第二章Linux 基本命令操作 本节所讲内容: 2.1 Linux 终端介绍.Shell 提示符.Bash Shell基本语法: 2.2 基本命令操作: 2.3 系统时间管理: 2.4 帮助命令使用: ...

  6. linux 字符设备驱动测试,一个简单字符型设备驱动及其测试

    驱动对一些人来说很难,而对一些人来说很容易.窃以为,理解简单设备驱动模型不难,深入理解并与Linux内核设计联系到一起需要花费时间.对于移植者来说,如何将自己自定义的模块天衣无缝放到内核中,是比较重要 ...

  7. 第二章Linux基础之共享文件设置

    第二章Linux基础之共享文件设置 一.Linux分区设置 Linux至少要分三个区,即根分区.boot分区和swap分区. 1.根分区 ​ 空闲的磁盘空间全部给根分区即可. 2.swap分区 ​ s ...

  8. linux 设计一个程序,要求打开文件 pass 所有者,第二章 Linux 文件操作

    文档均来自网络,如有侵权请联系我删除文档 第二章 Linux 文件操作(4学时) 实验一文件属性和无缓冲I/O 实验目的 1.熟悉Linux文件系统属性控制 2.掌握不带缓存的文件I/O程序设计方法 ...

  9. [设备驱动] 最简单的内核设备驱动--字符驱动

    [设备驱动] 最简单的内核设备驱动--字符驱动  概要: x86平台上(linux-2.6.34.14;Linux debian 3.2.0-3-686-pae)编写一个256字节的字符驱动程序.在/ ...

最新文章

  1. 牛顿求平方根法(输入是double,输出也是double)
  2. macsv服务器状态,和利时macs问题(启动服务器无法读出控制器的点名)
  3. STM32F4 HAL库开发 -- 工程模板解读
  4. 小程序 setData 学问多
  5. 浅谈游戏视觉包装中的“情感化设计”
  6. WebRTC对你意味着什么
  7. 【综合】JS跨域方案JSONP与CORS跨域
  8. mysql数据库命令_新手入门MYSQL数据库命令大全
  9. 哪种css实现方式优势更突出_css和div的优势有哪些?
  10. Apache配置问题
  11. 个税服务器系统繁忙,2021个人所得税系统异常进不去怎么办?系统繁忙请稍后再试怎么回事...
  12. 神策分析 iOS SDK 全埋点解析之启动与退出 | 数据采集
  13. 苹果怎样添加无线网络连接服务器,教你iphone8 icloud连接服务器时出错怎么办及苹果手机如何设置成指定名称的WiFi热点...
  14. 给皮肤贴个“创可贴”就能检测身体健康信号,如何?|技术前沿洞察
  15. android恶意积分墙代码,传统积分墙的忧虑:微信积分墙刷榜优化分析
  16. Android 开发推荐书籍
  17. vue 重置vuex数据
  18. Linux 运维常见英文单词
  19. 影响中国软件开发的20人-- 开国元勋篇
  20. 人生的一道窄门,教育

热门文章

  1. python ‘%r‘或者‘{!r}‘的意思
  2. Python中:re的match和search区别?
  3. Django中自定义实现RESTful API
  4. 如何制作python代码_如何使用50行Python代码制作一个计算器
  5. 【opencv4】opencv教程 C++ 4、Mat对象(深拷贝:clone()、copyTo(),create()创建图片,zeros()、eye()初始化空白图像,Scalar()创建向量)
  6. C语言多线程教程(pthread)(线程创建pthread_t,指定线程run方法pthread_create,加mutex锁,解锁,伪共享 false sharing【假共享】)
  7. x86汇编指令集大全
  8. ubuntu 将 python 设定为python3, pip设定为pip3
  9. liunx系统中的盘符能修改嘛_装系统教程!如何从U盘启动(中)!小白也能变装机大神!...
  10. Java设计模式-外观模式