一、打印内核调试信息:printk

  Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,printk函数在printk.c文件中实现。

  Printk函数的原型如下:asmlinkage int printk(const char *fmt,...)

  第1个参数表示格式字符串,后面是可变参数。第一个参数值前面加尖括号包含的数字表示输出的日志级别,共有8个级别,在linux/kernel.h头文件中定义。

嵌入式Linux的调用技术

调试方法:设置断点、逐步跟踪代码、输出调试信息。

打印讷河调试信息:printk。Printk函数运行在内核空间,printk函数运行在用户空间。Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息。

Asmlinkage int printk(const char *fmt, …)第一个参数表示格式字符串,后面是可变参数。

虽然使用printk函数可以很方便的将纤细写入日志文件或控制台,但是大量使用printk函数频繁操作日志文件或控制台设备文件会严重影响Linux驱动的性能。防止printk函数降低Linux驱动的性能

通过虚拟文件系统进行数据交互。在Linux文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具。/proc并不是真正的文件系统,而是映射内存。所有读写/proc的操作都是对内存的读写,所以读写/proc文件系统的速度要远比读写/dev文件系统的速度快。因此,/proc文件系统也可以作为Linux驱动与用户空间程序交互的工具。有很多系统信息就是通过/proc文件系统由内核空间的程序向外界提供的。/proc文件系统和/dev文件系统一样,也需要设置访问文件的动作处理函数。

Proc_mkdir:

name:虚拟目录名称

parent:虚拟目录父目录的proc_dir_entry结构体指针

create_proc_entry

name:虚拟文件名称

mode:虚拟文件的访问权限,等同于Linux问价的访问权限

parent:虚拟文件父目录的proc_dir_entry结构体指针。

Create_proc_read_entry

name:虚拟文件名称

mode:虚拟文件的访问权限,等同于Linux问价访问权限。

base:虚拟文件父目录的proc_dir_entry结构体指针。

read_proc:处理读动作的函数指针。

data:用于虚拟文件系统的数据。该值就是proc_dir_entry.read_proc函数的最后一个参数值

remove_proc_entry

name:要删除的虚拟文件的名称

parent:虚拟文件父目录的proc_dir_entry结构体指针。

调试工具:

1用gdb调试用户空间程序

2gdbserver远程调试用户空间程序

3kgdb远程调试内核程序

http://www.cnblogs.com/lhczln/

转载于:https://www.cnblogs.com/lhczln/p/5652660.html

Android深度探索--HAL与驱动开发----第十章读书笔记相关推荐

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

    1.1   Android拥有非常完善的系统构架可以分为四层: 第一层:Linux内核.主要包括驱动程序以及管理内存.进程.电源等资源的程序 第二层:C/C++代码库.主要包括Linux的.so文件以 ...

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

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

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

    Git--源代码管理软件,Git功能十分复杂,我们需要完成的功能有:创建版本库,提交源代码,创建分支,向远程服务器提交源代码,从远程服务器获取源代码等.而本章的学习内容就是掌握如何使用Git从源代码托 ...

  4. android深度探索 HAL及驱动开发 第八章

    第八章 读书笔记 本章主要讲蜂鸣器的驱动,蜂鸣器是S3cC6410开发板上带的一个硬件设备,本节将介绍蜂鸣器的实现原理,并实现一个完整的蜂鸣器驱动.本节讲介绍把linux驱动分成多个文件的方式.这些文 ...

  5. Android深度探索HAL与驱动开发—第8章

    (一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...

  6. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

  7. Android深度探索(卷一)第四章读书笔记

    通过对git使用方法的学习, 第四章就介绍了源代码的下载和编译. 4.1 下载.编译和测试Android源代码 4.1.1 配置Android源代码下载环境:1创建一个用于存放下载脚本文件的目录.2下 ...

  8. 《Android深度探索》(卷1)HAL与驱动开发 第十章心得体会

    本章主要讲了嵌入式Linux的调试技术. (一)打印内核调试信息:printk Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,pri ...

  9. 《Android深度探索(卷1):HAL与驱动开发》——1.6节 Linux设备驱动

    本节书摘来自异步社区<Android深度探索(卷1):HAL与驱动开发>一书中的第1章,第1.6节 Linux设备驱动,作者李宁,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. MATLAB:图像的与、或、非、异或逻辑运算(、|、~、xor)
  2. php二叉树广度插入数据,php-如何在不使用广度优先遍历的情况下找到二叉树级别k的节点数?...
  3. 准备重新回归信息安全产业
  4. nginx针对某个url限制ip访问,常用于后台访问限制
  5. drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化
  6. 把数据输出到Word (非插件形式)
  7. Spark报错:JDOFatalInternalException: Error creating transactional connection factory
  8. selenium (二)
  9. [论文阅读] Learning a Unified Classifier Incrementally via Rebalancing
  10. input的oninput、onchange与onpropertychange事件
  11. er ubnt x设置教程_ubnt的er-x做交换机应该怎么设置啊?
  12. IsValid函数基本用法
  13. 如何将windows桌面变成类似mac样式
  14. java梯形_如何绘制梯形?
  15. SQLException: Invalid value for getInt() - ‘XXX‘
  16. 获取gridview当前选中行的内容
  17. android报错:TextView.setText(java.lang.CharSequence)on a null object reference
  18. Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)
  19. OSChina 周六乱弹 ——对!今天全是妹子!
  20. 大量大量大量的代码练习,到底是对还是错?

热门文章

  1. iOS项目之同时点击多个按钮解决方案
  2. HDU1010:Tempter of the Bone(dfs+剪枝)
  3. discovery_01
  4. 易中天与单田芳的区别在哪儿
  5. python哈夫曼编码注意_Python 算法(2) 哈夫曼编码 Huffman Encoding
  6. 阿里云低延时直播RTS能力升级,让直播推流效果更佳
  7. Dubbo 版 Swagger 来啦!
  8. 一文了解分布式一致性算法EPaxos
  9. 神马搜索如何提升搜索的时效性?
  10. 通过动效学习UI设计