linux设备驱动开发

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与其他系统间的驱动移植)
 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值