《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()这样的统一接口。
二、硬件基础
字符设备及其驱动:
CPU:
- 通用处理器多采用soc的芯片设计方法,集成很多的模块。例;location、wifi、usb、内存…,通常采用哈佛结构。
- DSP:单独的乘法器、对于卷积等信号处理计算有优势
- ARM+DSP 软件可编程 + 图形呈像
存储器:
接口:
- 串口:根据标准决定对应的接口线的数量,常用RS-323C
- spi:同步串行总线
- usb:
- 以太网接口:
- PCI:
Linux内核及其编程
Linux2.6是个里程碑:
- 新的进程调度
- 内核抢占,提高系统实时性,交互性更好
- 线程模型更改
- 虚拟内存变化
- 文件系统改进
未完待续…….