printk函数的用法于-printf 函数类似,只不过printk函数运行在内核空间, printf函数运行在用户空间。也就是说,像Linux 驱动这样的Linux内核程序只能使用printk 函数输出调试信息

虽然使用printk 函数可以很方便地将消息写入日志文件或控制台。但大量使用printk 函数频繁操作日志文件或控制台设备文件Udev/console)会严重影响Linux 驱动的性能(因为写磁盘的速度远没有读写内存的速度快〉,因此,这就要求Linux 驱动只在开发阶段使用printk 函数输出消息,在正式友布Linux 驱动时将可能影响性能的printk 函数去掉. 当然,最容易想到的方法就是挨个删除printk 函数,或注释printk 函数。但这样做很麻烦,而且以后想加上printk 函数也是同样麻烦。要想控制printk 函数的输出,而且实现起来很方便, 最好的方法无疑是利用C 语言中的编译指令(#if 、#else 、#endif 等)。打印内核调试信息:printk

 printk 函数的原型如下:

 asmlinkage int printk(const char * fmt, ...)

printk文件是一个简单的有4 个数字组成的文本文件,该文件的默认.如下:

6    4    1    7

如果想修改printk 文件中的内容,要求任何信息都输出到控制台,可以在Linux 终端执行下面的命令。

#echo 8 > /proc/sys/kernel/printk

修改后的printk 文件的内容如下:

8    4    1    7

执行有如下的命令可以编译和安装printk_demo驱动。

# sh build.sh

防止printk函数降低Linux驱动性能:

修改上-节的printk_demo 驱动代码,通过编译指令定义了一个pr_debug宏,并通过修改编译指令的条件值来控制是否调用printk函数。

通过虚拟文件系统(/proc)进行数据交互http://www.cnblogs.com/caoyutao/

Android深度探索--HAL与驱动开发----第十章读书笔记的更多相关文章

  1. Android深度探索--HAL与驱动开发----第二章读书笔记

    1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Andro ...

  2. Android深度探索--HAL与驱动开发----第九章读书笔记

    Google为Android加入HAL主要有如下的目的. 统一硬件的调用接口.由于HAL 有标准的调用接口,所以可以利用HAL屏蔽Linux 驱动复杂.不统一的接口. 解决了GPL版权问题.由于Lin ...

  3. Android深度探索--HAL与驱动开发----第八章读书笔记

    通过蜂鸣器的实现原理,实现一个完整的蜂呜器驱动,可以打开和关闭蜂鸣器. PWM驱动的实现方式不同于LED驱动, PWM 驱动将由多个文件组成.这也是大多数 Linux 驱动的标准实现方式. 刚开始是L ...

  4. Android深度探索--HAL与驱动开发----第一章读书笔记

    1. Android的系统架构有四层,它的发展目前来说 是比较成熟的,流行于目前的市场.其架构包括四层(linux内核.C/C++代码库.Android SDK API.应用程序). 2. 驱动是直接 ...

  5. Android深度探索HAL与驱动开发 第四章 源代码下载和编译

    前面说过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:A ...

  6. Android深度探索HAL与驱动开发 第三章 Git入门

    Git功能十分复杂,简单来说它使你的开发更为快捷和可控,尤其是在开源项目上展现的友好的交互和回馈. 熟悉一些git指令操作对开发者的帮助可以避免开发者受到一些外在因素打断开发进度,甚至延误项目的che ...

  7. Android深度探索HAL与驱动开发 第二章 搭建Android开发环境

    通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...

  8. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  9. 《Android深度探索HAL与驱动开发》第一章阅读心得

    首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...

随机推荐

  1. appml的安装与使用

    来自w3cshool的中文文档:http://www.w3cschool.cc/appml/appml-tutorial.html 我们要做的是完整的例子,所以从这里http://www.w3csch ...

  2. spring 驱动模式

    驱动模式 public class ProAction extends ActionSupport implements ModelDriven<Product>{ //驱动模式 priv ...

  3. gulp教程之gulp-livereload

    简介: gulp-livereload拯救F5!当监听文件发生变化时,浏览器自动刷新页面.[事实上也不全是完全刷新,例如修改css的时候,不是整个页面刷新,而是将修改的样式植入浏览器,非常方便.]特别 ...

  4. MD5加密、时间戳转换、base64算法加密、解密

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...

  5. oracle 存储过程访问其他用户的表

    用户user2想在存储过程中查询用户User1的表table1, 在PL/SQL中用user1登陆,执行以下语句即可: grant select on User1.table1 to user2;

  6. 关于RSA加密算法的长度限制问题

    RSA是常用的非对称加密算法.近来有学生在项目中使用System.Security类库中的RSA加密算法时,出现了“不正确的长度”,这实际上是因为待加密的数据超长所致..net Framework中提 ...

  7. js正则表达式大全(1)

    正则表达式中的特殊字符 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. ...

  8. 需要不断学习的编程知识库list

    1.重构思想: 2.回调思想: 3.封装思想: 4.模块化思想: 5.复用思想: 6.C++的面向对象思想:  -----后续

  9. AutoCAD学习笔记

    学习笔记: **有些命令,有两到三种执行方式:菜单.命令行.对话框.如layer命令,如果在命令行打入layer命令,就会弹出对话框主y式,如果要命令行方式执行,就需要在前面加一个-号,即-layer ...

  10. HDU--杭电--1026--Ignatius and the Princess I--广搜--直接暴力0MS,优先队列的一边站

    别人都是广搜+优先队列,我没空临时学,所以就直接自己暴力了 Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)     ...