• 8


    第八章

        讲述了通过寄存器写入特定的值控制蜂鸣器发出尖叫声的实现原理,并实现一个完整的蜂鸣器驱动。

        在完成过程中,首先完成的是linux驱动的代码重用,首先是编译由多个文件组成的linux驱动,并生成ko文件,最后makefile文件。然后进行驱动模块的依赖,即在一个驱动模块里使用另一个驱动模块里的背到处的符号。

        如果编写的驱动程序逻辑上是正确的,那么可以正常安装和卸载,但在某些情况下,可能出现异常情况,这时linux驱动可能无法正常卸载,本书同时也介绍了如何卸载:

    1初始化函数崩溃,使用rmmod bad_driverl卸载。

    2卸载函数被阻塞,使用修改引用计数器或者将原来的卸载函数替换成新的空的函数。

    这两种情况都要获取表示要卸载的linux驱动模块的module结构体指针,当无法获取该指针时,我们的额解决方案是从/proc/kallsyms文件中查找系统分配要给卸载的linux驱动的module结构体首地址,然后将该首地址强行转换成module结构体指针。由于该结构体的地址在内核空间,为了通用用来卸载其他linux驱动的linux驱动需要接受一个模块参数。

    然后进行驱动的正式编写,学会如何通过相应的寄存器来控制蜂鸣器。蜂鸣器的原理是通过脉冲来控制蜂鸣器的打开和停止。pwm驱动由三个文件组成,pwm.c驱动主程序,pwm_fun.h相应头文件,pwm_fun.c包含了打开和停止pwm的两个函数。首先进入/root/drivers/ioctl执行build.h脚本文件编译和上传ioctl,在测试前先要编译和安装pwm驱动,然后进入开发板终端的/data/local打开和停止pwm

    总之,pwmled驱动类似,第八章只是简单演示了如何将一个linux驱动分成多个实现文件,使用了见到那的pwm驱动,掌握pwm常用的代码重用,并介绍了一个强行卸载linux驱动的方法。

  • 相关阅读:
    小程序开发-7-访问api数据与ES6在小程序中的应用
    小程序开发-8-流行页面编码与组件的细节知识
    小程序开发-6-组件数据、事件与属性
    当安装mongodb客户端出现了Failed to load list of databases
    对bluebird的理解
    百度地图实现案例
    iScroll实现下拉刷新上拉加载
    nodejs环境变量配置
    检测Python程序本身是否已经在运行
    用Python快速找到出现次数最多的数据
  • 原文地址:https://www.cnblogs.com/liang0202/p/5640110.html
Copyright © 2020-2023  润新知