GPIO模拟I2C学习任务——驱动学习

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》学习笔记

一、概述

驱动工程师需要掌握的技能:

  • SRAM、Flash、SDRAM、磁盘的读写方式,UART、I2C、USB等设备的接口以及轮询、中断、DMA的原理、PCI总线的工作方式以及CPU的内存管理单元(MMU)等。
  • C语言基础,能灵活地运用C语言的结构体、指针、函数指针及内存动态申请和释放等。
  • Linux内核基础,虽然并不要求工程师对内核各个部分有深入的研究,但至少要明白驱动与内核的接口。尤其是对于块设备、网络设备、Flash设备、串口设备等复杂设备,内核定义的驱动体系结构本身就
    非常复杂。
  • 多任务并发控制和同步的基础,因为在驱动中会大量使用自旋锁、互斥、信号量、等待队列等并发与同步机制

没有系统的驱动:
只要在函数头文件声明输出,然后引用到函数头文件,就可以调用相应函数。

有系统的驱动:
桥接硬件和内核,例如:字符和各种块设备最终统一到read write的形式
优势:处理并发事件,系统调度。

小结:
外设存储器和外设分为三类:

  • 串行顺序进行访问的字符设备
  • 任意块进行访问的块设备
  • 网络设备是以数据包形式访问。应用程序通过C库进行访问

前两者有open()、close()、read()、write()这样的统一接口。
GPIO模拟I2C学习任务——驱动学习

二、硬件基础

字符设备及其驱动:
CPU:

  • 通用处理器多采用soc的芯片设计方法,集成很多的模块。例;location、wifi、usb、内存…,通常采用哈佛结构。
  • DSP:单独的乘法器、对于卷积等信号处理计算有优势
  • ARM+DSP 软件可编程 + 图形呈像
    GPIO模拟I2C学习任务——驱动学习

存储器:
GPIO模拟I2C学习任务——驱动学习

接口:

  • 串口:根据标准决定对应的接口线的数量,常用RS-323C
  • spi:同步串行总线
  • usb:
  • 以太网接口:
  • PCI:

Linux内核及其编程

GPIO模拟I2C学习任务——驱动学习
Linux2.6是个里程碑:

  • 新的进程调度
  • 内核抢占,提高系统实时性,交互性更好
  • 线程模型更改
  • 虚拟内存变化
  • 文件系统改进

未完待续…….