Android深度探索第十章总结

学习第十章,也就是嵌入式Linux的调试技术。主要介绍如何利用开发板、Android模拟器以及一些函数、工具(gdb、gdbserver以及kgdb)调试嵌入式Linux内核模块、可执行程序和共享库。1、打印内核调试信息:printk。Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,printk函数在printk.c文件中实现。不管消息级别是多少,所有通过printk函数发出的消息都会输出到日志文件(就算有的消息输出到控制台,也会同时输出到日志文件)。可以通过如下的命令查询日志。2、防止printk函数降低Linux驱动性能。虽然使用printk函数可以很方便地将消息写入日志文件或控制台。但大量使用printk函数频繁操作日志问阿金或控制台设备文件会严重影响Linux驱动的性能。因此,这就要求Linux驱动只在开发阶段使用printk函数输出消息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。最好的方法无疑是利用C语言中的编译指令。(#if、#else、#endif等)。如果不想使用printk输出消息,只要将#if中的1改为0即可不使用printk输出消息。3、通过虚拟文件系统(/pron)进行数据交互。/pron用来作为内核空间与用户空间进行数据交互的工具。/pron是虚拟文件系统,是内存映射,所有读写/pron的操纵都是对内存的读写,所以,它也可以作为Linux驱动与用户空间程序交互的工具。/pron文件系统主要通过proc_dir_entry.read_proc和proc_dir_entry.read_write函数指针来设置读写/pron目录中的虚拟文件的动作处理函数,proc_dir_entry结构体代表一个虚拟目录或文件。4、调试工具。Linux系统中提供了一类工具,这些工具可以逐行跟踪程序的代码分别是:用于调试用户空间程序的gdb、gdbserver和调试内核空间程序的kgdb。gdb调试用户空间程序,它可以跟踪调试用户空间的程序,但是它只能在PC上进行测试。gdbserver远程调试用户空间程序,用gdbserver 可以测试运行在开发板、手机或Android模拟器上的程序。gdbserver是一个可以运行在ARM架构上的服务端程序,在开发板上使用gdbserver打开要测试的程序,然后通过串口、有线或无线网络可以在PC上进行调试。kgdb远程调试内核程序。它提供类似printk函数的复制输出功能,允许开发人员直接在PC上通过GDB链接目标设备。

时间: 2024-10-22 01:05:07

Android深度探索第十章总结的相关文章

android深度探索第十章心得体会

第十章讲了 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行测试.例如设置断点.逐步跟踪代码输出调试信息等. 在Linux系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具,/proc文件系统的行为方式与设备文件系统类似./proc是虚拟文件系统,也就是说,/proc并不是真正的文件系统,而是内存映射.所有读写/proc的操作都是对内存的读写.所以读写/proc文件系统的速度要远比读写/dev文件系统的速度快,因此,/proc文件系统也可作为Linux驱动与

Android深度探索——第十章读书笔记及心得

嵌入式linux的调用技术 ——第10章读书笔记及心得 通过本章的学习了解了printk函数.该函数与printf函数类似,用于打印内核调试信息.只是前者运行在内核空间,后者运行在用户空间.即linux驱动这样的linux内核程序只能使用printk函数输出调试信息.Printk函数的原型:asmLinkKage int printk(const char *fmt,…).Printk文件是一个简单的有4个数字组成的文本文件,该文件的默认值问6 4 1 7.6代表将消息输出到控制台的级别,只有高

Android深度探索第十章

对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点.逐步跟踪代码.输出调试信息.虽然嵌入式Linux在调试方面并没有Visual Studio.Delphi.Eclipse这些可视化工具方便,但学习一些这方面的技术无疑是更有助于开发强大而稳定的Linux内核模块. 虽然使用printk函数可以很方便地将消息写入日志文件或控制台.但大量使用printk函数频繁操作日志文件或控制台设备文件会影响Linux驱动的性能,因此,这就要求Linux驱动在开发阶段使用pri

《Android深度探索》第十章心得体会

<Android深度探索>第十章讲的是嵌入式Linux的调试技术.对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行测试.printk函数的用法和printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间.也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息.在Linux文件系统中,/proc经常用来作为内核空间和用户空间进行数据交互的工具./proc文件系统的行为方式和设备文件系统(/dev)类似./proc是

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码.输出调试信息等.虽然嵌入式Linux在调试方面并没有Visual Studio.Delphi.Eclipse这些可视化工具方便,但是学习一些这方面的技术无疑更有助于开发强大而稳定的Linux内核模块. 对于嵌入式Linux内核模块,可执行程序.代码库的调试可能更要复杂些.因为在大多数时候需要至少两台

Android深度探索(卷一)HAL与驱动开发 第十章

通过学习Android深度探索(卷一)HAL与驱动开发的第十章让我知道了嵌入式Linux的调试技术和调试工具有哪些. Printk可以打印内核调试信息,该函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间.Printk文件是一个简单的有四个数字组成的文本文件,该文件默认值为:6:将消息输出到控制台的级别:4:默认的消息日志级别:1:控制台日志级别可被设置的最小值:7:控制台日志级别的默认值.不管消息级别是多少,所有通过printk函数发出的消息

Android深度探索HAL与驱动开发 第四章

Android深度探索HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 一.下载编译和测试Android源代码 1.配置Android源代码下载环境 创建一个用于存放下载脚本文件的目录(可将该文件放到任何一个目录在这里使用-/bin) # mkdir ~/bin # PATH=~/bin:$PATH 2.下载repo脚本文件(用于下载Android源代码) # curl htttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/

Android深度探索HAL与驱动开发 第三章

Android深度探索HAL与驱动开发 第三章 Git使用入门 读书笔记 Git是对源代码进行管理的软件. 一.安装Git # apt-get install git # apt-get install git-doc git-emall git-gui gitk 用以下命令控制Git: # apt-get install git-core # apt-get install git-doc git-svn git-email git-gui gitk 二.查看Git文档 查看git-check

Android深度探索(卷1)HAL与驱动开发学习笔记(2)

Android深度探索(卷1)HAL与驱动开发学习笔记(2) 第二章搭建Android开发环境 书中介绍了两种JDK的安装方法, 方法一: 从官网下载JDK并进行配置,解压后在终端打开profile文件来设置PATH环境变量(# soure /etc/profile),打开profile文件后输入下面的内容 export PATH=.:developer/jdk6/bin:$PATH 保存profile文件以后,有两种方法可以重新加载profile文件. 1.# sourse  /etc/pro