Linux 驱动开发 一:概述

一、Linux 驱动开发思维

Linux 驱动开发和裸机开发区别主要是思维差异

1、Linux 驱动开发直接操作寄存器不现实(一般比较复杂,自己研究寄存器会很困难)。

2、根据 Linux 下的各种驱动框架进行开发。核心:熟悉、掌握、使用 Linux 各种驱动框架。

3、驱动最终表现就是 /dev/xxx 文件(基本操作:打开、关闭、读写、……)。

4、新的内核支持设备树,这是一个 .dts 文件,此文件描述开发板的设备信息。

二、Linux 驱动分类

1、字符设备

只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序进行。字符设备是面向的设备,常见的字符设备如鼠标、键盘、串口、控制台、LED等。

注:字符设备是最常见、最多的。

2、块设备

指可以从设备的任意位置读取一定长度的数据设备。块设备如硬盘、磁盘、U盘和SD卡等存储设备。

3、网络设备

网络设备比较特殊,不在是对文件进行操作,而是由专门的网络接口来实现。应用程序不能直接访问网络设备驱动程序。在/dev目录下也没有文件来表示网络设备。

三、应用程序和驱动的交互原理

1、驱动的本质

控制设备。包括从设备中获取数据、控制设备状态等。获取到数据会提交给应用程序,应用程序使用这些数据进行相应处理。

2、用户空间和内核空间

1、Linux 下用户态和内核态切换方式

  • 系统调用
  • 中断
  • 异常

2、操作系统主要功能

  • 进程管理
  • 内存管理
  • 设备管理(包括IO、网络)
  • 文件管理

3、应用程序调用

Linux 驱动开发 一:概述_第1张图片
Linux 驱动开发 一:概述_第2张图片

你可能感兴趣的:(Linux驱动开发,linux,驱动)