本章介绍了传统的printk 函数调试技术和其他的调试技术,如gdb gdbserver  kgdb

对于复杂的Linux 驱动及HAL 等程序库,需要使用各种方法对其进行调试,如,设置断点、逐步跟踪代码、输出调试值息等

打印内核调试信息:printk

printk函数运行在内核空间,printf函数运自行在用户空间

printk 函数的原型asmlinkage int printk(const char * fmt, ... ) printk 函数至少要有1个参数(格式字符串),如果格式字符串中包含有占位符,后由必须跟与占位符相等数量的参数,以便一一对应传入printk 函数

如果想让printk 函数将消息输出到控制台.还需要另外一个条件,就是要求在字符界面下操作,printk 函数只有用在字符界面的控制台上才能正常输出消息.

虽然使用printk 函数可以很方便地将消息写入日志文件或控制台。但大量使用printk 函数频繁操作日志文件或控制台设备文件会严重影响Linux 驱动的性能,后期要删除printk函数

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

/proc 文件系统和/dev 文件系统一样,也需要设置访问文件的动作处理函数(主要是读写操作)。/dev 文件系统通过且le_operations.read 和file_operations. write 函数指针变量设置读写设备文件的读写作处理函数。而/proc 文件系统主要通过proc_dir_entry.read_proc 和proc_dir_entry.read_write 函数指针来设置读写/proc 目录中的虚拟文件的动作处理函数。

有四个函数proc_mkdir   create_proc_entry              create_proc_read_entry              remove _proc _ entry

create _proc _read_ entry 函数在内部是通过调用create_proc _ entry函数实现的

Linux 文件的读写由属性决定

删除虚拟目录之前, 要先删除虚拟目录中的虚拟文件

Linux 系统中提供了一类工具,可以使用工具逐行跟踪程序的代码,这些工具包含用于调试用户空间程序的gdb、gdbserver 和调试内核空间程序的kgdb

gdb 可以跟踪调试用户空间的程序

使用gdbserver可以测试运行在开发板、手机或Android 模拟器上的程序gdbserver 是一个可以运行在ARM 架构上的服务端程序。也就是说,在开发板上使用gdbserver 打开要测试的程序,然后通过串口、有线或无线网络可以在PC 上进行调试

用kgdb 远程调试内核程序,Kgdb 除了提供类似printk 函数的日志输出功能,还允许开发人员直接在PC 上通过GDB 链接目标设备,Kgdb 包含了两部分: kgdb 内核和一牵连接接口

Android深度探索-卷1第十章心得体会的更多相关文章

  1. Android深度探索-卷1第九章心得体会

    在android系统中使用Linux 驱动有两种方式一种是通过传统的方式直接与Lmux 驱动交互,如,直接读写设备文件的数据.另外一种是Android特有的,就是通过HAL 模块.HAL 模块本质是通 ...

  2. Android深度探索-卷1第二章心得体会

    这章介绍了搭建Android开发环境的的搭建,主要是在Linux上搭建Android开发环境总体来说因为都是在Linux下开发的,so,只介绍了在Linux环境下的搭建在搭建过程中全是命令操作,和Wi ...

  3. Android深度探索-卷1第一章心得体会

     本章介绍了安卓系统移植与驱动开发的概述,安卓的系统架构有四层:1 Linux内核,2 c/c++代码库, 3 Android SDK API, 4 应用程序 在读的过程中看到了专业名词,查了查,长点 ...

  4. Android深度探索-卷1第八章心得体会

    本章介绍了如何将Linux驱动分成多个实现文件和Linux常用的代码重用方式还有些强行卸载Linux驱动的方法 开发一个Linux驱动,可能会在init.exit等函数中发生错误导致Linux驱动安装 ...

  5. Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装

    前言: 最近在看<Android深度探索(卷1)HAL与驱动开发>安装随书带的虚拟环境浪费了很多时间,说是虚拟环境的安装倒不如说是虚拟环境的导入,其实没什么技术含量,也没有什么复杂的,只是 ...

  6. Android深度探索-卷1第五章心得体会

    S3C6410是由三星公司推出的一款低功耗.高性价比的RISC处理器,开发是,首先安装minicom串口调试工具: 第一步:检测当前系统是否支持USB转串口. Lsmod | grep usseria ...

  7. Android深度探索-卷1第四章心得体会

    这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的 ...

  8. Android深度探索-卷1第七章心得体会

    创建LED驱动的设备文件 第一步:使用cdev_init函数初始化cdev 第二步:指定设备号.直接在代码指定或动态分配 第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第四步 ...

  9. Android深度探索-卷1第六章心得体会

    这章主要介绍了第一个linux驱动程序:统计单词个数.Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.大多数Linux驱动都有与其对应的设备文件,因 ...

随机推荐

  1. 中标麒麟系统安装rpm文件

    打开终端,获得su权限. cd到rpm所在文件夹,输入指令,rpm -ivh rpm的名称

  2. 牛客练习赛51 C 勾股定理https://ac.nowcoder.com/acm/contest/1083/C

    题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输入描述: 一个整数n. 输出描述: 另外两条边b,c.答案不唯一,只要输出任意一组即为合理, ...

  3. app防攻击办法

    方法一 要求请求端带上一个随机字符串state(也可以是特定规则生成的,甚至是从服务器上请求过来的),服务端(用过滤/拦截器之类的实现不会影响业务代码)收到之后缓存一定的时间(长短视业务和硬件),每次 ...

  4. SpringBoot 集成MyBatis 中的@MapperScan注解

    SpringBoot 集成MyBatis 中的@MapperScan注解 2018年08月17日 11:41:02 文火慢炖 阅读数:398更多 个人分类: 环境搭建 在SpringBoot中集成My ...

  5. Leetcode Lect7 哈希表

    传统的哈希表 对于长度为n的哈希表,它的存储过程如下: 根据 key 计算出它的哈希值 h=hash(key) 假设箱子的个数为 n,那么这个键值对应该放在第 (h % n) 个箱子中 如果该箱子中已 ...

  6. 1-基于Xilinx XCKU115的半高PCIe x8 硬件加速卡

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 一.概述 本板卡系我公司自主研发,采用Xilinx公司的XCKU115-3-FLVF1924-E芯片作为主处理器,主要用于FPGA硬件 ...

  7. Linux架构之Nginx 负载均衡会话保持

    案例No.50:Nginx负载均衡会话保持 前期准备环境 web01.web02 (web01.web02.db01.nfs01都要优化基本源)[root@web01 ~]# vim /etc/yum ...

  8. [CF] 8C Looking for Order

    状压模板题 CF难度2000? 我得好好了解一下CF的难度机制了 反正CF的难度比洛谷真实就好了 Code #include<algorithm> #include<iostream ...

  9. css 伪类选择器:checked实例讲解

    css :checked伪类选择器介绍 css :checked伪类选择器用于选择匹配所有被选中的单选按钮(radio)或复选框(checkbox),你可以结合:checked伪类选择器和:not选择 ...

  10. TPS、QPS和系统吞吐量的区别和理解

    参考:https://blog.csdn.net/u010889616/article/details/83245695 一.QPS/TPSQPS:Queries Per Second意思是“每秒查询 ...