• 驱动应该怎么学


    什么是驱动

    理解驱动的概念
    (1)驱动一词的字面意思
    (2)物理上的驱动
    (3)硬件中的驱动
    (4)linux内核驱动。软件层面的驱动广义上就是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。(本质上是电力提供了动力,而驱动程序提供了操作逻辑方法)
    狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法部分代码。

    linux体系架构
    (1)分层思想
    (2)驱动的上面是系统调用API
    (3)驱动的下面是硬件
    (4)驱动自己本身也是分层的


    模块化设计
    微内核和宏内核
    (1)宏内核(又称为单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。
    (2)微内核:功能被划分成独立的过程,过程间通过IPC进行通信。模块化程度高,一个服务失效不会影响另外一个服务。典型如windows
    (3)linux:本质上是宏内核,但是又吸收了微内核的模块化特性,提现在2个层面

    静态模块化:在编译时实现可裁剪,特征是想要功能裁剪改变必须重新编译

    动态模块化:zImage可以不重新编译烧录,甚至可以不关机重启就实现模块的安装和卸载。


    linux设备驱动分类

    驱动分类
    (1)分3类:字符设备驱动、块设备驱动、网络设备驱动
    (2)分类原则:设备本身读写操作的特征差异

    三类驱动程序详细对比分析
    (1)字符设备,准确的说应该叫“字节设备”,软件操作设备时是以字节为单位进行的。典型的如LCD、串口、LED、蜂鸣器、触摸屏······
    (2)块设备,块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD····
    (3)网络设备,网络设备是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作。

    为什么字符设备驱动最重要
    (1)常见大量设备都属于字符设备
    (2)举例说明非标准类型字符设备驱动


    驱动程序的安全性要求
    驱动是内核的一部分
    (1)驱动已经成为内核中最庞大的组成部分
    (2)内核会直接以函数调用的方式调用驱动代码
    (3)驱动的动态安装和卸载都会“更改”内核

    驱动对内核的影响
    (1)驱动程序崩溃甚至会导致内核崩溃
    (2)驱动的效率会影响内核的整体效率
    (3)驱动的漏洞会造成内核安全漏洞

    常见驱动安全性问题
    (1)未初始化指针
    (2)恶意用户程序
    (3)缓冲区溢出
    (4)竞争状态

    驱动应该这么学
    先学好C语言
    掌握相关预备知识
    (1)硬件操作方面
    (2)应用层API

    驱动学习阶段
    (1)注重实践,一步一步写驱动
    (2)框架思维,多考虑整体和上下层
    (3)先通过简单设备学linux驱动框架
    (4)学会总结、记录,这会有助于理解

  • 相关阅读:
    【Vue3+Ts】—— webpack学习笔记(三)Plugin插件
    In voluptate magnam blanditiis beatae.Parfaitement simple davantage frais.
    MySQL常见的性能优化方法技巧以及示例
    向npm发包
    Zookeeper: 配置参数解读
    【你不知道的javascript上】4. 第五章 作用域闭包、模块机制、单例模式
    Nuxt - 页面缓存(从列表进入详情页返回后保持原来位置的搜索条件、结果数据、浏览器滚动条位置等)
    linux系统配置之单一网卡配置多个不同网段IP(centos)
    【Python】函数式编程
    spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题
  • 原文地址:https://blog.csdn.net/qq_28576837/article/details/125394444