• Linux设备驱动


    Linux设备驱动最通俗的解释就是“驱使硬件设备行动”。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。驱动开发涉及重点与难点:

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

    2. 环境搭建

    这个专题研究基于Linux2.6,整个环境配套搭建过程大概如下

    1.  uboot编译,具体见之前的专题
    2.  linux内核编译,具体见之前专题
    3.  文件系统制作,具体见之前专题

    文件系统制作中已经具体讲解了如何在进行系统SND搭建,搭建以后可以直接通过网络方式将开发测试的文件通过网络传递到测试单板而不需要反复的从新编译内核。正常启动了文件系统以后将需要测试的驱动文件拷贝到共享目录中,在开发版中一般共享在/mnt目录,在这个目录中查看相关的文件然后拷贝到开发板根目录,之后就可以insmod安装和测试了。需要注意的是如果文件系统是最简答的文件系统,可能驱动代码中写了相关的设备节点创建方式,但系统安装以后却没有办法真正常见节点,这个时候需要mknod方式来手动创建设备节点进行测试。

  • 相关阅读:
    Java应用生产Full GC或者OOM问题如何定位
    采空区沉降监测系统解决方案
    改进的萤火虫优化算法(Matlab代码实现)
    JUC线程&线程池和锁面试题
    《教练型管理者》读书笔记-第3篇 【教练流程】
    一级造价工程师(安装)- 计量笔记 - 第六章第三节通信设备及线路工程
    windows && es Install
    Springboot+网上眼镜商场 毕业设计-附源码241659
    学内核之十二:从slab内存管理想到的
    【MySQL必知必会】 表的优化 | 充分利用系统资源
  • 原文地址:https://blog.csdn.net/u012294613/article/details/126577973