Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78373
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-29 10:17
文章分类
文章存档

2016年(1)

2015年(21)

我的朋友

分类: 嵌入式

2015-08-12 20:35:18

    最近一直在看JONATHAN的《linux设备驱动程序》,开始看还觉得可以跟的上作者思路,后面感觉越发吃力。现在想想主要是自己不清楚设备驱动程序的功能作用,导致对驱动程序片面性的界定。想来现在需要跟着作者的思路,才能理清自己的思路。

    首先介绍linux设备驱动程序的目录:
    第一章:设备驱动程序简介
    第二章:构造和运行模块
    第三章:字符设备驱动程序
    第四章:调试技术
    第五章:并发和竞态
    第六章:高级字符驱动程序操作
    第七章:时间,延迟及延缓操作
    第八章:分配内存
    第九章:与硬件通信
    第十章:中断处理
    第十一章:内核的数据类型
    第十二章:PCI驱动程序
    第十三章:USB驱动程序
    第十四章:Linux设备模型
    第十五章:内存映射和DMA
    第十六章:块设备驱动程序
    第十七章:网络驱动程序
    第十八章:TTY驱动程序
    
    从目录可以看出,从第二章到第十一章作者除了写关于字符设备的驱动程序之外,并没有立刻对其他设备的驱动程序做分析。但是这些章节的内容却是非常重要。

    第二章提供的是所有模块共享的基本代码,这些技巧是编写任何模块化驱动程序的基础。
        大多数小规模及中规模应用程序是从头到尾执行单个任务,而模块却只是预先注册自己,以便服务于将来的某个请求,然后它的初始化函数就立即结束。模块的初始化函数的任务就是为以后调用模块函数预先做准备。----------------模块的概念       
      
          每当应用程序执行系统调用或者被硬件中断挂起,Unix将执行模式从用户空间切换到内核空间。执行系统调用的内核代码运行在进程上下文中,它代表调用进程执行操作,因此可以访问进程地址空间的所有数据。而处理硬件中断的内核代码和进程是异步的,与任何特定的进程无关。模块化代码在内核空间中运行,用于扩展内核的功能。通常,一个驱动程序要执行先前讲述过的两类任务模块中的某些函数作为系统调用的一部分而执行,而其他函数则负责中断处理。--------------------------------------用户空间与内核空间
       
         内核编程必须时刻考虑到并发问题。Linux系统通常运行几个并发进程,并且可能有多个进程同时使用我们的驱动程序。其次大多数设备能够中断处理器,而中断处理程序是异步的,且可能在驱动程序正试图处理其他任务时被调用。Linux还可以运行在SMP系统上,意味着可能不止一个CPU运行我们的驱动程序。------------------------------------------------------内核中的并发

        第二章还有一个hello world示例,意在介绍如何将模块源代码编译成能够装载到内核中的可执行模块
        第二章在讲述构造和运行模块的时候,逐渐向我们提出一些需要注意的问题,比如注册,并发和竞态,内核进程异步,硬件中断。这些问题都必须要很好的解决,否则很容易造成系统问题。
        

        
阅读(1232) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~