驱动初识==Linux驱动开发1

一、什么是驱动

1、理解驱动的概念

  • (1)驱动一词的字面意义、物理上的驱动、硬件中的驱动。
  • (2)Linux 内核驱动:即软件层面上的驱动,指的是这段代码操作了硬件使其动起来,所以叫硬件的驱动程序(本质上是电力提供了动力,而驱动程序提供了操作的逻辑方法)。

2、Linux 体系架构

  • (1)分层思想:大致可以分为两层,上层是应用,下层是操作系统,驱动、文件系统等程 序包含于 OS 中,上层应用通过 API 调用 OS 中的驱动程序。
  • (2)驱动上面是系统调用 API,下面是硬件。
  • (3)驱动自己本身也是分层的
二、模块化设计

1、微内核和宏内核

  • (1)宏内核:又称为单内核,将内核从总体上作为一个大过程实现,运行在一个独立的地 址空间,所有内核服务都在一个地址空间运行,相互之间直接调用函数,简 单高效。
  • (2)微内核:各个功能被划分成独立的进程,进程间通过 IPC 通信,模块化程度高,一个 服务失效不会影响另一个服务,典型的如 Windows。

2、Linux 本质上是宏内核,但是又吸收了微内核的模块化特性,体现在两个层面

  • (1)静态模块化:在编译时实现可裁减,特征是想要裁剪功能必须重新编译。
  • (2)动态模块化:zImage 可以不重新编译烧录,甚至可以不关机重启就能实现模块的安装 和卸载。==前提在系统启动后,你得手动挂载
三、Linux 设备驱动分类

1、驱动分类

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

2、三类驱动程序详细对比分析

  • (1)字符设备:准确的说应该叫“字节设备”,即软件操作设备时是以字节为单位进行的, 典型的有 LCD、键盘、鼠标、串口、LED、蜂鸣器、触摸屏。
  • (2)块设备:软件操作时是以块(多个字节组成块)为单位进行的,设备的块大小是设备 本身定义好的,软件无法修改,不同设备的块大小不一样。常见的块设备都 是存储类设备:如硬盘、U 盘、光盘、NandFlash、iNand、SD 卡。
  • (3)网络设备:是专为网卡设计的驱动模型,Linux 中的网络设备驱动主要是为了支持 API 中 socket 相关的函数。

3、为什么字符设备最重要

  • (1)常见的大量设备都属于字符设备。
  • (2)除了以上列举的标准字符设备,通常还有一些非标准类型字符设备驱动,如将一块产 生特定波形的 FPGA 当做一个字符设备来控制的驱动程序。
四、驱动程序的安全性要求

1、驱动程序是内核的一部分

  • (1)驱动程序已经成为内核中最庞大的组成部分,且内核会直接以调用函数的方式调用驱动程序。
  • (2)驱动程序的动态安装和卸载都会“更改”内核

2、驱动对内核的影响

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

3、常见的驱动安全性问题

  • (1)未初始化指针。
  • (2)恶意用户程序。
  • (3)缓冲区溢出。
  • (4)竞争状态。
五、驱动应该怎么学

1.先学好 C 语言

2.掌握相关预备知识

  • (1)硬件操作相关知识
  • (2)应用层 API

3、驱动学习阶段

  • (1)注重实践,一步一步写驱动。
  • (2)框架思维,多考虑整体和上下层。
  • (3)先通过简单设备学习 Linux 驱动框架。
  • (4)学会总结、记录。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值