《Linux Device Drivers》第一章 设备驱动程序简介——note

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

1 引言

Linux内核黑客习惯深入Linux内核代码,找到精神食粮,并有能力增加某个新功能或者优化某个子系统的性能。


2 设备驱动程序的定义

驱动程序就是使硬件工作的一种特殊软件,它运行在操作系统的内核空间(虚拟地址0xC0000000到0xFFFFFFFF),封装硬件细节,服务于系统调用。


 3 机制和策略

    3.1需要提供什么功能(机制)如何使用这些功能(策略)。

机制和策略的区分是其中一个在Unix 设计背后的最好观念. 大部分的编程问题 其实可以划分为两部分:"提供什么能力"(机制) 和 "如何使用这些能力"(策略). 如果这两方面由程序的不同部分来表达, 或者甚至由不同的程序共同表达, 软件包是非常容易开发和适应特殊的需求.

    3.2不带策略的驱动程序包括一些典型的特征

   (1)同时支持同步和异步操作

   (2)驱动程序能够被多次打开

   (3)充分利用硬件特性


 4 内核功能划分

4.1进程管理

内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出). 不同进程间通讯(通过信号, 管道,或者进程间通讯原语)对整个系统功能 来说是基本的, 也由内核处理. 另外, 调度器,控制进程如何共享 CPU, 是进程管理的一部分. 更通常地, 内核的进程管理活动实现了多个进程在 一个单个或者几个 CPU 之上的抽象.

 4.2内存管理

计算机的内存是主要的资源,处理它所用的策略对系统性能是至关重要的. 内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间.内核的不同部分与内存管理子系统通过一套函数调用交互, 从简单的malloc/free 对到更多更复杂的功能.

 4.3文件系统

Unix 在很大程度上基于文件系统的概念; 几乎 Unix 中的任何东西都可 看作一个文件. 内核在非结构化的硬件之上建立了一个结构化的文件系统, 结果是文件的抽象非常多地在整个系统中应用.另外, Linux 支持多个文 件系统类型, 就是说, 物理介质上不同的数据组织方式. 例如, 磁盘可被 格式化成标准 Linux 的 ext3 文件系统, 普遍使用的FAT 文件系统, 或 者其他几个文件系统.

  4.4设备控制

几乎每个系统操作最终都映射到一个物理设备上.除了处理器, 内存和非 常少的别的实体之外, 全部中的任何设备控制操作都由特定于要寻址的设 备相关的代码来进行. 这些代码称为设备驱动.内核中必须嵌入系统中出 现的每个外设的驱动, 从硬盘驱动到键盘和磁带驱动器.内核功能的这个 方面是本书中的我们主要感兴趣的地方.

  4.5网络功能

网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件.报文在某一个进程接手之前必须被收集, 识 别, 分发. 系统负责在程序和网络接口之间递送数据报文, 它必须根据程 序的网络活动来控制程序的执行. 另外, 所有的路由和地址解析问题都在 内核中实现.

   

5可装载模块

(1)内核提供的特性可在运行时进行扩展

(2)运行时添加到内核中的代码被称为“模块”

(3)每个模块由目标代码组成

(4)insmod, rmmod

 

  6 设备和模块的分类

    6.1 字符设备

(1)字符设备是个能够像字节流一样被访问的设备

(2)至少实现open、close、read和write系统调用

(3)字符终端(/dev/console)和串口(/dev/ttys0)

   6.2块设备

(1)通过/dev目录下的文件系统节点来访问

(2)传输一个或多个完整的块,每块通常是512字节

  6.3 网络接口

(1)任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备

(2)接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口

  6.4文件系统类型是个软件驱动程序,文件系统模块必须实现访问目录和文件的最底层系统 调用


7安全问题

(1)留心影响全局资 源的设备操作( 例如设置一条中断线 )

(2)缓冲区溢出

(3)小心对待来自用户空间的内存

(4)小心使用第三方获得的软件(已编译)


一文看懂Linux内核Device和Driver匹配原理 Linux内核Device和Driver匹配过程详解 阅读详情

相关推荐

Linux下的驱动开发一

模块许可证声明(MODULE_LICENSE):指定模块的许可证类型,通常为"GPL"(GNU General Public License),表明模块可以与内核兼容,否则内核可能拒绝加载非GPL的模块。模块初始化函数(module_init):这是内核加载模块时调用的函数,用来初始化模块,注册设备驱动或其他功能。通常通过module_init()宏指定初始化函数。模块退出函数(module_exit):这是在卸载模块时调用的函数,用于清理资源、注销设备驱动等。

m0_51830537的博客 1657

Linux Device Drivers / Linux 设备驱动程序(第三版)

Linux驱动基础知识,强烈推荐阅读Linux Device Driver / Linux 设备驱动程序(第三版),附件含中英文版本。

Linux Device Drivers》第十三章 USB驱动程序——note

1. USB主机 在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。 因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linu

Linux/Android/AI 39万+

linux设备驱动程序开发 第四版 源码

经典linux驱动程序开发 第四版的配套代码可以下载了,如果有什么问题,欢迎反馈

Linux Device Drivers设备驱动程序)_转自老刘的blog

Chapter 8Device Drivers设备驱动程序) 操作系统的目标之一是向用户掩盖系统硬件设备的特殊性。例如,虚拟文件系统呈现给用户一个统一的文件系统视图,而和底层的物理设备无关。本章描述Linux内核是如何管理系统中的物理设备的。CPU不是系统中唯一的智能设备,每一个物理设备都由它自己的硬件控制器。键盘、鼠标和串行口由SuperIO芯片控制,IDE磁盘由IDE控制器控制,SCSI磁盘

橙色温暖的专栏 3624

Linux driver(一)

Linux driver

xy12138201611的博客 1388

Linux Device Drivers》第四章 调试技术——note

内核中和调试相关的选项 CONFIG_DEBUG_KERNELCONFIG_DEBUG_SLABCONFIG_DEBUG_PAGEALLOCCONFIG_DEBUG_SPINLOCKCONFIG_DEBUG_SPINLOCK_SLEEPCONFIG_INIT_DEBUGCONFIG_DEBUG_INFOCONFIG_MAGIC_SYSRQCONFIG_DEBUG_STACKOVERFLOWCONF

Linux/Android/AI 39万+

Linux Device Drivers》第三章 字符设备驱动程序——note

主设备号和次设备号 那些名称被称为特殊文件、设备文件,或者简单称之为文件系统树的节点,它们通常位于/dev目录通常而言,主设备号标识设备对应的驱动程序一个主设备号对应一个驱动程序设备编号的内部表达 dev_t()dev_t是一个32位的数,12位表示主设备号,其余20位表示次设备号 MAJOR(dev_t dev);MINOR(dev_t dev);MKDEV(int major

Linux/Android/AI 39万+

Linux Device Drivers》第十二章 PCI驱动程序——note

简介 本章给出一个高层总线架构的综述讨论重点是用于访问Peripheral Component Interconnect(PCI,外围设备互联)外设的内核函数PCI总线是内核中得到最好支持的总线本章主要介绍PCI驱动程序如果寻找其硬件和获得对它的访问本章也会介绍ISA总线 PCI接口 PCI是一组完整的规范,定义了计算机的各个不同部分之间应该如何交互PCI规范涵盖了与计算机接口相关的

Linux/Android/AI 39万+

linux device drivers 中文版

个人认为是一本写的比较好的linux驱动书籍,作为入门和参考都比较好。书籍先从整体介绍了linux驱动基本知识,然后对每个知识点做了详细阐述,循序渐进,现免费提供给大家,共享是美德!

Linux Device Drivers

本书详细指导如何编写Linux设备驱动程序

Linux Device Drivers》第六章 高级字符驱动程序操作——note

ioctl 支持的操作,例如 简单数据传输控制动作,例如用户空间发起弹出介质动作反馈硬件的状态,例如报告错误信息参数配置,例如改变波特率执行自破坏 用户空间的ioctl方法原型:int ioctl(int fd, unsigned long cmd, …);每个ioctl命令就是一个独立的系统调用,而且是非公开的驱动程序的ioctl方法原型:int (*ioctl) (struct

Linux/Android/AI 38万+

Linux 设备驱动学习笔记 - 高级字符驱动操作篇 - Note.6[在一个设备文件上的存取控制]

Linux 设备驱动学习笔记 - 高级字符驱动操作篇 - Note.6[在一个设备文件上的存取控制]

qq_39209508的博客 416

Linux Device Drivers-第五章 并发和竞争情况

结合LinuxDeviceDriver书籍内容,总结内核中发生并发和竞争时,使用到的信号量和各种锁机制的原理及API。

“Struggle”的博客 938

Linux 设备驱动学习笔记 - 高级字符驱动操作篇 - Note.3[ioctl 接口]

高级字符驱动操作

qq_39209508的博客 1033
上一篇: 板级支持包 BSP
下一篇: 《Linux Device Drivers》第二章 构造和运行模块——note
pingfengluo
博客等级 码龄14年 260粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值