zoukankan      html  css  js  c++  java
  • 第三次月考

    第八章 让开发板发出声音:蜂鸣器驱动

    一、linux代码驱动的代码重用:linux驱动的代码重用有很多的方法,比如说用c程序的方式,将要重用的代码放到其他文件中但是要在头文件中声明。还可以采用另外一种动态重用的方式就是一个linux驱动可以使用另一个驱动的内容,如函数等。编译是由多个文件组成的linux驱动,如果linux驱动复杂,就需要多个linux文件来存放不同的功能,这样有利于分类和管理。

    二、强行卸载linux驱动:如果编写的linux驱动程序在逻辑上是正确的,那么是可以正常装载和卸载的,在有些情况下就不能正常装载和卸载,Linux驱动无法卸载的情况:

    情况一:初始化函数崩溃p

    情况二:卸载函数被阻塞

    三、蜂鸣器(pwm)驱动:蜂鸣器与LED一样也是开发板自带的简单的硬件,若打开蜂鸣器开发板会发出想蜂鸣一样的叫声,关闭就会停止尖叫。蜂鸣器驱动的原理:pwm基本原理通过脉冲来控制蜂鸣器的打开和关闭。

    测试蜂鸣器驱动:pwm_fun.c则包含了打开和停止pwm的两个函数,从Makefile中可以看出,编译器首先将pwm.c和pwm_fun.c文件编译成pwm.o和pwm_fun.o,然后再将两个.o文件连接成pwm_driver.o,最后生成pwm_driver.ko,然后执行build.sh脚本文件,然后就编译成功了。

    输入如下命令:

    ./ioctl /dev/pwm_dev 1 0

    ./ioctl /dev/pwm_dev 0 0

    由于命令必须要求输入I/O命令的参数,而PWM驱动未使用I/O命令参数,所以ioctl最后一个命令行可以任意输入参数。如果最后显示如下信息并且蜂鸣器发出尖叫则说明测试成功!

    第九章 硬件抽象层:HAL

    HAL(Handerware Abstraction Layer,硬件抽象层)是建立在linux程序上的一套程序库,这套程序库并不属于内核,而是属于内核之上的应用层。

    一、为什么要在Android中加入HAL:在linux驱动中一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码而言,并没有秘密,这都是调用linux内核的标准函数进行的标准操作。Google为android加入HAL其主要目的在于:

    统一硬件的调用接口;

    解决了GPL版权问题;‘

    针对一些特殊要求;

    二、andriod HAL架构

    在Andriod系统中使用程序库,条用位于内核空间的Linux驱动,然后Andriod应用程序。

    HAL的基本原理是在android系统中使用程序库调用内核空间的linux驱动。

    三、 为LED增加HAL:将所有业务逻辑从LED驱动移植到HAL模块,而LED驱动模块只保留读写寄存器的工程能。加入HAL会使组成linux驱动的一整套library更加独立,更加容易维护。编写一款支持HAL的LINUX程序驱动程序的步骤:1.Linux驱动程序;2.编写HAL Library;3.编写Service Library。编写HAL模块的步骤:1.定义结构体和宏;2.编写HAL模块的open函数;3.定义hw_module_methods_t结构体变量;4.定义HAL_MODULE_INFO_SYM变量;5.编写HAL模块的close函数;6.编写控制LED的函数。

    第十章 嵌入式linux的调试技术

    对于复杂的linux驱动及HAL等程序库,需要使用各种方法对其进行调试

    一、打印内核调试信息:printK:printK函数与printf函数类似,只不过printK函数运行在内核空间,printf函数运行在用户空间。也就是说像linux驱动这样的linux内核程序只能使用printK函数输出调试信息。

    二、防止printK函数降低linux驱动性能:虽然printK函数可以很方便的将消息写入日志文件或控制台,大那是大量使用printK函数操控日志文件或控制台设备文件会严重影响linux的驱动性能。只要只在开发阶段使用printK函数,在正式发布linux驱动时把有可能影响性能的printK函数去掉。

    三、通过虚拟文件系统(/proc)进行数据交互:在linux文件系统中,/proc经常用来被作为用户空间和内核空间进行数据交互的工具。/proc文件系统的行为方式和设备系统(/dev)的类似。

    四、调试工具:gdb,gdbservice,和kgdb。

  • 相关阅读:
    WPF使用Mutex创建单实例程序失效
    招式百出的数组(js)
    js中,如何把一个混杂的字符串进行去重并按数字在左,字母在右组成的新字符串打印出来
    字符串对象(js)
    时间对象(js)
    数组迭代的5个小宝贝(js)
    线程的状态
    线程
    JAVA学习规划
    简单的反射实例
  • 原文地址:https://www.cnblogs.com/zhaoruixia/p/5638572.html
Copyright © 2011-2022 走看看