1.驱动开发基础
设备驱动开发硬件基础
处理器
按应用领域分类
通用处理器
数字信号处理器(DSP)
专用处理器(ASP)及ASIC
按体系结构分类
冯诺依曼结构
哈佛结构
按指令集分类
RISC(Complex instruction set computer 精简指令集计算机)
CISC(Reduced instruction set computer 复杂指令集计算机)
存储器
非易失性存储器(NVM)
ROM
ROM
PROM
EPROM
E2PROM
Flash
NOR Flash
NAND Flash
光、磁介质存储器
掉电丢失的RAM
SRAM
DRAM(SDRAM、DDR、SDRAM等)
特定应用RAM一般采用SRAM
NVRAM
DPRAM
CAM
FIFO
...
接口和总线
串口
RS-232
RS-422
RS-485
I2C总线
USB
以太网接口
ISA总线
PCI和cPCI
CPLD和FPGA
原理图分析
硬件时序图分析
仪器仪表使用
万用表
示波器
逻辑分析仪
linux内核及内核开发基础
内核发展与演变
UNIX操作系统
Minix操作系统
GNU计划
POSIX标准
Internet
内核的特点
新的调整度
内核抢占
改进的线程模型
虚拟内存的变化
文件系统
音频
总线
电源管理
联网和IPSec
用户层界面
内核的组成
linux内核源代码目录结构(基于linux2.6.15.5)
arch:包含和硬件体系结构相关的代码。每种平台占一个相应的目录。如i386、ARM、PowerPC、MIPS等。
block:块设备驱动程序I/O调度。
crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
Documentation:内核各部分的通用解释和注释。
drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。
fs:支持的各种文件系统,如EXT、FAT、NTFS、JFFS2等。
include:头文件,与系统相关的头文件被放置在include/linux子目录下。
init:内核初始化代码
ipc:进程间通信代码
kernel:内核最核心部分,包括进程调度,定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。
lib:库文件代码。
mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下。
net:网络相关代码,实现了各种常见的网络协议。
scripts:包含用于配置内核的脚本文件。
security:主要包含SELinux模块。
sound:ALSA、OSS音频设备的驱动核心代码和常用设备驱动。
usr:实现了用于打包和压缩的cpio等。
linux内核的组成部分
进程调度
内存管理
虚拟文件系统
网络接口
进程通信
linux内核空间与用户空间
内核的编译与引导
linux内核编译
make mrproper:该命令确保源码目录下没有不正确的.o文件以及文件的互相依赖。对于刚下载的完整的源程序包,本步可以省略。
配置内核
make config(基于文本的最为传统的配置界面,不推荐使用)
make menuconfig(基于文本菜单的配置界面)
make xconfig(要求QT被安装)
make gconfig(要求GTK+被安装)
linux内核引导
X86 PC上的linux内核引导流程
BIOS -> Bootloader第一阶段(MBR) -> Bootloader第二阶段(LILO、GRUB等) -> 内核 -> 运行init进程(用户空间)
当bzImage(用于i386映像)被调用时,函数调用流程
start() /arch/i386/boot/head.S 基本的硬件设置 >
startup_32() /arch/i386/boot/compress/head.S 设置一个基本的运行环境(如堆栈)后清除BSS段 >
decompress_kernel() /arch/i386/boot/compress/misc.c 解压缩内核到内存 >
startup_32() /arch/i386/kernel/head.S (清除程序或进程0)会初始化页表,启用内存分页机制 >
start_kernel() /init/main.c 调用一系列初始化函数来设置中断,执行进一步内存配置 >
cpu_idle() /init/main.c
linux下的C编程
linux程序命名习惯
GNU C与ANSI C
GNU C对标准C进行一系列扩展,以增强标准C的功能
2.字符设备驱动与驱动开发理论
linux内核模块
linux文件系统与设备文件系统
linux字符设备驱动
linux设备驱动中的并发控制
linux设备驱动中的阻塞与非阻塞I/O
linux设备驱动中的异步通知和异步I/O
中断与时钟
内存与I/O访问
linux字符设备驱动综合实例(按键、触摸屏、DSP HPI、NVRAM、看门狗)
3.复杂设备驱动
linux块设备驱动
linux终端设备驱动
linuxI2C核心、总线与设备驱动
linux网络设备驱动
linux音频设备驱动(OSS、ALSA)
linuxLCD设备驱动
linuxFlash设备驱动
linuxUSB主机控制器与设备驱动
linuxPCI设备驱动
4.调试与移植
linux设备驱动的调试(开发环境、GDB、内核调试方法(printk、/proc、Oops、strace、kgdb、仿真器))
linux设备驱动的移植(可移植的设备驱动、巧借类似代码、2.4/2.6内核驱动移植、linux与其他系统间的驱动移植)
linux设备驱动开发
于 2023-11-27 16:49:34 首次发布