码迷,mamicode.com
首页 > 其他好文 > 详细

8-10章笔记

时间:2016-07-03 18:52:34      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

第八章:

1、通过蜂鸣器实现一个完整的蜂呜器驱动,可以打开和关闭蜂鸣器.。

2、PWM驱动的实现方式不同于LED驱动, PWM 驱动将由多个文件组成。

3、Linux 驱动的代码重用的方法:

1)采用标准 C程序的方式。将要重用的代码放在其他 的文件 (在头文件中声明〉中。 如果要使用某些功能, include 相应的头文件即可〈这种方式称为 静态重用〉。

2)使用另外一种动态重用的方式,也就是一个 Linux 驱动可以使用另外←个 Linux 驱动中的资源(函数、变量、宏等)。

4、强行卸载Linux驱动(只能卸载自于异常情况而导致的 Linux 驱动模块无法卸载的情况)

1)白 初始化函数崩溃

2) 卸载函数被阻塞

5、蜂鸣器驱动蜂鸣器驱动的原理蜂鸣器也称为 PWM (脉冲宽度调制〉,基本原理是通过脉冲来控制蜂鸣器的打开和停止。实现蜂鸣器驱动测试蜂鸣器驱动

6、PWM 驱动与LED驱动的原理相似

7、通过有I/O命令可以打开和停止PWM,PWM 驱动由3 个文件组成: pwm.c, pwm_fun.h 、pwm_fun.c(pwm.c 是驱动主程序;pwm_fun.h 引用了相应的头文件,以及定义了一些宏;pwm_fun.c 文件则包含了打开和停止PWM的两个函数( pwm_start 和pwm_stop ))

8、运行之后从Makefile 文件的内容可以看出,

1)首先将pwm.c 和pwm_fun.c 文件编译成pwm.o和pwm_fun.o,

2)然后再将这两个*.o文件链接成pwm_driver.o,

3)最后生成pwm_driver.ko 。

9、测试蜂鸣器驱动

1)进入/root/drivers/ioctl 目录, 执行build础脚本文件编译和上传ioctl 文件〈如果启动多个Android 设备,要选择上传到S3C6410 开发板。

2)在测试PWM 驱动之前,先要按照上一节的方法编译和安装PWM 驱动,然后进入开发板终端的Idata/local 目录, 输入打开和关闭PWM的明令 。

3)由于ioctl 命令必须要求输入I/O命令的参数,但PWM 驱动未使用I/O 命令参数。所以ioctl 最后一个命令行参数可以任意输入。执行上面的命令后,如果输出(# . / ioctl /dev/pwm_dev 1 0)的信息,并且PWM. 可以正常发出尖叫声,说明PWM 驱动测试成功。

10、Linux代码的重用:

1)在头文件中加载即可使用到原来所有的功能,还有动态方式就是一个驱动使用另一个驱动的资源。

2)对于像蜂鸣器这样的实验,它的内部文件有很多,所有要有很多的源代码以用于妥善管理。

3)有多个文件的话,module-y指定所有的文件,然后将会生成一个build.sh脚本,使用sh执行,使用dmesg查看日志信息。

4)代码重用分为静态和动态的。静态重用是生成.ko内核,动态重用是模块依赖,一个驱动使用另一个驱动模块里导出的符号。

5)重启开发板或者模拟器.ko文件就会自动消失。使用异常情况卸载(1.初始化函数卸载。2.卸载函数被阻塞)

6)卸载一个驱动,需要输入一堆命令查询module结构体的首地址,安装和下载force_kill_driver驱动。

7)蜂鸣器的驱动实现原理与LED基本相同,但是实现方式不同,因为PWM是由多个文件组成的。

8)静态函数结构体,PWM设备文件open函数,使用信号量控制在同一时刻 只能打开PWM设备文件,然后close函数释放信号量,ioctl()函数处理I/O命令,设置文件设备file_operation设备,最后在最开始初始化信号量,移除信号量。在pwm.h文件PWM_IOTCL_START打开,PWM_IOTCL_STOP停止,生成.ko文件,编译成功。

第九章

1、硬件抽象层:HAL,它是建立在Linux驱动之上的一套程序库。

2、在Android中加入HAL的目的:

1)统一硬件的调用接口

2)解决了GPL版权问题

3)针对一些特殊的要求。

3、可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作。

4、Android HAL架构。

5、led驱动增加HAL,主要是将所有的业务逻辑从LED驱动移到HAL模块,而LED驱动只保留读写寄存器的功能。

6、HAL步骤:

1)编写Linux驱动

2)编写HAL Library

3)编写Service Library 精简LED驱动

7、编写HAL模块的步骤和原理:

1)定义结构体和宏 编写HAL模块需要使用到3个非常重要的结构体,在第一步需要定义两个新的结构体。

2)编写HAL模块的open函数 open函数是HAL模块的入口点。本例中使用的是led_device_open函数。该函数主要做如下三个工作。初始化hw_device_t的子结构体。 打开设备文件。 初始化寄存器。

3)定义hw_module_methhods_t 结构体变量

4)定义HAL_MODULE_INFO_SYM函数

5)编写HAL模块的close 函数 当HAL模块被卸载后会调用close函数

6)编写控制LED的函数

第十章

嵌入式Linux的调试技术

1、 在Linux文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交换的工

2、 /proc 文件系统的行为方式与设备文件系统(/dev)类似。

3、 /proc是虚拟文件系统,也就是说,/proc并不是真正的文件系统,而是内存映射。

4、 所有读写/proc的操作都是对内存的读写。

5、 所有读写/proc文件系统的速度要远比读写/dev文件系统的速度快。

6、 /proc文件系统也可作为Linux驱动与用户空间程序交互的工具。

7、 在Linux系统中提供了一类工具。通过这些工具可以逐行跟踪程序的代码,就好像可视化开发工具的step into和step over一样。这些工具包含用于调试用户空间程序的gdb、gdbserver和调试内核空间的kgdb。

8、 对于任何一位内核代码的编写者来说,最急迫的问题之一就是如何完成调试。由于内核是一个不与特定进程相关的功能集合,所以内核代码无法轻易地放在调试器中执行,而且也很难跟踪。同样,要想复现内核代码中的错误也是相当困难的,因为这种错误可能导致整个系统崩溃,这样也就破坏了可以用来跟踪它们的现场。

9、 通过打印调试最普通的调试技术就是监视,即在应用程序编程中,在一些适当的地点调用printf显示监视信息。调试内核代码的时候,则可以用 printk 来完成相同的工作。

10、             调试内核的方法(使用调试器来一步步地跟踪代码,查看变量和计算机寄存器的值):

1) 使用gdb,gdb在探究系统内部行为时非常有用。在我们这个层次上,熟练使用调试器,需要掌握 gdb 命令、了解目标平台的汇编代码,还要具备对源代码和优化后的汇编码进行匹配的能力。

2) 使用Kgdb,kgdb 程序(使用 gdb 的远程主机 Linux 内核调试器)提供了一种使用 gdb 调试 Linux 内核的机制。kgdb 程序是内核的扩展,它让您能够在远程主机上运行gdb时连接到运行用kgdb扩展的内核机器。可以接着深入到内核中、设置断点、检查数据并进行其它操作(类似于您在应用程序上使用 gdb 的方式)。这个补丁的主要特点之一就是运行gdb的主机在引导过程中连接到目标机器(运行要被调试的内核)。这让您能够尽早开始调试。请注意,补丁为Linux内核添加了功能,所以gdb可以用来调试Linux内核。(使用kgdb需要两台机器:一台是开发机器,另一台是测试机器,一条串行线(空调制解调器电缆)将通过机器的串口连接它们)

8-10章笔记

标签:

原文地址:http://www.cnblogs.com/lingtingbiandang/p/5638478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!