1.主要讲了对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试。例如,设置断点、逐步跟踪代码、输出调试信息等。 2.打印内核调试信息:printk printk 函数的用法与printf 函数类似,只不过printk函数运行在内核空间, printf函数运行在用户空间。也就是说 ...
分类:
系统相关 时间:
2016-07-07 22:39:40
阅读次数:
274
第十章 打印内核的调试信息printk: printk与printf区别: printk 函数该函数的用法与printf函数类似,具不过printk函数运行内核空间,printk函数运行在用户空间。也就是说,像Linux驱动这样的Linux内核程序只能使用prink函数输出调试信息。 其次应该防止p ...
分类:
其他好文 时间:
2016-07-07 22:36:16
阅读次数:
200
编译是由多个文件组成的Linux驱动。对于复杂的Linux 驱动,就需要使用多个源代码文件存放不同的功能代码,这样有利于代码的分类和管理。 小实验:将 3 个.c 文件分别编译成 3 个.0 文件,并将这3 个.0 文件链接生成.ko 文件。 1.编写main.c文件,以及fun.c、product ...
分类:
其他好文 时间:
2016-07-07 22:34:28
阅读次数:
188
第九章HAL是建立在linux驱动之上的一套程序库。这套程序库并不属于linux内核,而是属于linux内核层之上的应用层。可以用来保护不想公开源代码的作者。HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序 ...
分类:
其他好文 时间:
2016-07-07 22:33:27
阅读次数:
179
(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数、变量、宏等) 1、编译是由多个文件组成的Linux驱动(静态重用) 对于复杂的Linux驱动,需要使用多个源代码文件存放不同的功能代码,这样做有利于代码分 ...
分类:
移动开发 时间:
2016-07-07 22:27:58
阅读次数:
219
通过第十章的学习,我学到了如下知识点: 1、尽管linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是本机的I/O内存进行交互。 linux驱动 I/O内存 硬件 2、linux内核的内存管理模块负责同步I/O内存和硬件中的数据。每一个连接linux的硬件在linux内 ...
分类:
其他好文 时间:
2016-07-07 22:26:18
阅读次数:
185
1.HAL(Handerware Abstraction Layer,硬件抽象层)是建立在linux程序上的一套程序库,这套程序库并不属于内核,而是属于内核之上的应用层。 2.要在Android中加入HAL的原因:在linux驱动中一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬 ...
分类:
其他好文 时间:
2016-07-07 22:26:16
阅读次数:
114
第十一章 Linux驱动程序中的 并发控制 并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资 源〈如硬件资摞、程序中的全局变量、静态变量等〉的访问很容易导致竞态条件( race conditions)。 自旋锁并不关心锁定的|临界区究竟是怎样的操作,不管是读 ...
分类:
其他好文 时间:
2016-07-07 22:25:23
阅读次数:
169
通过第八章的学习,我学到了如下知识点: 一、Linux驱动的代码重用 1、编译是由多个文件组成的Linux驱动 如果Linux驱动只有1个源代码文件,0bj-m变量可以和源代码文件同名。如果Linux驱动包含多个文件,就需要使用module-y来指定所以的目标文件。 2、Linux驱动模块的依赖 代 ...
分类:
其他好文 时间:
2016-07-07 22:22:25
阅读次数:
144
第九章 硬件抽象层 HAL 在传统的Linux.系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑有码。对于访问硬件寄存器的代码,并没有什么秘密可言,因为这都是调用的 Linux 内核的标准函数进行的标准操作4 而Linux驱动的业务逻辑部分对击有些企业或个人并不想将源代码公开 ...
分类:
其他好文 时间:
2016-07-07 22:18:42
阅读次数:
139